请补充程序,使得程序能实现以下功能:
从文件IN.dat中读取200个整数至数组number中,求出奇数的个数cnt1和偶数的个数cnt2以及数组number下标为偶数的元素值的算术平均值ave(保留2位小数)。把结果cnt1、cnt2、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 i;
int cnt1, cnt2, number[N];
long j = 0;
float ave;
FILE *fw;
fw = fopen("OUT.dat", "w");
read_dat(number);
/**************************************/
/**************************************/
printf("\n\ncnt1=%d,cnt2=%d,ave=%
fprintf(fw, "%d\n%d\n%
fclose(fw);
}
试题答案及详解
【审题分析】分析题目可知,本题程序要实现的功能是:从文件IN.dat中读取200个整数至数组number中,求出奇数的个数cnt1和偶数的个数cnt2以及数组number下标为偶数的元素值的算术平均值ave(保留2位小数),而读取数据的程序题中已经给出。因此只要编写求出数组中奇数的个数和偶数的个数,以及下标为偶数的所有元素的平均值即可。
【解题思路】在for循环语句中,对数组number中的每一个元素进行对2求余数,如果余数等于1,则数组元素number[i]是奇数,奇数的个数变量cnt1加1,否则偶数的个数变量cnt2加1。如果数组number下标变量i能被2整除,则把数组元数number[i]与变量j相加。退出循环后变量j的值除以(N/2)得到数组number下标为偶数的元素值的算术平均值,再转换成单精度实数赋给变量ave。
【参考答案】
for (i=0, j=0, cnt1=0, cnt2=0; i<N; i++)
{ if (number[i]%2)
cnt1++;
else
cnt2++;
if (i%2 == 0)
j += number[i];
}
ave = (float)j/(N/2);
【易错分析】在进行求算术平均值的时候,要把求的结果值转化成单精度型数据。
【考点链接】求余运算、数据类型的转换。
责任编辑:小草