作者:城市学习网 来源:xue.net 更新日期:2007-12-17
阅读次数:
☆题目81 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsvalue(),其功能是:求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到out.dat文件。 例如:7153,7+1=5+3,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+1<>2+9,则该数不满足条件计算平均值pjz2。 部分源程序存在文件prog1.c中。 程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include int a[300],cnt=0; double pjz1=0.0,pjz2=0.0;
jsvalue() {int i,thou,hun,ten,data,n=0; for(i=0;i<300;i++) {thou=a/1000; hun=a00/100; ten=a0/10; data=a; if(thou+hun==ten+data) {cnt++;pjz1+=a;} else {n++;pjz2+=a;} } if(cnt==0) pjz1=0; else pjz1/=cnt; if(n==0) pjz2=0; else pjz2/=n; }
main() { int i;
readDat(); jsvalue(); writeDat(); printf("cnt=%d\n满足条件的平均值pzj1=%7.2f\n不满足条件的平均值pzj2=%7.2f\n",cnt,pjz1,pjz2); }
readDat() { FILE *fp; int i; fp=fopen("in.dat","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",&a); fclose(fp); }
writeDat() { FILE *fp; int i; fp=fopen("out.dat","w"); fprintf(fp,"%d\n%7.2f\n%7.2f\n",cnt,pjz1,pjz2); fclose(fp); }
************************************************************************ ★题目82 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsvalue(),其功能是:求出所有这些四位数是素数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果cnt,pjz1,pjz2输 出到out.dat文件。 例如:5591是素数,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。 9812是非素数,则该数不满足条件计算平均值pjz2。 部分源程序存在文件prog1.c中。 程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include int a[300],cnt=0; double pjz1=0.0,pjz2=0.0;
int isP(int m) {int i;
for(i=2;iif(m%i==0)return 0; return 1; }
jsvalue() {int i; for(i=0;i<300;i++) if(isP(a)) {pjz1+=a;cnt++;} else pjz2+=a; if(cnt==0) pjz1=0; else pjz1/=cnt; if(300-cnt==0) pjz2=0; else pjz2/=(300-cnt); }
main() { int i;
readDat(); jsvalue(); writeDat(); printf("cnt=%d\n满足条件的平均值pzj1=%7.2f\n不满足条件的平均值pzj2=%7.2f\n",cnt,pjz1,pjz2); }
readDat() { FILE *fp; int i; fp=fopen("in.dat","r"); for(i=0;i<300;i++)fscanf(fp,"%d",&a); fclose(fp); }
writeDat() { FILE *fp; int i; fp=fopen("out.dat","w"); fprintf(fp,"%d\n%7.2f\n%7.2f\n",cnt,pjz1,pjz2); fclose(fp); }
*********************************************************************** ☆题目83 请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N 2 totfc=1/N ∑ (xx-ave1) i=1 设N为奇数的个数,xx为奇数,ave1为奇数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include #include #include #define MAX 1000
int xx[MAX],odd=0,even=0; double ave1=0.0,ave2=0.0,totfc=0.0; void WriteDat(void);
int ReadDat(void) { int i; FILE *fp;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
/*********编制函数ReadDat()的部分************/ for(i=0;i{fscanf(fp,"%d,",&xx); if((i+1)==0) fscanf(fp,"\n"); } /*******************************************/
fclose(fp); return 0; }
void Compute(void) { int i,yy[MAX]; for(i=0;iyy=0; for(i=0;iif(xx%2) { yy[odd++]=xx; ave1+=xx;} else { even++; ave2+=xx;} if(odd==0) ave1=0; else ave1/=odd; if(even==0) ave2=0; else ave2/=even; for(i=0;itotfc+=(yy-ave1)*(yy-ave1)/odd; }
void main() { int i;
for(i=0;iif(ReadDat()){ printf("数据文件IN.DAT不能打开!\007\n"); return; } Compute(); printf("ODD=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,ave1,ave2,totfc); WriteDat(); }
void WriteDat(void) { FILE *fp; int i;
fp=fopen("OUT.DAT","w"); fprintf(fp,"%d\n%f\n%f\n%f\n",odd,ave1,ave2,totfc); fclose(fp); }
|