问答题
已知数据文件in.dat中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。最后main()函数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到out.dat文件。
例如:
9123,9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
9812,9-8-1-2<0,则该数不满足条件计算平均值pjz2。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
#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.21f\n不满足条件的平均值pzj2=%7.21f\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.21f\n%7.21f\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-bw-sw-gw>0) //如果a[i]千位上的数减去百位上数减去十位上的数减去个位上的数大于零
{
pjz1+=a[i];
cnt++;
}
else pjz2+=a[i];
}
pjz1/=cnt;
pjz2/=(300-cnt);
[解析] 千位-百位-十位-个位数大于零的个数,求满足此条件以及不满足此条件的四位数平均值ave1和ave2。
通过审题可以发现仅有一个不同点,即判断符合条件的四位数是“千位-百位-十位-个位>0”,参考答案的第8条语句,修改if条件语句的判断条件即可。