浙江省高校计算机等级考试C程序设计上机模拟题(共44页).doc
精选优质文档-倾情为你奉上浙江省高校计算机等级考试C程序设计上机模拟题第三部分 C程序设计上机模拟题(一) 上机修改题1. 在考生目录下,有Modify.c程序,该程序中”/*N*/”的下一行中 有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入m、n(要求输入数均大于0),输出它们的最小公倍数 /*find the lease common multiple of m and n*/ #include <stdio.h> void main() int m,n,k; /*1*/ while(scanf("%d%d",&m,&n),m<0&&n<0); / m<0| n<0 for(k=m;k%n!=0;) /*2*/ k=k+m%n; / k=k+m printf("%dn",k); 2. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:运行时若输入a、n分别为3、6,则输出下列表达式的值:3+33+333+3333+33333+ #include <stdio.h>void main() int i,a,n,t=0; /* 1 */s=0; / int s=0; scanf("%d%d",&a,&n);for(i=1;i<=n;i+) /* 2 */ t=t*10+i; / t=t*10+1; s=s+t; s=s*a; printf("%dn",s);3. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:运行时输入n,输出n各位数字之和(如n=1308则输出12,n=-3204则输出9)。#include <stdio.h> #include <math.h> void main() int n,s=0; scanf("%d",&n);n=fabs(n);/* 1 */ while(n>1) / ns=s+n%10;/* 2 */ n=n%10; / n=n/10; printf("%dn",s); 4. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入1个字符串,输出其中所出现过的大写英文字母。如运行时输入字符串"FONTNAME and FILENAME",应输出"F O N T A M E I L"。 #include <stdio.h> void main() char x80,y26; int i,j,ny=0; gets(x); for(i=0;xi!='0'i+) if(xi>='A'&&xi<='Z') for(j=0;j<ny;j+) /* 1 */ if(yi=xj) continue; / if(yj=xi) break; if(j=ny) yny=xi; ny+; /* 2 */ for(i=0;i<26;i+) / i<ny printf("%c ",yi); printf("n"); 5. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误, 请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入x、eps,计算多项式1-x+x*x/2!-x*x*x/3!+.的和直到末项的绝对值小于eps为止。#include <stdio.h>#include <math.h>void main( ) float x,eps,s=1,t=1,i=1; scanf("%f%f",&x,&eps); do /* 1 */ t = -t * x/ +i; / t = -t * x / i+; s += t; /* 2 */ while( fabs(t ) >= eps) / 少 ; printf("%fn",s);6. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:分别统计字符串中所有英文字母中的各元音字母个数。#include <stdio.h>#include <ctype.h>void main() char a80; int n5=0,i; gets(a); for(i=0; ai!=0; i+) /* 1 */ switch(tolower(a+i) / switch(tolower(ai) case 'a': n0+; break; case 'e': n1+; break; case 'i': n2+; break; case 'o': n3+; break; /* 2 */ case 'U': n4+; break; / u for(i=0;i<5;i+) printf("%dn",ni); 7. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)该程序功能:输入n(0<n<10)后,输出1个数字金字塔。如输入n为4,则输出:1 222 33333 #include <stdio.h>void main() int i,j,n; /* 1 */ scanf("%d", n); / &n for(i=1;i<=n;i+) for(j=1;j<=n+1-i;j+) putchar(' '); for(j=1;j<=2*i-1;j+) putchar(char)(i+48); /* 2 */ putchar(n); / n 8. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中 有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:运行时输入10个数,然后分别输出其中的最大值、最小值。 #include <stdio.h> void main() float x,max,min; /* 1 */ for(int i=1;i<=10;i+) / C中不能这样用, 改为:int i; for( i=1; i<=10; i+) scanf("%f",&x); /* 2 */ if(i =1) max=x;min=x; / i=1 if(x>max) max=x; if(x<min) min=x; printf("%f,%fn",max,min); 9. 在考生目录下,有Modify.c程序,该程序中"/* N */"的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:运行时输入n,输出n的所有质数因子(如n=13860,则输出2、2、3、3、5、7、11)。 #include <stdio.h> void main( ) int n,i; scanf("%d",&n); /* 1 */ i=1; / i=2; while(n>1) if(n%i=0) printf("%dt",i); n/=i; else /* 2 */ n-; / i+; 10. 在考生目录下,有Modify.c程序,该程序中“/* N */”的下一行中有错误,请改正(注意:不得加行、减/行、加句、减句,否则后果自负)。 该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。 #include <stdio.h> #include <string.h> #include <stdlib.h> void main() int n,i; /* 1 */ char str; / char *str scanf("%dn",&n); str=(char*)malloc(n); gets(str); /* 2 */ for(i=1;i<strlen(str);i+) / i=0 if(stri>='a'&& stri<='z') stri=stri-32 ; puts(str); (二) 上机填充题1. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。 #include <stdio.h> void main() int m,n,k; while(scanf("%d%d",&m,&n); _1_ ) ; / m<0| n<0 for( _2_; n%k!=0|m%k!=0; k-); / k=m<n?m:n printf("%dn",k); 2. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:函数f将1个整数首尾倒置,程序输出结果应为"54321 -76543"。 #include <stdio.h> #include <math.h> int f(int n) int m,y=0; m=fabs(n); while(m!=0) y=y*10+m%10; 1 / m=m/10 if(n>=0) return y; else 2 ; / return ( -y); void main() printf("%dt",f(12345); printf("%dn",f(-34567); 3. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入1个整数后,输出该数的位数若输入3214则输出4,输入-23156则输出5)。#include <stdio.h>void main() int n,k=0; scanf("%d",&n); while( 1 ) / n%10 k+; 2 ; / n=n/10 printf("%dn",k);4. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:运行时输出下列结果。 abcdefg abcde abc a#include <stdio.h>void main() int i,j; char k; for(i=1;i<=4;i+) for(j=1;j<i;j+) putchar(' '); 1 ; / k=a for(j=9-2*i;j>0;j-) k=(char)k+; printf(“%c”, 2 ); / k-1 putchar('n');5. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充 部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入整数n(n>0)求m,使得2的m次方小于或等于n、2的m+1次方大于或等于n。 #include <stdio.h> void main() int i=0,t=1,n; while( _ 1 _); / scanf(“%d”,&n), n<=0 while(!(t<=n&&t*2>=n) _ 2 _ / t=t*2; i+; printf("%dn",i);6. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充 部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:对x=1,2,.,10,求f(x)=x*x-5*x+sin(x)的最大值。 #include <stdio.h> #include <math.h> #define f(x) x*x-5*x+sin(x) void main() / 运行结果:49. int i; float max; _ 1 _ / max=f(1); for(i=2;i<=10;i+) _ 2_ / if(f(i)>max) max=f(i); printf("%fn",max); 7. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充 部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:函数f除去数组中的负数,输出结果为:1 3 4 6 #include <stdio.h> void f(int *a,int *m) int i,j; for(i=0;i<*m;i+) if(ai<0) for(j=i-;j<*m-1;j+) aj=aj+1; _1_; / *m=*m-1; void main() int i,n=7,x7=1,-2,3,4,-5,6,-7; _2_; / f(x,&n);for(i=0;i<n;i+) printf("%5d",xi); printf("n"); 8. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入n和平面上n个点的坐标,计算各点间距离的总和。 #include <stdio.h> #include <math.h> #define f(x1,y1,x2,y2) sqrt(pow(x2-x1,2)+pow(y2-y1,2) 1 / #include <malloc.h> 或 #include <stdlib.h> void main() float *x,*y,s=0; int i,j,n; scanf("%d",&n); x=(float*)malloc(sizeof(float)*n*2); y=x+ 2 ; / n for(i=0;i<n;i+) scanf("%f%f",x+i,y+i); for(i=0;i<n-1;i+) for(j=i+1;j<n;j+)s+=f(xi,yi,xj,yj); printf("%.2fn",s); 9. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f,求二维数组a中全体元素之和。 #include <stdio.h> float f( 1 ) / float *x, int m, int n / 运行结果:78.00 float y=0; int i,j; for(i=0;i<m;i+) for(j=0;j<n;j+) y=y+*(*(x+i)+j); return y; void main() float a34=1,2,3,4,5,6,7,8,9,10,11,12,*b3; int i; for(i=0;i<3;i+) bi= 2 ; / &ai0 或 ai printf("%.2fn",f(b,3,4); 10. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f,求a数组中最大值与b 数组中最小值之差。 #include <stdio.h> float f(float *x,int n,int flag) / 运行结果:11 float y; int i; 1 ; / y=x0 for(i=1;i<n;i+)if(flag*xi>flag*y) y=xi; return y; void main() float a6=3,5,9,4,2.5,1,b5=3,-2,6,9,1; printf("%.2fn",f(a,6,1) - 2 ) ); / f(b,5,-1) 11. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f计算代数多项式1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*x当x=1.7时的值。 #include <stdio.h>float f(float,float*,int); / 运行结果:81. void main() float b5=1.1,2.2,3.3,4.4,5.5; printf("%fn",f(1.7,b,5); float f( 1 ) / float x,float a, int n float y=a0,t=1; int i; for(i=1;i<n;i+) t=t*x ; y=y+ai*t; 2 ; / return y 12. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f用以求1元2次方程 x*x+5*x-2=0 的实根。 #include <stdio.h> #include <math.h> / 运行结果:0.37 -5.37 int f(float a,float b,float c,float *x1,float *x2) if(b*b-4*a*c<0) 1 ; / return 1; *x1=(-b+sqrt(b*b-4*a*c)/2/a; *x2=(-b-sqrt(b*b-4*a*c)/2/a; return 0; void main() float u1,u2; float a=1,b=5,c=-2; if(f( 2 ) printf("实数范围内无解n"); / f(a,b,c,&u1,&u2) else printf("%.2f %.2fn",u1,u2); 13. 在考生目录下,有Modify2.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:函数f将数组循环左移k个元素,输出结果为:4 5 6 7 1 2 3#include <stdio.h>void f(int *a,int n,int k) int i,j,t;for(i=0;i<k;i+) 1 ; / t=a0 for( 2 ) / j=1;j<n;j+aj-1=aj; an-1=t; void main() int i,x7=1,2,3,4,5,6,7;f( x , 7 , 3);for(i=0;i<7;i+) printf("%5d",xi); printf("n"); 14. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句 ,否则后果自负)。该程序功能:调用函数f,将字符串中的所有字符逆序存放,然后输出。例如,输入字符串为"",则程序的输出结果为""。#include <stdio.h>#include <string.h> void main() char s60,*f(char*);gets(s);printf("%sn",f(s); 1 f(char* x) / char * char t; int i,n; 2 / n=strlen(x) for(i=0;i<n/2;i+) t=xi; xi=xn-1-i; xn-1-i=t; return x;15. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f,从字符串中删除所有的数字字符。#include <stdio.h>#include <string.h>#include <ctype.h>void f(char *s) int i=0;while(si!='0') if(isdigit(si) 1 (s+i,s+i+1); / strcpy else 2 / i+ void main() char str80;gets(str); f(str); puts(str);16. 在考生目录下,有Modify.c程序,该程序中"_ N _"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输出61000之间的完数(1个数的因子和等于其自身的数:6=1+2+3、28=1+2+4+7+14,则6、28都是完数)。#include <stdio.h>void main() / 运行结果:6 28 496 int i,j,s; for(i=6;i<=1000;i+) 1 ; / s=0; for(j=1; 2 j+) / j<iif(i%j=0)s+=j; if(s=i) printf("%dn",s); (三)上机编程题 1. 程序设计题:考生目录下有Design.c程序,请完成以下功能:z=f(x,y)=(3.14*x-y)/(x+y),若x、y取值为区间1,6的整数,找出使z取最小值的x1、y1,并将x1、y1以格式"%d,%d"写入到考生目录下,新建文件design.dat。#include <stdio.h>void main() / 运行结果:x1=1, y1=6 FILE *p; float f(float x,float y),min; int x,y,x1,y1; /* 此处起要求考生自己编制程序 */min=100;if(p=fopen("design.dat","w")=NULL) printf("cannot open in FILEn"); exit(0); for(x=1;x<=6;x+) for(y=1;y<=6;y+) if(f(x,y)<min) min=f(x,y); x1=x; y1=y; fprintf(p, “%d,%d”,x1,y1);fclose(p);float f(float u,float v) return (3.14*u-v)/(u+v); 2. 程序设计题:函数root返回满足条件f(a)*f(b)<0的方程在a,b区间内的1个实根。在区间2,5、限差为0.00001。用区间对分法求解,将方程 x*x-5sin(x)-4=0的根以格式"%9.6f"写入到考生目录下新建的文件design.dat? #include <stdio.h>#include <math.h> / 运行结果:2.float g(float x) return x*x-5*sin(x)-4; float root(float a,float b,float eps,float(*f)(float) float c; while(c=(a+b)/2,fabs(f(c)>=eps&&fabs(b-