三、正整数排序求平均值(包括将数拆散、求最大最小值)
已知数据文件IN.DAT中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数等于百位数上的数加十位数上的数的个数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
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include int a[300],cnt=0; double pjz1=0.0,pjz2=0.0; jsValue() { } main() { int i; readDat(); jsValue(); writeDat(); printf("cnt=%d\n满足条件的平均值pzj1=%7.21f\n不满足条件的平均值pjz2=%7.21f\n" ,cnt,pjz1,pjz2); }
readDat() { FILE *fp; int i; fp=fopen(" in.dat" ," r" ); for(i=0,i<300;i++)fscanf(fp,"%d" ,&a[i]); fclose(fp); } writeDat() { FILE *fp; int i; fp=fopen(" out.dat" ," w" ); fprintf(fp," %d\n%7.21f\n%7.21f\n" ,cnt,pjz1,pjz2); fclose(fp); }
注:该题的关键在于会不会取出一个数的个、十、百、千位上的数。a[i]%10对10求余结果为个位数,a[i]%100/10先对100求余得出后两位数然后再除10,由于为整数因此得出上一个后两位数的第一位。依此类推。*/
jsvalue() { int i,g,s,b,q,k=0; for(i=0;i<300;i++) {g=a[i]%10; s=a[i]%100/10; b=a[i]/100%10; q=a[i]/1000; if((q+g)==(s+b)) {cnt++;pjz1+=a[i];} else {k++;pjz2+=a[i];} } pjz1/=cnt; pjz2/=k; }
|