改错题 1.  下列给定程序中,函数proc()的功能是:按顺序给str所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若str所指数组中元素的个数不是5的倍数,多余部分忽略不计。
    例如,str所指数组有17个元素,则只对前15个元素进行处理,不对最后的2个元素求平均值。
    程序执行结果为:
    The original data:
    2 4 6 8 10
    12 14 16 18 20
    22 24 26 28 30
    32 24
    The result:
    6.00 16.00 26.00
    请修改函数proc()中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<stdio.h>
    #define SIZE 20
    proc(double*str,double*w)
    {
    int k,i;double sum;
    for(k=2,i=0;i<SIZE;i++)
    {str[i]=k;k+=2;}
    sum=0.0;
    for(k=0,i=0;i<SIZE;i++)
    {
    sum+=str[i];
    //****found****
    if(i+1%5==0)
    {w[k]=sum/5;sum=0;k++;}
    }
    return k;
    }
    void main()
    {
    double a[SIZE],b[SIZE/5];
    int i,k;
    k=proc(a,b);
    printf("The original data:\n");
    for(i=0;i<SIZE;i++)
    {
    if(j%5==0) printf("\n");
    printf("%4.Of",a[i]);
    }
    printf("\n\nThe result:\n");
    for(i=0;i<k;i++) printf("%6.2f",b[i]);
    printf("\n\n");
    }
【正确答案】错误:if(i+1%5==0)
   正确:if((i+1)%5==0)
【答案解析】 按题目的要求,对每5个元素求平均值。每取到5个元素的标志为(i+1)对5取余为0,而表达式“i+1%5”表示的含义为变量i加上1对5取余,因此,应改为“if((i+1)%5==0)”。