计算机三级数据库简单数据运算问题9g.docx
- 文档编号:5047091
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:15
- 大小:18.64KB
计算机三级数据库简单数据运算问题9g.docx
《计算机三级数据库简单数据运算问题9g.docx》由会员分享,可在线阅读,更多相关《计算机三级数据库简单数据运算问题9g.docx(15页珍藏版)》请在冰豆网上搜索。
计算机三级数据库简单数据运算问题9g
1.编写函数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
intjsValue(intt)
{intf0=0,f1=1,fn;
fn=f0+f1;
while(fn<=t)
{f0=f1;
f1=fn;
fn=f0+f1;
}
returnfn;
}
main()
{
intn;
n=1000;
printf("n=%d,f=%d\n",n,jsValue(n));
writeDat();
}
writeDat()
{
FILE*in,*out;
inti,n,s;
in=fopen("in.dat","r");
out=fopen("out.dat","w");
for(i=0;i<50;i++){
fscanf(in,"%d",&n);
s=jsValue(n);
printf("%d\n",s);
fprintf(out,"%d\n",s);
}
fclose(in);
fclose(out);
}
*****************************************************************************************
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()和输出数据函数writeDat()的内容。
#include
#include
#include
floatcountValue()
{doublex0,x1;
x1=0.0;
do{x0=x1;
x1=cos(x0);
}while(fabs(x0-x1)>=0.000001);
returnx1;
}/*fabs是针对符点数进行取绝对值的,ABS是针对整数进行取绝对值的
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);
}
*****************************************************************************************
3.请编写函数countValue(),它的功能是:
求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。
例如若n为1000时,函数值应为:
s=153.909064。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输入输出数据函数progReadWrite()的内容。
#include
#include
#include
doublecountValue(intn)
{inti;
doubles=0.0;
for(i=1;i if(i%21==0)s+=i; returnsqrt(s); } main() { clrscr(); printf("自然数之和的平方根=%f\n",countValue(1000)); progReadWrite(); } progReadWrite() { FILE*fp,*wf; inti,n; floats; 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); } ***************************************************************************************** 4.已知在文件in.dat中存有N个(个数<200)实数,函数readdat()读取这N个实数并存入数组xx中。 请编制函数calvalue(),其功能要求: 1、求出这N个实数的平均值aver; 2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。 注意: 部分源程序已给出。 请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。 #include #include #defineMAXNUM200 floatxx[MAXNUM]; intN=0;/*文件IN.DAT中共有多少个实数*/ doubleaver=0.0;/*平均值*/ doublesumint=0.0;/*整数部分之和*/ doublesumdec=0.0;/*小数部分之和*/ intReadDat(void); voidWriteDat(void); voidCalValue(void) {inti; for(i=0;i {sumint+=(long)xx[i];/*以强制类型转换来获得xx[i]的整数部分 sumdec+=xx[i]-(long)xx[i]; aver+=xx[i]; } aver/=N; } voidmain() {inti; clrscr(); for(i=0;i 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"); } intReadDat(void) { FILE*fp; inti=0; if((fp=fopen("in.dat","r"))==NULL)return1; while(! feof(fp)){ fscanf(fp,"%d,",&xx[i++]); } fclose(fp); return0; } voidWriteDat(void) { FILE*fp; fp=fopen("OUT.DAT","w"); fprintf(fp,"%.2lf\n%.2lf\n%.2lf\n",aver,sumint,sumdec); fclose(fp); } ***************************************************************************************** 5.下列程序prog1.c的功能是: 在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。 请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。 最后调用函数writeDat()把结果输出到文件out.dat中。 请勿改动主函数main()和写函数writeDat()的内容。 #include intjsValue(intbb[]) {inti,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==gw||gw==bw))bb[cnt++]=i; } returncnt; } main() { intb[20],num; num=jsValue(b); writeDat(num,b); } writeDat(intnum,intb[]) { FILE*out; inti; out=fopen("out.dat","w"); printf("%d\n",num); fprintf(out,"%d\n",num); for(i=0;i fclose(out); } *******************************************************************************6.请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N2 totfc=1/N∑(xx[i]-ave2) i=1 设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是: 每行存放10个数,并用逗号隔开。 (每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include #include #include #defineMAX1000 intxx[MAX],odd=0,even=0; doubleave1=0.0,ave2=0.0,totfc=0.0; voidWriteDat(void); intReadDat(void) {inti; FILE*fp; if((fp=fopen("IN.DAT","r"))==NULL)return1; /*********编制函数ReadDat()的部分************/ for(i=0;i {fscanf(fp,"%d,",&xx[i]); if((i+1)%10=________________________________________________________fscanf(fp,"\n");} /*******************************************/ fclose(fp); return0; } voidCompute(void) {inti,yy[MAX]; for(i=0;i yy[i]=0; for(i=0;i if(xx[i]%2==0){yy[even++]=xx[i];ave2+=xx[i];} else{odd++;ave1+=xx[i];} if(odd==0)ave1=0; elseave1/=odd; if(even==0)ave2=0; elseave2/=even; for(i=0;i totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even; } voidmain() { inti; for(i=0;i if(ReadDat()){ printf("数据文件IN.DAT不能打开! \007\n"); return; } Compute(); printf("OVEN=%d\nAVE1=%f\nAVER2=%f\nTOTFC=%f\n",even,ave1,ave2,totfc); WriteDat(); } voidWriteDat(void) { FILE*fp; inti; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d\n%f\n%f\n%f\n",even,ave1,ave2,totfc); fclose(fp); } ***************************************************************************************** 7.下列程序prog1.c的功能是: 计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和SUM。 请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件OUT15.DAT中。 其中的S,I,X,N,E各代表一个十进制数字。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include intcnt,sum; voidcountValue() {ints,i,x,n,e,six,nine; for(s=1;s<10;s++) for(i=0;i<10;i++) for(x=0;x<10;x++) for(n=1;n<10;n++) for(e=0;e<10;e++) {six=s*100+i*10+x; nine=n*1000+i*100+n*10+e; if(3*six==2*nine) {cnt++;sum+=six+nine;} } } voidmain() { cnt=sum=0; countValue(); printf("满足条件的个数=%d\n",cnt); printf("满足条件所有的SIX与NINE的和=%d\n",sum); writeDat(); } writeDat() { FILE*fp; fp=fopen("OUT15.DAT","w"); fprintf(fp,"%d\n%d\n",cnt,sum); fclose(fp); } 另一种经典解法: voidcountValue() {inti_; 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.请编写函数voidcountValue(int*a,int*n),它的功能是: 求出1到1000之内能被7或11整除但不能同时被7或11整除的所有整数放在数组a中,并通过n返回这些数的个数。 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDAT()的内容。 #include #include voidcountValue(int*a,int*n) {inti; *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() { intaa[1000],n,k; clrscr(); countValue(aa,&n); for(k=0;k if((k+1)%10==0)printf("\n"); elseprintf("%5d",aa[k]); writeDAT(); } writeDAT() { intaa[1000],n,k; FILE*fp; fp=fopen("out19.dat","w"); countValue(aa,&n); for(k=0;k if((k+1)%10==0)fprintf(fp,"\n"); elsefprintf(fp,"%5d",aa[k]); fprintf(fp,"\n"); fclose(fp); } ***************************************************************************************** 9.请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N2 totfc=1/N∑(xx[i]-ave1) i=1 设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。 原始数据文件存放的格式是: 每行存放10个数,并用逗号隔开。 (每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include #include #include #defineMAX1000 intxx[MAX],odd=0,even=0; doubleave1=0.0,ave2=0.0,totfc=0.0; voidWriteDat(void); intReadDat(void) { inti; FILE*fp; if((fp=fopen("IN.DAT","r"))==NULL)return1; /*********编制函数ReadDat()的部分************/ for(i=0;i {fscanf(fp,"%d,",&xx[i]); if((i+1)%10==0) fscanf(fp,"\n"); } /*******************************************/ fclose(fp); return0; } voidCompute(void) {inti,yy[MAX]; for(i=0;i yy[i]=0; for(i=0;i if(xx[i]%2){yy[odd++]=xx[i];ave1+=xx[i];} else{even++;ave2+=xx[i];} if(odd==0)ave1=0; elseave1/=odd; if(even==0)ave2=0; elseave2/=even; for(i=0;i totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd; } voidmain() { inti; for(i=0;i if(ReadDat()){ printf("数据文件IN.DAT不能打开! \007\n"); return; } Compute(); printf("ODD=%d\nAVE1=%f\nAVE2=%f\nTOTFC=%f\n",odd,ave1,ave2,totfc); WriteDat(); } voidWriteDat(void) { FILE*fp; inti; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d\n%f\n%f\n%f\n",odd,ave1,ave2,totfc); fclose(fp); } *****************************************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 三级 数据库 简单 数据 运算 问题