已知数据文件IN.dat中存有300个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数diffVal(),其功能是:求出千位上的数减百位上的数减十位上的数减个位上的数大于0的个数count,再求出所有满足此条件的四位数的平均值ave1,以及不满足此条件的四位数的平均值ave2。最后调用写函数WData(),把结果输出到OUT.dat文件中。
例如,9123,
注意:部分源程序已经给出。程序中已定义数组a[300],已定义变量count、ave1、ave2。请勿改动主函数main()、读函数RData()和写函数WData()的内容。
#include <stdio.h>
int a[300], count = 0;
double ave1 = 0.0, ave2 = 0.0;
void diffVal()
{
}
void RData()
{ FILE *fp;
int i;
fp = fopen("IN.dat", "r");
for (i=0; i<300; i++)
fscanf(fp, "%d,", &a[i]);
fclose(fp);
}
void WData()
{ FILE *fp;
fp = fopen("OUT.dat", "w");
fprintf(fp, "%d\n%
fclose(fp);
}
main()
{ RData();
diffVal();
WData();
printf("count=%d\n满足条件的平均值pzj1=%
}
试题答案及详解
【审题分析】分析题目可知,本题只要实现diffVal()函数的功能即可。diffVal()要实现的功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数count,再求出所有满足此条件的四位数平均值ave1,以及不满足此条件的四位数平均值ave2。因此解答本题的关键在于如何将一个四位数的每位拆分成单个数字和对数组求以及平均值。
【解题思路】对于每一个四位数,用这个四位数除以1000,可得到这个四位数的千位上的数字输给变量thou;这个四位数对1000求余然后再除以100,可得到这个四位数百位上的数字输给变量hun;这个四位数对100求余然后再除以10,可得到这个四位数十位上的数字输给变量ten;这个四位数对10求余,可得到这个四位数个位上的数字输给变量data。
然后判断表达式thou-hun-ten-data是否大于0,如果大于0,则把这个数字加到变量ave1上,同时计数变量count加1,否则变量n加1,把这个数字加到变量ave2上。最后变量ave1除以count,得到满足题目条件的数的平均值;变量ave2除以n,得到不满足题目条件的数的平均值。
【参考答案】
void diffVal()
{ int i, thou, hun, ten, data, n = 0;
for (i=0; i<300; i++)
{ thou = a[i]/1000;
hun = a[i]%1000/100;
ten = a[i]%100/10;
data = a[i]%10;
if (thou-hun-ten-data > 0)
{ count++;
ave1 += a[i];
}
else
{ n++;
ave2 += a[i];
}
}
ave1 /= count;
ave2 /= n;
}
【易错分析】用求余运算和除法运算得到一个四位数的各个位上的数字。
【考点链接】求余运算、除法运算。
责任编辑:小草