问题 问答题

已知数据文件IN.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。最后main()函数调用写函数writeDat()把结果cnt、pjz1、pjz2输出到OUT.DAT文件。
例如,7153,7+1=5+3,则该数满足条件,参加计算平均值pjz1,且个数cnt=cnt+1。
8129,8+1!=2+9,则该数不满足条件,参加计算平均值pjz2。
注意:部分源程序存在文件PROG1.C文件中。程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
[试题程序]
#include
int a[300],cnt=0;
double pjz1=0.0,pjz2=0.0;
void readDat();
void writeDat();
void jsValue()


void 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(“outldat”,“w”);
fprintf(fP,“%d\n%7.2lf\n%7.2lf\n",cnt,pjz1,pjz2);
fclose(fp);

答案

参考答案:void jsValue()
{inf i; /*定义变量*/
int a1,a2,a3,a4;
for(i=0;i<300;i++)
{a1=a[i]%10; /*数位分解*/
a2=a[i]%100/10;
a3=a[i]%1000/100;
a4=a[i]/1000;
if(a4+a3=a2+a1) /*判断条件*/
{pjz1+=a[i];
cnt++;
}
else pjz2+=a[i];
}
pjz1/=cnt; /*求平均值*/
pjz2/=(300-cnt);
}

解析: 本题要求先将已知数按十进制位拆分,先按照一定的判断条件筛选统计后,将符合条件的数和不符合条件的数分别计算各自的平均值。依据题意,应依次从数组a中取出每一个四位数,按十进制位拆分后,根据题目中给出的判断条件(四位数的千位数上的数+百位数上的数=十位数上的数+个位数上的数,即a4+a3=a2+a1)筛选后,符合条件的数参与计算平均值pjz1,同时计数器变量cnt加1;不符合条件的数参与计算平均值pjz2。

选择题
解答题