改错题
1. 下列给定程序中,fun()函数的功能是:从整数1~50中,选出能被3整除且有一位上的数是5的数,并把这些数放在b所指的数组中,将这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。
请修改函数中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不能增行或减行,也不能更改程序的结构。
试题程序:
#include<stdio.h>
//****found****
int fun(int *b);
{
int j,a1,a2,i=0;
//****found****
for(j=10;j<=50;j++)
{
a2=j/10;
a1=j-a2*10;
if((j%3==0&&a2==5)||(j%3==0&&a1==5))
{
b[i]=j;
i++;
}
}
//****found****
return j;
}
void main()
{
int a[50],i,n;
n=fun(a);
printf("the result is:\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
}
【正确答案】(1)错误:int fun(int *b);
正确:int fun(int *b)
(2)错误:for(j=10;j<=50;j++)
正确:for(j=1;j<=50;j++)
(3)错误:return j;
正确:return i;
【答案解析】 (1)根据题目的要求,第一个标识下fun()函数的定义为“int fun(int *b);”。C语言中规定,函数的定义格式,不应以分号结束,所以应把末尾的分号去掉。
(2)题干要求在1~50之间选出符合条件的整数,循环条件表达式的起始应当是j=1,而不是j=10,所以第二个标识下应改为“for(j=1;j<=50;j++)”。
(3)变量i是标识数组b的下标,也就是数组的个数。题目“return j”返回的是循环条件表达式中的变量,所以这里应改为“return i”。