第一次作业
第一次作业(一)
题目6-1 计算两数的和与差
设计思路
1、算法
第一步:阅读题目,明确题目要求。
第二步:找出函数中的实参和形参,写出函数接口。
第三步:计算op1+op2
的值,赋值给*psum
所指向的变量;计算出op1-op2
的值,赋值给*pdiff
所指向的变量。
2、流程图
无
代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
错误
编译错误:将接口函数复制过来忘记删除分号。
改正:删去分号。
题目6-2 拆分实数的整数与小数部分
设计思路
1、算法
第一步:阅读题目,明确题目要求。
第二步:找出函数中的实参和形参,写出函数接口。
第三步:将数乘一或除一得到整数部分;用数减去整数部分得到小数部分。
2、流程图
无
代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=1*x;
*fracpart=x-*intpart;
}
错误
无
第一次作业(二)
题目6-1 在数组中查找指定元素
设计思路
1、算法
第一步:写出接口函数。
第二步:用for循环在数组中逐个查找指定函数。
第三步:输出找到的指定函数的下标;若无则输出-1。
2、流程图
代码
int search(int list[], int n, int x)
{
int i;
for (i = 0; i < n; i++)
{
if (list[i] == x)
{
return i ;
break;
}
}
return -1;
}
错误
部分错误:没有写break。
改正:经过多次观察找到错误,加上break。
题目6-2 找最大值及其下标
设计思路
1、算法
第一步:写出接口函数。
第二步:定义一个最大值。
第三步:使用for循环,查找比max大的数并赋值给max,并记录下标。
2、流程图
代码
int fun(int *a,int *b,int n)
{
int i;
int max=0;
for(i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
*b=i;
}
}
return max;
}
错误
编译错误:指针使用错误,没写,将数值赋值给了地址;
改正:补上了。
第一次作业(三)
题目6-1 最小数放前最大数放后
设计思路
1、算法
第一步:分开写三个接口函数。
第二步:用for循环输入与输出。我写的输出的语句较复杂了,估计用%4d也可以。
第三步:用for循环找出最大与最小值,并使其与arr、(arr+n-1)交换。
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 i,max,min,b,c,swap1,swap2;
max=*(arr+n-1);
min=*arr;
for(i=0;i<n;i++){if(max<*(arr+i)){max=*(arr+i);b=i;}}
swap1=*(arr+b);*(arr+b) =*(arr+n-1);*(arr+n-1)=swap1;
for(i=0;i<n;i++){if(min>*(arr+i)){min=*(arr+i);c=i;}}
swap2=*(arr+c);*(arr+c)=*arr;*arr=swap2;
}
void output(int *arr,int n)
{
int i;
printf(" %d ",*arr);
for(i=1;i<n-1;i++)
{
printf(" %d ",*(arr+i));
}
printf("%d",*(arr+n-1));
}
错误
输出错误与答案错误:if后面没加括号,造成if没法控制后面的两句;输出的格式错误。
改正:加上括号并重写输出。
题目6-2 指针选择法排序
设计思路
1、算法
第一步:写出接口函数。
第二步:使用双重for循环,冒泡排序法进行排序。
2、流程图
代码
void sort(int *x,int n)
{
int i,j,swap;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(*(x+j)<*(x+j+1))
{
swap=*(x+j);*(x+j)=*(x+j+1);*(x+j+1)=swap;
}
}
}
错误
编译错误:冒泡排序法使用不熟练,for循环里的j与i写迷了。
改正:复习课本上的冒泡排序法查错并改正。
第一次作业(四)
题目6-1 判断回文字符串
设计思路
1、算法
第一步:写出接口函数。
第二步:定义一个count,使用for循环 ,用i,j来实现字符串的首尾。
第三步:若*(s + i) 与 *(s + j)相等,count加一。
第四步:比较count与n,若不相等,则其中有不是相同的字符,即不是回文,反之则是。
2、流程图
代码
bool palindrome(char *s)
{
int n=strlen(s);
int i, j,count=0;
for (i = 0, j = n - 1; i < n, j >= 0; i++, j--)
{
if (*(s + i) == *(s + j))
{
count++;
}
}
if (count == n)
return true;
else
return false;
}
错误
本来用的是两个for循环,但编译不过,就上网查到了这个方法,但strlen函数具体使用的方法不知。
题目6-2 使用函数实现字符串部分复制
上学期的字符串部分是我的弱项,这道题不会做。老师讲过再重新编辑。
额外附加题
总结
我复习了冒泡排序法,字符的用法和字符串的用法。学会了指针与数组的用法。但指针与字符串的用法不是很熟练。
点评:
宋晨继
王文博
王帅
申怡苗
邱冠华
表格
希望大家多多点评,互帮互助。