第一次作业
2018-03-25 18:24 梁圣然 阅读(246) 评论(20) 编辑 收藏 举报6-1 计算两数的和与差
一.设计思路
(1)描述算法:
1.仔细阅读题目,了解题意。
2.查看主函数,并找出函数中的形参和实参。
3.根据题意将op1和op2的和赋给psum 即psum=op1+op2; 同理,将op1和op2的差赋给pdiff 即pdiff=op1-op2;
4.提交答案 根据提示加以改正,直到程序成功运行。
(2)流程图:
二.实验代码:
void sum_diff( float op1, float op2, float *psum, float *pdiff ){
*psum=op1+op2;
*pdiff=op1-op2;
}
三.调试过程中碰到的问题和解决办法
错误原因:做题的时候马虎语句后不加“;”
改正方法:在每句语句后注意加“;”注意:不要画蛇添足例如if条件句括号后不加“;”
6-2 拆分实数的整数与小数部分
一.设计思路
(1)描述算法:
1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.由题意可知x为实数型将其强制转化为整形取整数部分(int)x;然后并将值赋给 intpart
4.将原来的实数减去整数部分为剩下的小数部分,再将小数部分赋给fracpart 即fracpart=x-intpart;
(2)流程图:
二.实验代码:
void splitfloat( float x, int *intpart, float *fracpart ){
*intpart=(int)x;
*fracpart=x-*intpart;
}
三.调试过程中碰到的问题和解决办法
错误信息:程序不能通过
错误原因:强制转化的格式错误
改正方法:正确格式为(int)x;
6-1 在数组中查找指定元素
一.设计思路
(1)描述算法:
1.仔细阅读题目,了解题意。
2.查看主函数,并找出函数中的形参和实参
3.利用for循环语句,将数组中的元素x循环比较如果存在于x相同的记录其下标并通过break结束循环,return将找到的值返回主函数
4.存在则返回下标,不存在输出Not found
(2)流程图:
二.实验代码:
int search( int list[], int n, int x ){
int j;
int b=-1;
for(j=0;j<n;j++)
{
if(list[j] == x)
{
b=j;
break;
}
}return(b);
}
三.调试过程中碰到的问题和解决办法
错误原因:多次查找函数中与“x"相等的元素
改正方法:for循环中加入一个break 或者return结束函数
6-2 找最大值及其下标
一.设计思路:
(1):描述算法
1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.定义一个数组a[n] 循环变量i 最大值max 最大值下标p
4.调用函数利用函数找出最大值确定下标,输出结果
(2).流程图
二实验代码:
int fun(int *a,int *b,int n){
int j;
int q=a[0];
for(j=0;j<N;j++){
if(a[j]>q)
{
*b=j;
q=a[j];
}
}return(q);
}
三.调试过程中碰到的问题和解决办法
错误原因:没有给q赋初值
改正方法:将a[0]赋给q
6-1 最小数放前最大数放后
一.设计思路:
(1):描述算法
1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.利用第一个函数定义一个数组
4.定义两个变量p,q负责记录最大最小值下标
5.输出数组元素,并且元素输出占3列
(2).流程图
二.实验代码:
void input(int *arr,int n){
int i;
for(i=0;i<n;i++){
scanf("%d",arr+i);
}
}
void max_min(int *arr,int n){
int min=arr[0],max=arr[0];
int i,change;
int q=0,p=0;
for(i=0;i<n;i++){
if(min>*(arr+i)){
min=*(arr+i);
q=i;
}
if(max<*(arr+i)){
max=*(arr+i);
p=i;
}
}
change=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=change;
change=*(arr+n-1);*(arr+n-1)=*(arr+p);*(arr+p)=change;
}
void output(int *arr,int n){
int i;
for(i=0;i<n;i++){
printf("%3d",*(arr+i));
}
}
三.调试过程中碰到的问题和解决办法
错误信息1:编译错误
错误原因:*arr指针所指向地址中的数
改正方法:min>arr+i 改正 min>*(arr+i)
6-2 指针选择法排序
一.设计思路:
(1):描述算法:
1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.输入数组斌且赋值
4.利用选择排序法进行排序,输出结果
(2)流程图
二.实验代码:
void sort(int *x,int n){
int i,j,k,change;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(*(x+k)<*(x+j)){
k=j;
}
}
if(k!=i){
change=*(x+i);*(x+i)=*(x+k);*(x+k)=change;
}
}
}
三.调试过程中碰到的问题和解决办法
错误信息1:编译错误
错误原因:选择排序法循环里的for循环变量应该是j<n,i+1,外层循环确定第一个数依次比较
改正方法:for(j=i+1;j<n;j++)
6-1 判断回文字符串
一.设计思路:
(1):描述算法:
1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.根据回文的定义利用函数strlen求出字符串的长度
4.通过for循环比较字符串的第一个字符和最后的字符是否相同
(2) 流程图:
二.实验代码:
bool palindrome( char *s ){
int i,b;
b=strlen(s);//求出字符串的实际长度
for(i=0;i<b/2;i++){
if(*(s+i)!=*(s+b-i-1)){
return false;
}
}return true;
}
三.调试过程中碰到的问题和解决办法
错误信息1:编译错误
错误原因:s代表的是地址 *(s+i)=s[i]
改正方法:将s+i改成为*(s+i)
6-2 使用函数实现字符串部分复制
一.设计思路:
(1):描述算法:
1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.调用函数strmcpy
4.函数中定义i a 循环变量,先判断不等于‘\0’在执行循环
(2):流程图
二.实验代码:
void strmcpy( char *t, int m, char *s ){
int i,a;
for(i=m,a=0;*(t+i-1)!='\0';i++,a++){
*(s+a)=*(t+i-1);
}*(s+a) = '\0';
}
三.调试过程中碰到的问题和解决办法
错误信息1:部分正确
错误原因:在函数中循环结束没加*(s+a) = '\0'
改正方法:在for循环外加上*(s+a) = '\0'只有在程序执行时遇到‘\0’带表结束占据一个字节
学习总结和进度
1.知识点
1.学习指针 int *p 星号指针标识符 *p所指的是地址p中存的数据
2.强制转换 例如一个float型数x (int)x可以转换成整型
3.break 跳出循环
4.输出整数占m列的格式是%md 例如占3列就是%3d
5.选择排序法外层循环条件小于是数组元素个数-1,内层循环起始条件是外层循环变量的值+1,循环条件是小于数组元素的个数,找到最大值或最小值的下标与第一个元素交换
6.交换,先引用一个变量来进行交换
7.strlen(s) 求出字符串的实际长度
2.托管截图
3.表格
4.我点评的人
林昊 http://www.cnblogs.com/lh991014/p/8638313.html
陆文奇 http://www.cnblogs.com/748luwenqi/p/8645546.html
王文博 http://www.cnblogs.com/wwb986187/p/8635502.html