改错题
数列中,第一项的值为3,后一项都比前一项的值增5;给定程序MODI1.c中函数fun的功能:计算前n(4<n<50)项的累加和;每累加一次把被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数。
例如,当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。符合此条件的累加值应为42,126,
366,570,1010。
请改正函数fun中指定位置的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序如下:
#include <stdio.h>
#define N 20
int fun(int n,int *a)
{ int i,j,k,sum;
/**************found**************/
sum=j==0;
for(k=3,i=0;i<n;i++,k+=5)
{ sum=sum+k;
/**************found**************/
if(sum%4=2)
a[j++]=sum;
}
return j;
}
main()
{ int a[N],d,n,i;
printf('\nEnter n (4<n<=50): ');scanf('%d',&n);
d=fun(n,a);
printf('\n\nThe result :\n');
for(i=0; i<d; i++)printf('%6d',a[i]);printf('\n\n');
}
【正确答案】(1)sum=j=0; (2)if(sum%4==2) 答案考生文件夹
【答案解析】(1)将变量sum和j同时赋值为0。 (2)这里混淆了“==”与“=”的作用,“==”是比较运算符,“=”是赋值运算符。