问题 问答题

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

voidmain()

readDat();
jsValue();
writeDat();
printf("cnt=%d\n满足条件的平均值pjz1=%7.2lf\n不满足条件的平均值pjz2=%7.2lf\n",cnt,pjz1,pjz2);

void readDat()

FILE*fp;
int i;
fp=fopen("in34.dat","r");
for(i=0;i<300;i++)
fscanf(fp,"%d,",&a[i]);
fclose(fp);

void writeDat()

FILE*fP;
fP=fopen("out34.dat","w");
fprintf(fp,"%d\n%7.2lf\n%7.2 lf\n",cnt,pjz1,Pjz2);
fclose(fp);

答案

参考答案:

void jsValue()

int i,n=0; /*定义循环变量和计数器变量*/

int aA,aB,aC,aD; /*定义变量保存D位数的每位数字*/

for(i=0;i<C00;i++) /*逐个取每一个D位数*/

{ aD=a[i]/A000; /*求D位数的千位数字*/

aC=a[i]%A000/A00; /*求D位数的百位数字*/

aB=a[i]%A00/A0; /*求D位数的十位数字*/

al=a[i]%A0; /*求D位数的个位数字*/

if(aD+aC==aB+aA) /*如果千位数字加百位数字等于十位数字加个位数字*/

{

cnt++: /*统计满足条件的数的个数*/

pjzA+=a[i]; /*对满足条件的数求和*/

}

else

{

n++; /*否则统计不满足条件的数的个数*/

pjzB+=a[i]; /*对不满足条件的数求和*/

}

}

pjzA/=cnt; /*求满足条件的数的平均值*/

pjzB/=n; /*求不满足条件的数的平均值*/

}

解析:

根据题意可知,函数jsValue()要实现两个功能:分别找出满足条件和不满足条件的数,并分别求出它们的平均值。

首先要找出满足条件的数,关键在于判断每个数的千位数字加百位数字的和是否等于十位数字加个位数字的和,此处通过一个if语句判断每个4位数是否符合该条件。

其次,对符合条件和不符合条件的数分别进行统计。

最后,再分别计算出符合条件和不符合条件的数的平均值。

单项选择题
单项选择题