1、计算机三级数据库简单数据运算问题9g1.编写函数jsValue,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。 例如:当t=1000时,函数值为:1597。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和写函数writeDat()的内容。#include int jsValue(int t) int f0=0,f1=1,fn; fn=f0
2、+f1; while(fn=t) f0=f1; f1=fn; fn=f0+f1; return fn;main() int n; n=1000; printf(n=%d,f=%dn,n,jsValue(n); writeDat();writeDat() FILE *in,*out; int i,n,s; in=fopen(in.dat,r); out=fopen(out.dat,w); for(i=0;i50;i+) fscanf(in,%d,&n); s=jsValue(n); printf(%dn,s); fprintf(out,%dn,s); fclose(in); fclose(out
3、);*2.下列程序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()和输出数据函数w
4、riteDat()的内容。#include #include #include float countValue() double x0,x1; x1=0.0; do x0=x1; x1=cos(x0); while(fabs(x0-x1)=0.000001); return x1;/*fabs是针对符点数进行取绝对值的,ABS是针对整数进行取绝对值的main() clrscr(); printf(实根=%fn,countValue(); printf(%fn,cos(countValue()-countValue(); writeDat();writeDat() FILE *wf; wf=f
5、open(OUT17.DAT,w); fprintf(wf,%fn,countValue(); fclose(wf); *3.请编写函数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; d
6、ouble s=0.0; for(i=1;in;i+) if(i%21=0) s+=i; return sqrt(s);main() clrscr(); printf(自然数之和的平方根=%fn,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;i10;i+) fscanf(fp,%dn,&n);
7、s=countValue(n); fprintf(wf,%fn,s); fclose(fp);fclose(wf);*4.已知在文件in.dat中存有N个(个数200)实数,函数readdat()读取这N个实数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出这N个实数的平均值aver;2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。 注意:部分源程序已给出。 请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。#include
8、 #include #define MAXNUM 200float xxMAXNUM ;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;iN;i+) sumint+=(long)xxi;/*以强制类型转换来获得xxi的整数部分 sumdec+=xxi-(long)xxi;
9、 aver+=xxi; aver/=N;void main() int i ; clrscr() ; for(i = 0 ; i MAXNUM ; i+) xxi = 0 ; if(ReadDat() printf(数据文件IN.DAT不能打开!007n) ; return ; Calvalue() ; printf(文件IN.DAT中共有实数=%d个n, N) ; printf(平均值=%.2lfn, aver) ; printf(整数部分之和=%.2lfn, sumint) ; printf(小数部分之和=%.2lfn, sumdec) ; WriteDat() ;system(pause
10、);int ReadDat(void) FILE *fp ; int i = 0 ; if(fp = fopen(in.dat, r) = NULL) return 1 ; while(!feof(fp) fscanf(fp, %d, &xxi+) ; fclose(fp) ; return 0 ;void WriteDat(void) FILE *fp ; fp = fopen(OUT.DAT, w) ; fprintf(fp, %.2lfn%.2lfn%.2lfn, aver,sumint,sumdec) ; fclose(fp) ;*5.下列程序prog1.c的功能是:在三位整数(100
11、至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。 请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。 最后调用函数writeDat()把结果输出到文件out.dat中。 请勿改动主函数main()和写函数writeDat()的内容。#include int jsValue(int bb)int i,j,cnt=0,bw,sw,gw; for(i=100;i=999;i+) bw=i/100; sw=i%100/10; gw=i%10; for(j=10;j*j=i;j+) if(i=j*j&(bw=sw|sw=g
12、w|gw=bw) bbcnt+=i; return cnt;main() int b20,num; num=jsValue(b); writeDat(num,b);writeDat(int num,int b) FILE *out; int i; out=fopen(out.dat,w); printf(%dn,num); fprintf(out,%dn,num); for(i=0;inum;i+)printf(%dn,bi);fprintf(out,%dn,bi); fclose(out);*6.请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制
13、函数Compute()分别计算出xx中偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N 2 totfc=1/N(xxi-ave2) i=1 设N为偶数的个数,xxi为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。#include #include #include #define
14、MAX 1000int xxMAX,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;iMAX;i+) fscanf(fp,%d,&xxi); if(i+1)%10=_ fscanf(fp,n); /*/ fclose(fp); return 0;void Compute(void) int i,yyMAX; fo
15、r(i=0;iMAX;i+) yyi=0; for(i=0;iMAX;i+) if(xxi%2=0) yyeven+=xxi; ave2+=xxi; else odd+; ave1+=xxi; if(odd=0) ave1=0; else ave1/=odd; if(even=0) ave2=0; else ave2/=even; for(i=0;ieven;i+) totfc+=(yyi-ave2)*(yyi-ave2)/even;void main() int i; for(i=0;iMAX;i+)xxi=0; if(ReadDat() printf(数据文件IN.DAT不能打开!007n
16、); return; Compute(); printf(OVEN=%dnAVE1=%fnAVER2=%fnTOTFC=%fn,even,ave1,ave2,totfc); WriteDat();void WriteDat(void) FILE *fp; int i; fp=fopen(OUT.DAT,w); fprintf(fp,%dn%fn%fn%fn,even,ave1,ave2,totfc); fclose(fp);*7.下列程序prog1.c的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NIN
17、E的和SUM。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件OUT15.DAT中。 其中的S,I,X,N,E各代表一个十进制数字。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。#include int cnt,sum; void countValue() int s,i,x,n,e,six,nine; for(s=1;s10;s+) for(i=0;i10;i+) for(x=0;x10;x+) for(n=1;n10;n+) for(e=0;e10;e+) six
18、=s*100+i*10+x; nine=n*1000+i*100+n*10+e; if(3*six=2*nine) cnt+;sum+=six+nine; void main() cnt=sum=0; countValue(); printf(满足条件的个数=%dn,cnt); printf(满足条件所有的SIX与NINE的和=%dn,sum); writeDat();writeDat() FILE *fp; fp=fopen(OUT15.DAT,w); fprintf(fp,%dn%dn,cnt,sum); fclose(fp);另一种经典解法:void countValue() int i
19、_;for(i=666;i=999;i=i+2) if(i/10%10=(3*i/2)/100%10)&(3*i/2)/1000=(3*i/2)%100/10) cnt+;sum+=i+3*i/2;运算结果为:满足条件的个数=4满足条件所有的SIX与NINE的和=9430*8.请编写函数void countValue(int *a,int *n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDAT()的内容。#include #
20、include void countValue(int *a,int *n) int i; *n=0; for(i=1;i=1000;i+) if(i%7=0&i%11|i%7&i%11=0)/*或者可以作为可以被7,11整除但是不可被77整除 a(*n)+=i;main() int aa1000,n,k; clrscr(); countValue(aa,&n); for(k=0;kn;k+) if(k+1)%10=0)printf(n); else printf(%5d,aak); writeDAT();writeDAT() int aa1000,n,k; FILE *fp; fp=fope
21、n(out19.dat,w); countValue(aa,&n); for(k=0;kn;k+) if(k+1)%10=0) fprintf(fp,n); else fprintf(fp,%5d,aak);fprintf(fp,n); fclose(fp);*9.请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N 2 totf
22、c=1/N (xxi-ave1) i=1 设N为奇数的个数,xxi为奇数,ave1为奇数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。#include #include #include #define MAX 1000int xxMAX,odd=0,even=0;double ave1=0.0,ave2=0.0,totfc=0.0;void WriteDat(void);int ReadDat(void) int i; FIL
23、E *fp; if(fp=fopen(IN.DAT,r)=NULL) return 1;/*编制函数ReadDat()的部分*/for(i=0;iMAX;i+) fscanf(fp,%d,&xxi); if(i+1)%10=0) fscanf(fp,n); /*/ fclose(fp); return 0;void Compute(void) int i,yyMAX; for(i=0;iMAX;i+) yyi=0; for(i=0;iMAX;i+) if(xxi%2) yyodd+=xxi; ave1+=xxi; else even+; ave2+=xxi; if(odd=0) ave1=0;
24、 else ave1/=odd; if(even=0) ave2=0; else ave2/=even; for(i=0;iodd;i+) totfc+=(yyi-ave1)*(yyi-ave1)/odd;void main() int i; for(i=0;iMAX;i+)xxi=0; if(ReadDat() printf(数据文件IN.DAT不能打开!007n); return; Compute(); printf(ODD=%dnAVE1=%fnAVE2=%fnTOTFC=%fn,odd,ave1,ave2,totfc); WriteDat();void WriteDat(void) FILE *fp; int i; fp=fopen(OUT.DAT,w); fprintf(fp,%dn%fn%fn%fn,odd,ave1,ave2,totfc); fclose(fp);*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1