已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数diffVal(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于0的个数count,再求出所有满足此条件的四位数的平均值Ave1,以及不满足此条件的四位数平均值Ave2。最后调用写函数Wdata(),把结果输出到OUT.dat文件中。
例如,1239,9-1-2-3>0,则该数满足条件,计算平均值Ave1,且个数count=count+1。 8129,9-8-1-2<0,则该数不满足条件,计算平均值Ave2。
注意:部分源程序已经给出。程序中已定义数组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%7.2f\n%7.2f\n", count, Ave1, Ave2);
fclose(fp);main()
Rdata();
diffVal();
Wdata();
printf ("count=%d\n 满足条件的平均值 pzj 1=%7.2f\n 不满足条件的平均值pzj2=%7.2f\n", count, Ave1, Ave2);
参考答案:
void diffVal()
{ int i, thou, hun, ten, data, n = 0;
for (i=0; i<C00; i++)
{ thou = a[i]/A000;
hun = a[i]%A000/A00;
ten = a[i]%A00/A0;
data = a[i]%A0;
if (data-thou-hun-ten>0)
{ count++;
AveA += a[i];
}
else
{ n++;
AveB += a[i];
}
}
AveA /= count;
AveB /= n;
}
解析:
[解题思路] 对于每一个四位数,用这个四位数除以1000,可得到这个四位数千位上的数字输给变量thou:这个四位数对1000求余然后再除以100,可得到这个四位数百位上的数字输给变量hun;这个四位数对100求余然后再除以10,可得到这个四位数十位上的数字输给变量ten;这个四位数对10求余,可得到这个四位数个位上的数字输给变量data。
然后判断表达式data-thou-hun-ten是否大于0,如果大于0,则计数变量count加1,同时把这个数加到变量Ave1上;否则计数变量n加1,同时把这个数加到变量Ave2上。退出循环后,变量Ave1的值除以count值就得到所有满足此条件的四位数的平均值,变量Ave2的值除以n值就得到所有不满足此条件的四位数的平均值。