试题要求如图10.1所示。
部分源程序内容如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 1000
int xx[MAX], odd=0, even=0;
double aver=0.0, totfc=0.0;
void WriteDat(void);
int ReadDat(void)
FILE *fp;
int i;
if((fp=fopen("K:\\k06\\35010001\\IN.DAT", "r"))==NULL) return 1;
for(i=0; i<MAX; i++)
fscanf(fp, "%d, ", &xx[i]);
fclose(fp);
return 0;
void Compute(void)
void main()
int i;
for(i=0; i<MAX; i++)xx[i]=0;
if(ReadDat())
printf("数据文件 IN.DAT 不能打开!\007\n");
return;
Compute();
printf("ODD=%d\nEVEN=%d\nAVER=%lf\nTOTFC=%lf\n", odd, even, aver, totfc);
WriteDat();
void WriteDat(void)
FILE *fp;
int i;
fp=fopen("K:\\k06\\35010001\\OUT.DAT", "w");
fprintf(fp, "%d\n%d\n%lf\n%lf\n", odd, even, aver, totfc);
fclose(fp);
参考答案:
void Compute(void)
{
int 1;
for(i=0; i<MAX; i++){
if(xx[i]%2==0)even++;
else odd++;
aver=aver+xx[i];
aver=aver/MAX;
for(i=0; i<MAX; i++)
totfc=totfc+(xx[i]-aver) *(xx[i]-aver);
totfc=totfc/MAX;
}
解析:
此题要计算1000个数的奇数个数、偶数个数、平均数和方差的值,关键就是奇偶数的判定xx[i]%2==O和for循环的使用。因为totfc要用到aver的值,因此要先计算完aver才能计算totfc。