改错题 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)”。