浙江省计算机《C语言程序设计》考试上机模拟题.doc
浙江省计算机二级C程序设计上机模拟题第三部分 C程序设计上机模拟题(一) 上机修改题1.在考生目录下,有Modify.c程序,该程序中”/*N*/”的下一行中 有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。 该程序功能:输入m、n(要求输入数均大于0),输出它们的最小公倍数 /*findtheleasecommonmultipleofmandn*/ #include<stdio.h> voidmain() intm,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+333333#include<stdio.h>voidmain() inti,a,n,t=0; /*1*/s=0; /ints=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> voidmain() intn,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个字符串,输出其中所出现过的大写英文字母。如运行时输入字符串"FONTNAMEandFILENAME",应输出"FONTAMEIL"。 #include<stdio.h> voidmain() charx80,y26;inti,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>voidmain() floatx,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>voidmain() chara80;intn5=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 4444444#include<stdio.h>voidmain() inti,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> voidmain() floatx,max,min; /*1*/ for(inti=1;i<=10;i+) /C中不能这样用,改为:inti;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> voidmain() intn,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> voidmain() intn,i; /*1*/ charstr; / 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> voidmain() intm,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> intf(intn) intm,y=0; m=fabs(n); while(m!=0) y=y*10+m%10; 1 ; /m=m/10 if(n>=0)returny; else 2 ; / return(-y); voidmain() printf("%dt",f(12345); printf("%dn",f(-34567); 3. 在考生目录下,有Modify.c程序,该程序中"_N_"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入1个整数后,输出该数的位数若输入3214则输出4,输入-23156则输出5)。#include<stdio.h>voidmain() intn,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>voidmain() inti,j;chark; 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> voidmain() inti=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) voidmain() /运行结果:49.455978 inti;floatmax; _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> voidf(int*a,int*m) inti,j; for(i=0;i<*m;i+) if(ai<0) for(j=i-;j<*m-1;j+) aj=aj+1; _1_; / *m=*m-1; voidmain() inti,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> #definef(x1,y1,x2,y2)sqrt(pow(x2-x1,2)+pow(y2-y1,2) 1 /#include<malloc.h>或#include<stdlib.h> voidmain() float*x,*y,s=0;inti,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> floatf( 1 ) /float*x,intm,intn /运行结果:78.00 floaty=0;inti,j; for(i=0;i<m;i+)for(j=0;j<n;j+)y=y+*(*(x+i)+j); returny; voidmain() floata34=1,2,3,4,5,6,7,8,9,10,11,12,*b3; inti; 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> floatf(float*x,intn,intflag) / 运行结果:11 floaty;inti; 1 ; /y=x0 for(i=1;i<n;i+)if(flag*xi>flag*y)y=xi; returny; voidmain() floata6=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>floatf(float,float*,int); /运行结果:81.930756 voidmain() floatb5=1.1,2.2,3.3,4.4,5.5; printf("%fn",f(1.7,b,5); floatf( 1 ) /floatx,floata,intn floaty=a0,t=1;inti; for(i=1;i<n;i+)t=t*x; y=y+ai*t; 2 ; / returny 12. 在考生目录下,有Modify.c程序,该程序中"_N_"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f用以求1元2次方程x*x+5*x-2=0的实根。 #include<stdio.h> #include<math.h> /运行结果:0.37 -5.37 intf(floata,floatb,floatc,float*x1,float*x2) if(b*b-4*a*c<0) 1 ; /return1; *x1=(-b+sqrt(b*b-4*a*c)/2/a; *x2=(-b-sqrt(b*b-4*a*c)/2/a; return0; voidmain() floatu1,u2;floata=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>voidf(int*a,intn,intk) inti,j,t;for(i=0;i<k;i+) 1 ; / t=a0 for( 2 ) / j=1;j<n;j+aj-1=aj; an-1=t; voidmain() inti,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,将字符串中的所有字符逆序存放,然后输出。例如,输入字符串为"123456",则程序的输出结果为"654321"。#include<stdio.h>#include<string.h> voidmain() chars60,*f(char*);gets(s);printf("%sn",f(s); 1 f(char*x) /char* chart; inti,n; 2 /n=strlen(x) for(i=0;i<n/2;i+)t=xi; xi=xn-1-i; xn-1-i=t; returnx;15. 在考生目录下,有Modify.c程序,该程序中"_N_"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:调用函数f,从字符串中删除所有的数字字符。#include<stdio.h>#include<string.h>#include<ctype.h>voidf(char*s) inti=0;while(si!='0') if(isdigit(si) 1 (s+i,s+i+1); /strcpy else 2 / i+voidmain() charstr80;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>voidmain() /运行结果:6 28 496 inti,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>voidmain() /运行结果:x1=1,y1=6 FILE*p;floatf(floatx,floaty),min; intx,y,x1,y1; /*此处起要求考生自己编制程序*/min=100;if(p=fopen("design.dat","w")=NULL) printf("cannotopeninFILEn"); 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);floatf(floatu,floatv) 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>