问题 问答题

已知数据文件in33.dat中存有300个4位数,并已调用函数readDat()把这些数存人数组a中,请编制一函数jsValue(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于0的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt、pjz1、pjz2输出到out33.dat文件中。
例如:1239,9-1-2-3>0,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1;8129,9-8-1-2<0,则该数不满足条件,计算平均值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()

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

void writeDat()

FILE%fp;
fp=fopen("out33.dat","w");
fprintf(fp,"%d kn%7.21f kn%7.21f\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位数的十位数字*/

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

if(aA-aD-aC-aB>0) /*如果个位数字减千位数字减百位数字减十位数字大于零*/

{

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

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

}

else

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

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

}

}

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

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

}

解析:

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

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

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

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

单项选择题
问答题