2004年秋计算机等级考试上机练习系统部分程序设计题答案1、求斐波那契(Fibonacci)数列中大于t的最小的一个数,结果由函数JSValue返回,其中斐波那契数列F(n)的定义为:F(0)=0,F(1)=1F(n)=F(N-1)+F(n-2)分别计算当t=1000和t=3000时的结果,将计算结果输出到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.hintJSValue(intt){inta[20],i=1;a[0]=1;a[1]=1;while(a[i]t){i++;a[i]=a[i-1]+a[i-2];}returna[i];}voidmain(){FILE*p;p=fopen(design.dat,w);fprintf(p,%d,%d,JSValue(1000),JSValue(3000));fclose(p);}2、计算字符串s中每个字符的权重值,所谓权重值就是字符在字符串中的位置值与该字符的ASCII码值的乘积。位置值从1开始依此递增。将每个字符的权重值,以格式%d写入到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;inti,w[20];char*s=we45*&y3r#$1;p=fopen(“design.dat”,”w”);i=1;while(*s!=’\0’){w[i]=i*(*s);fprintf(p,”%d”,w[i]);fputc(‘\n’,p);i++;s++;}fclose(p);}3、对x=1,2,...,10,求函数f(x)=x-10*cos(x)-5*sin(x)的最大值,并将该数以格式%.3f写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;floatf(float),max,x;max=f(1);for(x=1;x=10;x++)if(maxf(x))max=f(x);p=fopen(“design.dat”,”w”);fprintf(p,”%f”,max);fclose(p);}floatf(floatx){floaty;y=x-10*cos(x)-5*sin(x);returny;}4、在6至5000内找出所有的亲密数对,并将每对亲密数用语句fprintf(p,%6d,%6d\n,a,b);”写到考生目录中Paper子目录下的新建文件design.dat中。说明:若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。如:220、284是1对亲密数,284、220也是1对亲密数。#includestdio.hvoidmain(){FILE*p;inta,b,c,k;p=fopen(design.dat,w);for(a=6;a5000;a++){b=1;for(k=2;k=a/2;k++)if(a%k==0)b+=k;c=1;for(k=2;k=b/2;k++)if(b%k==0)c+=k;if(a==c&&a!=b)fprintf(p,“%d,%d\n”,a,b);fclose(p);}}5、a、b、c为区间[1,100]的整数,统计使等式c/(a*a+b*b)=1成立的所有解的个数,并将统计数以格式%d写入到考生目录下新建文件design.dat(若a=1、b=3、c=10是1个解,则a=3、b=1、c=10也是解)#includestdio.hvoidmain(){FILE*p;intn=0,a,b,c;p=fopen(“design.dat”,”w”);for(a=1;a=100;a++)for(b=1;b=100;b++)for(c=1;c=100;c++)if((c/(a*a+b*b))==1)n=n+1;fprintf(p,”%d”,n);fclose(p);}6、选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt及这些数字的和sum到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.hvoidmain(){FILE*p;intcnt,sum;inti,qianwei,baiwei,shiwei,gewei;cnt=0,sum=0;p=fopen(design.dat,w);for(i=1000;i5000;i++){qianwei=i/1000;baiwei=i/100-qianwei*10;shiwei=i/10-baiwei*10-qianwei*100;gewei=i%10;if((qianwei+baiwei==shiwei+gewei)&&(qianwei+baiwei==10*(gewei-qianwei))){cnt++;sum=sum+i;}}fprintf(p,%d,%d,cnt,sum);fclose(p);}7、计算多项式a0+a1*x+a2*x*x+a3*x*x*x+...的值,并将其值以格式%f写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;inti;floatx=1.279,t=1,y=0;floata[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};p=fopen(design.dat,w);y=a[0];t=a[0];for(i=1;i3;i++){t=t*a[i]*x/a[i-1];y=y+t;}fprintf(p,%f,y);fclose(p);}8、计算27的小于1.00001的2n次方根(27的2n-2次方根不小于1.00001),将n以格式%d写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;floatx=27;intn=0;p=fopen(design.dat,w);while(sqrt(x)1.00001){n++;x=sqrt(x);}fprintf(p,%d,n+1);fclose(p);}9、设计程序:x[i],y[i]分别表示平面上1个点的x、y坐标,求下列5点各点间距离总和,并将该数以格式%.4f写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;floats,x[5]={-1.5,2.1,6.3,3.2,-0.7};floaty[5]={7,5.1,3.2,4.5,7.6};inti,j;floatsum=0;p=fopen(design.dat,w);for(i=0;i5;i++)for(j=0;j5;j++)sum=sum+sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));sum=sum/2;fprintf(p,%.4f,sum);fclose(p);}10、数列第1项为81,此后各项均为它前1项的正平方根,统计该数列前30项之和,并以格式%.3f写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;floats=0,a=81,i;p=fopen(design.dat,w);for(i=0;i30;i++){s=s+a;a=sqrt(a);}fprintf(p,%.3f,s);fclose(p);}11、在数组x的10个数中求平均值v,找出与v相差最小的数组元素并将其以格式%.5f写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;inti,k=0;floatx[10]={7.23,-1.5,5.24,2.1,-12.45,6.3,-5,3.2,-0.7,9.81},d,v=0;for(i=0;i10;i++)v+=x[i];v=v/10;d=fabs(x[0]-v);for(i=1;i10;i++)if(fabs(x[i]-v)d){d=fabs(x[i]-v);k=i;}p=fopen(design.dat,w);fprintf(p,%.5f,x[k]);fclose(p);}12计算多项式a0-a1*x+a2*x*x/2!-a3*x*x*x/3!+...的值,并将其以格式%f写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;inti;floatx=1.279,t,y;floata[10]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};t=1;y=0;for(i=0;i10;i++){y+=a[i]*t;t=-t*x/(i+1);}p=fopen(design.dat,w);fprintf(p,%f,y);fclose(p);}13、计算2的平方根、3的平方根、...10的平方根之和,要求计算结果具有小数点后10位有效位数,并以格式%.10f\n写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.h#includemath.hvoidmain(){FILE*p;inti;doubles=0;for(i=2;i=10;i++)s+=sqrt(i);p=fopen(design.dat,w);fprintf(p,%.10f\n,s);fclose(p);}14、将数组a的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后将a数组写入到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.hvoidmain(){floata[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}};FILE*p;inti,j;floatk;for(i=0;i3;i++){k=a[i][i];for(j=0;j3;j++)a[i][j]/=k;}p=fopen(design.dat,w);for(i=0;i3;i++){for(j=0;j3;j++)fprintf(p,%10.6f,a[i][j]);fprintf(p,\n);}fclose(p);}15、数列各项为1,1,2,3,5,8,13,21,...,求其前40项之和,并将求和的结果以格式%d写到考生目录中Paper子目录下的新建文件design.dat中。#includestdio.hvoidmain(){FILE*p;longs=0,i,a[40];a[0]=1;a[1]=1;s=a[0]+a[1];for(i=2;i40;i++){a[i]=a[i-1]+a[i-2];s+=a[i];}p=fopen(design.dat,w);fprintf(p,%ld,s);fclose(p);}16、z=f(x,y)=10*cos(x-4)+5*sin(y-2),若x,y取值为区间[0,10]的整数,找出使z取最小值的x1,y1,并将x1、y1以格式%d,%d写入到考生目录中Paper子目录下的新建文件design.dat中。