☆题目21下列程序prog1.c的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。 Xn+1=cos(Xn) 迭代步骤如下: (1)取X1初值为0.0; (2)X0=X1,把X1的值赋给X0; (3)X1=cos(X0),求出一个新的X1; (4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); (5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。 请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果输出到文件OUT17.DAT中。 部分源程序已给出。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include #include #include float countValue() { float x0,x1; x1=0.0; do{ x0=x1; x1=cos(x0); }while(fabs(x0-x1)>=0.000001); return x1; } main() { clrscr(); printf("实根=%f\n",countValue()); printf("%f\n",cos(countValue())-countValue()); writeDat(); } writeDat() { FILE *wf; wf=fopen("OUT17.DAT","w"); fprintf(wf,"%f\n",countValue()); fclose(wf); } **************************************************************************** ★题目22 请编写函数countValue(),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。 例如若n为1000时,函数值应为:s=153.909064。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输入输出数据函数progReadWrite()的内容。 #include #include #include double countValue(int n) { int i; double s=0.0; for(i=1;i if(i%21==0) s+=i; return sqrt(s); } main() { clrscr(); printf("自然数之和的平方根=%f\n",countValue(1000)); progReadWrite(); } progReadWrite() { FILE *fp,*wf; int i,n; float s; fp=fopen("in.dat","r"); if(fp==NULL){ printf("数据文件in.dat不存在!"); return; } wf=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(fp,"%d\n",&n); s=countValue(n); fprintf(wf,"%f\n",s); } 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 #include #define MAXNUM 200 float xx[MAXNUM] ; 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; for (i=0;i {sumint+=(long)xx[i]; sumdec+=xx[i]-(long)xx[i]; aver+=xx[i]; } aver/=N; } 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", N) ; printf("平均值=%.2lf\n", aver) ; printf("整数部分之和=%.2lf\n", sumint) ; printf("小数部分之和=%.2lf\n", sumdec) ; WriteDat() ; system("pause"); } int ReadDat(void) { FILE *fp ; int i = 0 ; if((fp = fopen("in.dat", "r")) == NULL) return 1 ; while(!feof(fp)) { fscanf(fp, "%d,", &xx[i++]) ; } fclose(fp) ; return 0 ; } void WriteDat(void) { FILE *fp ; fp = fopen("OUT.DAT", "w") ; fprintf(fp, "%.2lf\n%.2lf\n%.2lf\n", aver,sumint,sumdec) ; fclose(fp) ; } **************************************************************************** 题目24 下列程序prog1.c的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。 请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。 最后调用函数writeDat()把结果输出到文件out.dat中。 请勿改动主函数main()和写函数writeDat()的内容。 #include int jsValue(int bb[]) {int i,j,k=0; int hun,ten,data; for(i=10;i<32;i++) {j=I*I; hum=j/100; ten=j%100/10; data=j%10; if(hum==ten||hum==data||ten==data) bb[k++]=j;} return k; } main() { int b[20],num; num=jsValue(b); writeDat(num,b); } writeDat(int num,int b[]) { FILE *out; int i; out=fopen("out.dat","w"); printf("%d\n",num); fprintf(out,"%d\n",num); for(i=0;i fclose(out); } ***************************************************************** ★题目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 int jsValue(long n) {int i,strl,half; char xy[20]; ltoa(n,xy,10); 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("out.dat","w"); for(m=11;m<1000;m++) { if(jsValue(m)&&jsValue(m*m)&&jsValue(m*m*m)) { printf("m=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m); fprintf(out,"m=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m); } } fclose(out); system("pause"); } ************************************************************************* ★☆题目26 已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:1、求出这文件中共有多少个正整数totNum;2、求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到文件OUT.DAT中。 部分源程序存在文件prog1.c中。 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include #include #define MAXNUM 200 int xx[MAXNUM]; 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 if(xx[i]>0) { 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(); for(i=0;i if(ReadDat()){ printf("数据文件IN.DAT不能打开!\007\n"); return; } CalValue(); printf("文件IN.DAT中共有正整数=%d个\n",totNum); printf("符合条件的正整数的个数=%d个\n",totCnt); printf("平均值=%.2f\n",totPjz); writeDat(); } int ReadDat(void) { FILE *fp; int i=0; if((fp=fopen("IN.DAT","r"))==NULL) return 1; while(!feof(fp)){ fscanf(fp,"%d,",&xx[i++]); } fclose(fp); return 0; } void writeDat(void) { FILE *fp; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d\n%d\n%6.2f\n",totNum,totCnt,totPjz); fclose(fp); } ******************************************************************** 题目27 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到out.dat文件。 例如:9123,9-1-2-3>0,则该数满足条件存入数组b中,且个数cnt=cnt+1。 9812,9-8-1-2>0,则该数不满足条件忽略。 部分源程序存在文件prog1.c中。 程序中已定义数组:a[300],b[300],已定义变量:cnt 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include int a[300],b[300],cnt=0; jsValue() { int i,j,qw,bw,sw,gw; for(i=0;i<300;i++) { qw=a[i]/1000; bw=a[i]/100%10; sw=a[i]%100/10; gw=a[i]%10; if(qw-bw-sw-gw>0) b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if( b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw;} } main() { int i; readDat(); jsValue(); writeDat(); printf("cnt=%d\n",cnt); for(i=0;i} 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",cnt); for(i=0;i fclose(fp); } ************************************************************************ ★☆题目28 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意:部分源程序存在文件prog1.c中。 程序中已定义数组:a[200],b[200],已定义变量:cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include #define MAX 200 int a[MAX], b[MAX], cnt = 0 ; void jsVal() {int i,j,thou,hun,ten,data,ab,cd; for(i=0;i<200;i++) {thou=a[i]/1000; hun=a[i]%1000/100; ten=a[i]%100/10; data=a[i]%10; ab=10*thou+ten; cd=10*data+hun; if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab>=10&&cd>=10) b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]} void readDat() { int i ; FILE *fp ; fp = fopen("in.dat", "r") ; for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ; fclose(fp) ; } void main() { int i ; readDat() ; jsVal() ; printf("满足条件的数=%d\n", cnt) ; for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ; printf("\n") ; writeDat() ; } writeDat() { FILE *fp ; int i ; fp = fopen("out.dat", "w") ; fprintf(fp, "%d\n", cnt) ; for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ; fclose(fp) ; } ************************************************************************* ☆题目29 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。 最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意:部分源程序存在文件prog1.c中。 程序中已定义数组:a[200],b[200],已定义变量:cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include #define MAX 200 int a[MAX], b[MAX], cnt = 0 ; void jsVal() { int i,j,qw,bw,sw,gw,ab,cd; for(i=0;i { qw=a[i]/1000; bw=a[i]/100%10; sw=a[i]%100/10; gw=a[i]%10; ab=qw*10+sw; cd=gw*10+bw; if(ab-cd>=10&&ab-cd<=20&&ab%2==0&&cd%2==0&&qw!=0&&gw!=0) b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]} void readDat() { int i ; FILE *fp ; fp = fopen("in.dat", "r") ; for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ; fclose(fp) ; } void main() { int i ; readDat() ; jsVal() ; printf("满足条件的数=%d\n", cnt) ; for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ; printf("\n") ; writeDat() ; } writeDat() { FILE *fp ; int i ; fp = fopen("out.dat", "w") ; fprintf(fp, "%d\n", cnt) ; for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ; fclose(fp) ; } *********************************************************************** ☆题目30 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续小于该四位数以后的五个数且该数是偶数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意:部分源程序存在文件prog1.c中。 程序中已定义数组:a[200],b[200],已定义变量:cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include #define MAX 200 int a[MAX], b[MAX], cnt = 0 ; void jsVal() {int i,j,flag; for(i=0;i {for(j=i+1;j<=i+5;j++) if(a[i] else { flag=0; break;} if(flag==1) b[cnt++]=a[i]; } for(i=0;i for(j=i+1;j if(b[i]>b[j]) {flag=b[i];b[i]=b[j];b[j]=flag;} } void readDat() { int i ; FILE *fp ; fp = fopen("in.dat", "r") ; for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ; fclose(fp) ; } void main() { int i ; readDat() ; jsVal() ; printf("满足条件的数=%d\n", cnt) ; for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ; printf("\n") ; writeDat() ; } writeDat() { FILE *fp ; int i ; fp = fopen("out.dat", "w") ; fprintf(fp, "%d\n", cnt) ; for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ; fclose(fp) ; }
|