薄观约取 厚积薄发 断点-影子
for(i=1;i if(i!==0) s+=i; return sqrt(s); } main() { clrscr(); printf(\自然数之和的平方根=%f\\n\progReadWrite(); } progReadWrite() { FILE *fp,*wf; int i,n; float s; fp=fopen(\if(fp==NULL){ printf(\数据文件in.dat不存在!\ return; } wf=fopen(\for(i=0;i<10;i++){ fscanf(fp,\ s=countValue(n); fprintf(wf,\} fclose(fp); fclose(wf); } ********************************************************************* 题目23 (实数运算题) 已知在文件in.dat中存有N个(个数<200)实数,函数readdat()读取这N个实数并存入数组xx中。请编制函数calvalue(),其功能要求: 1、求出这N个实数的平均值aver; 2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。 注意:部分源程序已给出。 请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。 #include int N= 0 ; /* 文件IN.DAT中共有多少个实数 */ 断点亡魂 薄观约取 厚积薄发 断点-影子 double aver=0.0;/*平均值*/ double sumint=0.0;/*整数部分之和*/ double sumdec=0.0;/*小数部分之和*/ int ReadDat(void) ; void WriteDat(void) ; void CalValue(void) { int i; double x, sum = 0; for (i=0; i sumint = sumint+(int)xx[i]; x = xx[i]-(int)xx[i]; sumdec = sumdec+x; sum = sum+xx[i]; } aver = sum/MAXNUM; } void main() { int i ; clrscr() ; for(i = 0 ; i < MAXNUM ; i++) xx[i] = 0 ; if(ReadDat()) { printf(\数据文件IN.DAT不能打开!\\007\\n\ return ; } Calvalue() ; printf(\文件IN.DAT中共有实数=%d个\\n\printf(\平均值=%.2lf\\n\ printf(\整数部分之和=%.2lf\\n\printf(\小数部分之和=%.2lf\\n\WriteDat() ; system(\} int ReadDat(void) { FILE *fp ; int i = 0 ; if((fp = fopen(\while(!feof(fp)) { fscanf(fp, \} fclose(fp) ; return 0 ; } 断点亡魂 薄观约取 厚积薄发 断点-影子 void WriteDat(void) { FILE *fp ; fp = fopen(\ fprintf(fp, \fclose(fp) ; } **************************************************************************** 题目24(完全平方数问题) 下列程序prog1.c的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。 请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。 最后调用函数writeDat()把结果输出到文件out.dat中。 请勿改动主函数main()和写函数writeDat()的内容。 #include int i, a, b, c, cnt = 0; for (i=10; i*i<1000; i++) { a = i*i/100; b = i*i/10; c = i*i; if (a==b || b==c || c==a) bb[cnt++] = i*i; } return cnt; } void writeDat(int num, int b[]) { FILE *out; int i; out = fopen(\ printf(\ fprintf(out, \ for (i=0; i printf(\ fprintf(out, \ } fclose(out); } 断点亡魂 薄观约取 厚积薄发 断点-影子 main() { int b[20], num; num = jsValue(b); writeDat(num, b); } ***************************************************************** ★题目25 (回文数问题) 下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编制函数int svalue(long m)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out.dat中。 注意:部分源程序已给出。 请勿改动主函数main()的内容。 #include ltoa(n,xy,10); /*注意这里不能使用itoa()函数,因为n是long 型的*/ strl=strlen(xy); half=strl/2; for(i=0;i if(xy[i]!=xy[--strl]) break; if(i>=half) return 1; else return 0; } main() {long m; FILE *out; out=fopen(\for(m=11;m<1000;m++) { if(jsValue(m)&&jsValue(m*m)&&jsValue(m*m*m)) { printf(\ fprintf(out,\ } } fclose(out); system(\} 或者下面的解法: int jsValue(long n) {long int s=0,k; k=n; 断点亡魂 薄观约取 厚积薄发 断点-影子 while(k) { s=s*10+k; k/=10; } if(s==n) return 1; if(s!=n) return 0; } 输出结果为: m= 11,m*m= 121,m*m*m= 1331 m= 101,m*m= 10201,m*m*m= 1030301 m= 111,m*m= 12321,m*m*m= 1367631 ★☆题目26(整数统计运算题) 已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:1、求出这文件中共有多少个正整数totNum;2、求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到文件OUT.DAT中。 部分源程序存在文件prog1.c中。 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include int totNum=0; /*文件IN.DAT中共有多少个正整数*/ int totCnt=0; /*符合条件的正整数的个数*/ double totPjz=0.0; /*平均值*/ int ReadDat(void); void writeDat(void); void CalValue(void) {int i,data; for(i=0;i { totNum++; data=xx[i]>>1; if(data%2==0){totCnt++;totPjz+=xx[i];} } if(totCnt==0) totPjz=0; else totPjz/=totCnt; } void main() { int i; clrscr(); 断点亡魂