问答题
给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h>
#define SIZE 20
fun(double *s,double *w)
{ int k,i;double sum;
for(k=2,i=0;i<SIZE;i++)
{ s[i]=k;k+=2;}
/**********found**********/
sun=0.0;
for(k=0,i=0;i<SIZE;i++)
{ sum+=s[i];
/**********found**********/
if(i+1%5==0)
{ w[k]=sum/5;sum=0;k++;}
}
return k;
}
main()
{ double a[SIZE],b[SIZE/5];
int i,k;
k=fun(a,b);
printf("The original data:/n");
for(i=0;i<SIZE;i++)
{ if(i%5==0) printf("/n");
printf("%4.0f",a[i]);
}
printf("/n/nThe result:/n");
for(i=0;i<k;i++) printf("%6.2f",b[i]);
printf("/n/n");
}
【正确答案】
【答案解析】(1)sum=0.0; (2)if((i+1)%5==0)
答案考生文件夹 [解析] 本题函数的功能是对每5个元素求一个平均值。首先要依顺序读取每5个元素,并对这5个元素取平均值。
(1)在第一标识下“sun=0.0;”,根据题意,这是给sum赋值,而sun没有定义编译时会提示错误,应改为“sum=0.0;”。
(2)错误标识下的if判断语句是依顺序取5个字符,if中的逻辑表达式语法有误,由于1%5恒等于1,所以i+1%5也就等价于i+1了,所以将“if(i+1%5==0)”改为“if(i+1)%5==0)”,此处主要注意的是运算符的优先级。
[考点] 一维数组、for循环结构。