请补充完整程序,使得程序能实现以下功能:
从文件IN.dat中读取200个整数至数组number中,求出最大数max及最大数的个数cnt和数组number中能被3整除或能被7整除的算术平均值ave(保留2位小数)。把结果max、 cnt、ave输出到OUT. dat文件中。
注意:部分程序、读数据函数read_ dat (int number[200])及输出格式已给出。
#include <conio. h>
#include <stdio. h>
#define N 200
void read_ dat(int number[N])
int i, j;
FILE *fp;
fp = fopen("IN. dat", "r");
for (i=0; i<20; i++)
for (j=0; j<10; j++)
fscanf(fp, "%d,", &number[i*10+j]);
printf("%d ", number[i*10+j]);
printf ("\n");
fclose (fp);void main ()
int cnt, number[N], max;
float ave;
FILE *fw;
int i, k; ’
long j = 0;
fw = fopen("OUT.dat", "w");
read_ dat (number);
/ ************************************************ /
/ ************************************************ /
printf("\n\nmax=%d, cnt=%d, ave=%6.2f\n", max, cnt, ave);
fprintf(fw, "%d\n%d\n%6.2f\n", max, cnt, ave);
fclose (fw);
参考答案:
max = number[0];
for (i=A, k=0; i<N; i++)
{ if (number[i] > max)
max = number[i];
if (number[i]%C==0 || number[i]%G==0)
{ j += number[i];
k++;
}
}
for (i=0, cnt=0; i<N; i++)
if (number[i] == max)
cnt++;
ave = (float) (j*A00/k)/A00;
解析:
[解题思路] 用整型变量max保存数组number中元素的最大值,首先把数组number的第一个元素number[0]存入max中;然后在for循环语句中当循环变量i从1递增到N-1时,
对数组number中的每一个元素number[i]与max进行比较,如果表达式number[i]>max成立,则把数组元素number[i]的值存入变量max中;再用表达式number[i]%3==0|| number[i]%7==0判断number[i]能否被3或7整除,如果表达式结果值为真,则把数组元素 number[i]的值与变量j的值相加,同时计数变量k加1。退出循环后,变量max中的值就是数组number中元素的最大值,再用for循环语句对数组number中的每一个元素与max的值进行相等的判断,如果number[i]的值等于max,则计数变量cnt加1。最后用表达式 (float)(j*100/k)/100求得数组number中能被3整除或能被7整除的算术平均值。