二级(C语言程序设计)上机题汇总
一、程序调试题
(一)程序填空
练习一:
/*该程序功能:对x=1,2,。。。。。,10,f(x)=x*x*-5*x+sin(x)的最大值。*/
#include <>
#include <>
#define f(x) x*x-5*x+sin(x)
void main()
{ int x; float max;
____ max=f(1);____
for(x=2;x<=10;x++)
___if( max printf("%f\n",max); } 练习二: /*该程序功能:输入三个整数,按由小到大的顺序输出这三个数。*/ #include <> void swap(__int *pa, int *pb____) { /*交换两个数的位置*/ int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { int a,b,c,temp; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(b>c) swap(&b,&c); if(__a>b___) swap(&a,&b); printf("%d,%d,%d",a,b,c); } 练习三: /*该程序功能:将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。*/ #include <> void Dec2Bin(int m) { int bin[32],j; for(j=0;m!=0;j++) { bin[j]= __m%2___; m=m/2; } for(;j!=0;j--) printf("%d", ____bin[j-1]_ _____ ); } void main() { int n; scanf("%d",&n); Dec2Bin(n); } 练习四: /*该程序功能:输入数组x[7],调用函数f,去除数组中的负数,输出结果为:1 3 4 6*/ #include <> void f(int *a,int *m) { int i,j; for(i=0;i<*m;i++) if(a[i]<0) { for(j=i--;j<*m-1;j++) a[j]=a[j+1]; ___*m=*m-1;___ } } void main() { int i,n=7,x[7]={1,-2,3,4,-5,6,-7}; _ f(x,&n);_____ for(i=0;i printf("\n"); } 练习五: /*该程序功能:输出6~1000之间的完数(1个数的因子和等于其自身的数:6=1+2+3,28=1+2+4+7+14,则6,28都是完数)*/ #include <> void main() { int i,j,s; for(i=6;i<=1000;i++) { ___s=1;___ for(j=2;___j if(s==i) printf("%d\n",s); } } 练习六: /*该程序功能:输入整数n(n>0),求m使得2的m次方小于或等于n,2的m+1次方大于或等于n。*/ #include <> void main() { int m=0,t=1,n; while( __scanf(“%d”,&n), n<=0___); while(!(t<=n&&t*2>=n)){ ___t=t*2;___ m++; } printf("%d\n",m); } 练习七: /*该程序功能:函数f将数组循环左移k个元素,数组x[7]调用函数f后的输出结果为:4 5 6 7 1 2 3*/ #include <> void f(int *a,int n,int k) { int i,j,t; for(i=0;i _t=a[0]; for( j=1;j a[n-1]=t; } } void main() { int i,x[7]={1,2,3,4,5,6,7}; f(x,7,3); for(i=0;i<7;i++) printf("%5d",x[i]); printf("\n"); } 练习八: /*该程序功能:调用函数f,求二维数组a中全体元素的和.*/ #include <> float f( _float *x[], int m, int n_____) { float y=0; int i,j; for(i=0;i return y; } void main() { float a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*b[3]; int i; for(i=0;i<3;i++) b[i]=__ a[i]__; printf("%.2f\n",f(b,3,4)); } 练习九: /*该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。*/ #include <> #include <> void main() { int n,s=0; scanf("%d",&n); ____n=fabs(n);____ while(n!=0) { ____s+=n%10;____ n=n/10; } printf("%d\n",s); } 练习十: /*该程序功能:数组的第1,2项均为1,此后各项值均为该项前二项之和。计算数组第30项的值。*/ #include <> __long f(int n); void main() { printf("%ld\n",f(30)); } long f(int n) { if( _____n==1||n==2 ) return 1; else return f(n-1)+f(n-2); } 练习十一: /*该程序功能:输入m,n(要求输入均大于0,且m>=n),输出它们的最大公约数*/ #include <> void main( ) { int m,n,k; while(scanf("%d%d",&m,&n), m<=0||n<=0||m for( k=n ;n%k!=0||m%k!=0;k--); printf("%d\n",k); } 练习十二: /*程序功能:输入一个整数后,输出该数的位数,如3114,则输出4。*/ #include<> void main() { int n,k=0; scanf(“%d”,&n); while( n!=0 ){ k++; n=n/10; } printf(“%d\n”,k); } 练习十三: /*程序功能:调用函数f,计算代数多项式+*x+*x*x+*x*x*x+* x*x*x x,当x=时的值。*/ #include<> float f(float,float*,int); void main() { float b[5]={,,,,}; printf("%f\n",f,b,5)); } float f(float x,float *a,int n) { float y=a[0],t=1;int i; for(i=1;i return y; } 练习十四: /*程序功能:调用函数f,从字符串中删除所有的数字字符。*/ #include <> #include <> #include <> void f(char *s) { int i=0; while(s[i]!='\0') if(isdigit(s[i])) strcpy (s+i,s+i+1); else i++; } (二)程序修改 练习一: /*该程序功能:运行是输入n,输出n各位数字之和(如n=1308则输出12,n=-3204则输出9)。*/ #include <> #include <> void main() { int n,s=0; scanf("%d",&n); n=fabs(n); /******** 1 *******/ while(n>1) { 和直到末项的绝对值小于eps为止。*/ #include <> #include <> void main() { float x,eps,s=1,t=1,i=1; scanf("%f%f",&x,&eps); do { /***** 1 *****/ t=-t*x/++i; ,a[i].y); , &a[i].y); for(i=0;i if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5) printf("%f,%f\n",a[i].x,a[i].y); } 练习十: 程序功能:分别统计字符串中所有英文字母中的各元音字母个数。 #include <> #include <> void main() { char a[80]; int n[5]={0},i; gets(a); for(i=0; a[i]!='\0'; i++) /***** 1 *****/ switch(toupper(a[i])) { ....的值,并将其值 以格式"%.6f"写到考生目录中Paper下目录下的新建文件中*/ #include<> #include<> void main() { FILE *p; int i; float x=,t=,y=; float a[10]={,,,,,,,,,}; /*考生在这里添加程序*/ y=a[0]; p=fopen("","w"); for(i=1;i<10;i++) { t=t*x; y+=a[i]*sin(t);} fprintf(p,"%.6f",y); fclose(p); } 练习三: /*设计程序:计算多项式a0+a1*x+a2*x*x+a3*x*x*x+...的值,并将其值一格式"%f"写到考生目录中Paper下目录下的新建文件中*/ #include <> #include <> void main() { FILE *p; int i; float x=,t=1,y=0; float a[10]={,,,,,,,,,}; /*考生在这里添加程序*/ y=a[0]; p=fopen("","w"); for(i=1;i<10;i++) { t=t*x; y+=a[i]*t;} fprintf(p,"%f",y); fclose(p); } 练习四: /*设计程序:累加a字符串各个字符的ASCII码值,然后将累加和以形式“%d”写到考生目录中Paper下目录下的新建文件中*/ #include <> void main() { FILE *p; int s=0,i=0; char *a="r235%^%34cdDW,."; /* 考生在这里添加程序*/ p=fopen("","w"); for(;a[i]!='\0';i++) s+=a[i]; fprintf(p,"%d",s); fclose(p); } 练习五: /*设计程序:寻找并输出11到999之间的数m,它满足m,m*m,m*m*m均为回文数。所谓回文数是指各位数字左右对称,例如121,676,94249等。满足上述条件的数如m=11,m^2=121,m^3=1331皆为回文数。请编制函数int JSValue(long m)实现此功能,如果是回文数,则函数返回为1,反之则返回0。*/ #include<> #include<> #include<> int JSValue(long m) { /* 考生在这里添加程序*/ int a[10],i=0,n; while(m) { a[i]=m%10; m=m/10; i++;} for(--i,n=i;i>n/2;i--) if(a[i]!=a[n-i]) return 0; return 1; } void main() { FILE *p;long m; p=fopen("","w"); for(m=11;m<1000;m++) { if(JSValue(m)&&JSValue(m*m)&&JSValue(m*m*m)) fprintf(p,"%ld ",m); } fclose(p); } 练习六: /*设计程序:数列各项为1,1,2,3,5,8,13,21,…,求其前40项之和,并将求和的结果以格式“%d”写到考生目录下的新建文件中*/ #include <> void main() { FILE *p; long s=0,i,a[40]; /* 考生在这里添加程序*/ p=fopen("","w"); for(i=0;i<40;i++) { if(i==1||i==0)a[i]=1; else a[i]=a[i-2]+a[i-1]; } for(i=0;i<40;i++) s+=a[i]; fprintf(p,"%d ",s); fclose(p); } 练习七: /*设计程序:计算数列1,-1/3!,1/5!,-1/7!,1/9!,…的和至某项的绝对值小于1e-5 时为止(该项不累加),将求和的结果以“%.6f”写到考生目录下的新建文件中*/ #include <> #include <> void main() { FILE *p; float s=1,t=1,i=3; /*考生在这里添加代码 */ p=fopen("","w"); do{ t=-t*i*(i-1); s=s+1/t; i+=2; }while(fabs(1/t)>=1e-5); fprintf(p,"%.6f",s); fclose(p); } 练习八: /*设计程序:a,b,c为区间[1,100]的整数,统计使等式c/(a*a+b*b)=1成立的所有解 的个数 (若a=1,b=3,c=10是1个解,则a=3,b=1,c=10也是解)。*/ #include<> void main() { FILE *p; int n=0,a,b,c; /*考生在这里添加代码 */ p=fopen(“”,”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)) n++; fprintf(p,“%d”,n); fclose(p); } 练习九: /*设计程序:在数组x的10个数中求平均值v,找出与v相差最小的数组元素并将其以格式“%.5f”写到考生目录下的新建文件中*/ #include<> #include<> void main() { FILE *p; int i;float k=0; float x[10]={,,,,,,-5,,,},d,v=0; for(i=0;i<10;i++) v+=x[i]; v=v/10; d=fabs(x[0]-v); /*考生在这里添加代码 */ p=fopen("","w"); k=x[0]; for(i=0;i<10;i++) if(d>fabs(x[i]-v)) { d=fabs(x[i]-v); k=x[i]; } fprintf(p,"%.5f",k); fclose(p); } 练习十: /*设计程序:在正整数中找出1个最小的,被3,5,7,9除余数分别为1,3,5,7的数,将该数以格式“%d”写到考生的目录下的新建文件中*/ #include <> #include <> void main() { /*考生在这里添加代码*/ FILE *p; int i; p=fopen(“”,”w”); for(i=1;;i++) if((i%3==1)&&(i%5==3)&&(i%7==5)&&(i%9==7))break; fprintf(p,"%d",i); fclose(p); } 练习十一: /*设计程序:将满足条件pow,n)<1e6 #include <> #include <> void main() { float y=; int n=1; FILE *p; /*考生在这里添加代码*/ p=fopen(“”,”w”); for(;pow(y,n)>1e6||pow(y,n+1)<1e6;n++); fprintf(p,"%d,%.0f",n,pow,n)); fclose(p); } 练习十二: /*设计程序:计算2的平方根,3的平方根,…,10的平方根之和,要求计算结果具有小数点后10有效位数,以“%.10f\n”写到考生的目录下的新建文件中*/ #include <> #include <> void main() { FILE *p; /*考生在这里添加代码*/ float x=0; int i; p=fopen("","w"); for(i=2;i<=10;i++) x+=sqrt(i); fprintf(p,"%.10f",x); fclose(p); } 练习十三: /*设计程序:将a数组的每1行均除以该行上绝对值最大的元素,然后将a数组写到考生的目录的新建文件中*/ #include <> #include <> void main() { float a[3][3]={{,,},{2,3,},{3,4,}}; FILE *p; float x; int i,j; /*考生在这里添加代码*/ for(i=0;i<3;i++) { x=a[i][0]; for(j=0;j<3;j++) if(fabs(x) for(j=0;j<3;j++) a[i][j]=a[i][j]/x; } p=fopen("","w"); for(i=0;i<3;i++) { for(j=0;j<3;j++) fprintf(p,"%",a[i][j]); fprintf(p,"\n"); } fclose(p); } 练习十四: /*设计程序:x[i],y[i]分别表示平面上1个点的x,y坐标,求下列5点各点间距离总和,并将该数以格式“%.4f”写到考生的目录下的新建文件中*/ #include <> #include <> void main() { FILE *p; float s,x[5]={,,,,}; float y[5]={7,,,,}; int i,j; /*考生在这里添加代码*/ p=fopen("","w"); s=0; for(i=0;i<4;i++) for(j=i+1;j<5;j++) s+=sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2)); fprintf(p,"%.4f",s); fclose(p); } 练习十六: /*设计程序:计算字符串s中每个字符的权重值,所谓权重值就是字符串中的位置值与该字符 的ASCII码值的乘积。位置值从1开始依次递增。将每个字符的权重值,以格式“%d”写到考生的目录下的新建文件中*/ #include<> #include<> void main() { FILE *p; int i,w; char *s="we45*&y3r#$1"; /*考生在这里添加代码*/ p=fopen(“”,”w”); for(i=0; s[i]!='\0';i++) { w=s[i]*i; fprintf(p,”%d”,w); } fclose(p); } 练习十七: /*程序设计:在6至1000内找出所有的合数,用语句“fprintf(p,”%6d”,n);”输出。说明(某个数等于其诸因子之和,则该数为合数:6=1+2+3,28=1+2+4+7+14, 6,28都是 合数)*/ #include <> void main() { FILE *p; int n,j,s; /*考生在这里添加代码*/ p=fopen(“”,”w”); for(n=6;n<=1000;n++) { s=0; for(j=1;j if(n%j==0) s+=j; if(s==n) fprintf(p,"%d\n",n); } fclose(p); } 练习十八: /* 程序设计题:统计满足条件x*x+y*y+z*z==2000的所有解的个数,并将统计结果以格式"%d"写入到考生目录下新建的文件。说明:若a、b、c是1个解,则a、c、b也是1个解,等等。*/ #include <> void main() { FILE *p; int x,y,z,k=0; /*考生在这里添加代码*/ p=fopen(“”,”w”); for(x=-45;x<45;x++) for(y= -45;y<45;y++) for(z=-45;z<45;z++) if(x*x+y*y+z*z==2000) k++; fprintf(p,”%d”,k); fclose(p); } 练习十九: /* 程序设计题:数组元素x[i]、y[i]表示平面上某点坐标,统计所有各点间最短距离,并将其值以格式"%f"写到考生目录下新建文件。*/ #include <> #include <> #define len(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) void main() { FILE *p; int i,j; float c,minc; float x[]={,,,,,,,,,}; float y[]={-6,,,,,,,,,}; minc=len(x[0],y[0],x[1],y[1]); /*考生在这里添加代码*/ p=fopen("","w"); for(i=0;i<10;i++) for(j=0;j<10;j++) { c=len(x[i],y[i],x[j],y[j]); if(i!=j&&minc>c) minc=c; } fprintf(p,"%f",minc); fclose(p); } 练习二十: /* 程序设计题:求Fibonacci数列中大于t的最小一个数结果由函数JSValue返回,F(n)定义为F(0)=0,F(1)=1,F(n)=F(n-1)+ F(n-2),分别计算出当t=1000和3000时的结果*/ #include<> int JSValue(int t) { /*考生在这里添加代码*/ int f1=0,f2=1,flag=0; while(flag==0) { f1=f1+f2; f2=f2+f1; if(t>=f1&&t<=f2) { flag=1; return f2;} } } void main() { FILE *p; p=fopen(“”,”w”); fprintf(p,”%d,%d”, JSValue(1000),JSValue(3000)); fclose(p); } 练习二十一: /*设计程序:计算27的小于的2n次方根(27的2n-2次方根不小于),以格式%d写到考生目录下的新建文件中*/ #include <> #include <> void main() { FILE *p; float x=27; int n=0; /*考生在这里添加代码 */ p=fopen(“”,”w”); n=n+1; for(;(pow(x,(2*n))>|| (pow(x,(2*n-2))<;n++); fprintf(p,"%d ",n); fclose(p); } 练习二十二: /*设计程序:选出5000以下符合条件的自然数。条件是:千位数字与百位数字之和等于十位数字与个位数字之和,且千位数字与百位数字之和等于个位数字与千位数字之差的10倍。计算并输出这些四位自然数的个数cnt及这些数字的和sum到^^^ */ #include<> void main() { FILE *p; int cnt,sum; /*考生在这里添加代码 */ int a[4],t,s,i,d; cnt=0;sum=0; p=fopen("","w"); for(t=1000;t<=5000;t++) { s=t;i=0; while(s) { a[i]=s%10; s=s/10; i++; } d=a[3]-a[0]; if(d<0) d=-d; if(((a[3]+a[2])==(a[0]+a[1]))&&((a[2]+a[3])==d*10)) { cnt++; sum+=t; } } fprintf(p,"%d,%d",cnt,sum); fclose(p); }