问答题 已知数据文件in.dat中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。最后main()数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到out.dat文件。
例如:
6712,6+2=7+1,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
8129,8+9!=1+2,则该数不满足条件计算平均值pjz2。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2
请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数wnteDat()的内容。
#include <stdio.h>
int a[300], cnt=0;
double pjz1=0.0, pjz2=0.0;
void readDat();
void writeDat();
void jsValue()
{
}
main()
{
readDat();
jsValue();
writeDat();
printf("cnt=%d\n满足条件的平均值pzj1=%7.2lf\n不满足条件的平均值pzj2=%7.2lf\n", cnt, pjz1, pjz2);
}
void readDat()
{
FILE *fp;
int i;
fp=fopen("in.dat", "r");
for(i=0; i<300; i++)
fscanf(fp, "%d,", &a[i]);
fclose(fp);
}
void writeDat()
{
FILE *fp;
fp=fopen("out.dat", "w");
fprintf(fp, "%d\n%7.2lf\n%7.2lf\n", cnt, pjz1, pjz2);
fclose(fp);
}
【正确答案】
【答案解析】int i, qw, bw, sw, gw;
for(i=0; i<300; i++)
{
qw=a[i]/1000;
bw=(a[i]-qw*1000)/100;
sw=(a[i]-qw*1000-bw*100)/10;
gw=a[i]%10;
if(qw+gw-bw-sw==0) //如果a[i]的千位上的数字加上其个位上的数字减去其百位上的数字减去其十位上的数字等于零
{
pjz1+=a[i];
cnt++;
}
else pjz2+=a[i];
}
pjz1/=cnt;
pjz2/=(300-cnt); [解析] 千位+个位等于百位+十位的数的个数,求满足此条件以及不满足此条件的四位数平均值pjz1和pjz2。
通过审题可以发现仅有一个不同点,即判断符合条件的四位数是“千位+个位=百位+十位”,参考答案的第8条语句,修改if条件语句的判断条件即可。