改错题
1. 数列中,第一项为3,后一项都比前一项的值增加5。下列给定程序中,函数proc()的功能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累加值放入数组中,将符合此条件的累加值作为函数值返回主函数。
例如,当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。符合此条件的累加值应为42,126,366,570,1010。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#define M 20
int proc(int n,int *a)
//****found****
{
int i,j,k,sum;
sum=0;
for(k=3,i=0;i<n;i++,k+=5)
{
sum=sum+k;
//****found****
if(sum%4=2)
a[j++]=sum;
}
return j;
}
void main()
{
int arr[M],d,n,i;
printf("\nEnter n(4<=n<=50):");
scanf("%d",&n);
d=proc(n,arr);
printf("\n\nThe result:\n");
for(i=0;i<d;i++)
printf("%6d",arr[i]);
printf("\n\n");
}
【正确答案】(1)错误:int i,j,k,sum;
正确:int i,j=0,k,sum;
(2)错误:if(sum%4=2)
正确:if(sum%4==2)
【答案解析】 由函数proc()可知,变量j表示数组a的下标,其初始化值应该为0,因此,“int i,j,k,sum;”应改为“int i,j=0,k,sum;”。每求一次和,要判断其被4除后的余值是否为2,因此,“if(sum%4=2)”应改为“if(sum%4==2)”。