浙江省计算机二级考试
C程序设计上机(大部分)模拟题及答案
(一)
修改和填充题
1. 在考生目录下,有Modify.c程序,该程序中””的下一行中
有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入m、n(要求输入数均大于0),输出它们的最小公倍数
#include
void main()
{ int m,n,k;
while(scanf("%d%d",&m,&n),m<0&&n<0); // m<0|| n<0
for(k=m;k%n!=0;)
k=k+m%n; //
k=k+m
printf("%dn",k);
}
2. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。
#include
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
printf("%dn",k);
}
3. 在考生目录下,有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
float f(float, float *, int);
void main( )
{ float b[5]={1.1,2.2,3.3,4.4,5.5};
printf("%fn",f
(1.7,b,5)); // 答案:81.930756
}
float
f(1
) //float f( float x , float a[ ], int
n)
{ float
y=a[0],t=1; int i;
for(i=1;i
2
; // return
y
}
4. 在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要
填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f, 求a数组中最大值与b数组中最小值之差。
#include
float f(float *x, int n, int flag)
{ float y; int i;
1//
y=x[0] ;
for(i=1;iflag*y) y=x[i];
return y;
}
void main()
{ float
a[6]={3,5,9,4,2.5,1}, b[5]={3,-2,6,9,1};
printf("%.2fn",f(a,6,1)2
);
// printf("%.2fn",f(a,6,1)- f(b,5,-1)); // 答案:11
}
5. 在考生目录下,有Modify.c程序,该程序中””的下一行中有错误,
请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
程序功能:分别统计字符串中所有英文字母中的各元音字母的个数。
#include
#include
void main()
{ char a[80];
int n[5]={0},i;
gets(a);
for(i=0;a[i]!=' ';i++)
switch(toupper(a[i])
{ // switch(tolower(a[i]))
case
'a' : n[0]++;break;
case
'e' : n[1]++;break;
case
'i' : n[2]++;break;
case
'o' : n[3]++;break;
case
'U' :
n[4]++; // case 'u' : n[4]++;
}
for(i=0;i<5;i++) printf("%dn",n[i]);
}
6. 在考生目录下,有Modify.c程序,该程序中””的下一行中有错误,
请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
程序功能:输入n(0
1
222
33333
4444444
#include
void
main()
{
int
i,j,n;
scanf("%d",
n); // scanf("%d",&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));
putchar(n); // putchar(‘n’);
}
}
7. 在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f, 将字符串中的所有字符逆序存放,然后输出。例如,
输入字符串为“123456”,则程序的输出结果为“654321”。
#include
#include
void main()
{ char s[60],
*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
return
x;
}
8. 在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f,求二维数组a中所有元素之和。
#include
float f( 1
) // float **x, int m, int
n
{ float y=0 ;
int i,j;
for(i=0;i
for(j=0;j
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]=
2
;
// &a[i][0]
或a[0]
printf(“%.2fn”,f(b,3,4)); // 答案:78.00
}
9.
在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入一个字符串,输出其中所出现过的大写英文字母。如运行时输入
字符串”FONTNAME and FILENAME”,应输出 ”FONTAMEIL”.
#include
void main( )
{ char x[80],y[26]; int i,j,ny=0;
gets(x);
for(i=0;x[i]!=’ ’;i++)
if(x[i]>=’A’&&x[i]<=’Z’)
{
for(j=0;j
if(y[i]==x[j]) break; // y[j]==x[i]
if(j==ny) {
y[ny]=x[i] ;ny++;}
}
for(i=0;i<26;i++) // i
printf(“%c”,y[i]);
printf(“n”);
}
10.
在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)
该程序功能:输入一个整数后,输出该数的位数。若输入3214,则输出4,输入
-23156,则输出5。
#include
void main( )
{ int
n,k=0;
scanf(“%d”,&n);
while(1 )
{ // n%10
k++;
2 ; // n=n/10;
}
printf(“%dn”,k);
}
11.
在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)
该程序功能:运行时输出下列结果。
abcdefg
abcde
abc
a
#include
void main( )
{ int
i,j; char k;
for(i=1;i<=4;i++)
{
for(j=1;j
1
; // k=’a’;
for(j=9-2*i;j>0;j--) {
k=(char)k++;
printf(“%c”,2
); // k-1
}
putchar(‘n’);
}
}
12. 在考生目录下,有Modify.c程序,该程序中””的下一行中有错误,
请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能: 运行时若输入a,n分别为3,6,则输出下列表达式的值。
3+33+333+3333+33333+333333
#include
void main( )
{ int
i,a,n,t=0;
s=0; // int s=0;
scanf(“%d%d”,&a,&n);
for(i=1;i<=n;i++) {
t=t*10+i; // t=t*10+1;
s=s+t;
}
s=s*a;
printf(“%dn”,s);
}
13. 在考生目录下,有Modify.c程序,该程序中””的下一行中有错误,
请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能: 运行时输入n,输出n各位数字之和。(如n=1308, 则输出12,
n=-3204, 则输出9).
#include
#include
void main( )
{ int n,s=0;
scanf(“%d”,&n);
n=fabs(n);
while( n>1)
{ // n 或 n>=1
s=s+n%10;
n=n%10; // n=n/10;
}
printf(“%d”,s);
}
14. 在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)
该程序功能:
输入n 和平面上n个点的坐标,计算各点间距离的总和。
#include
#include
#define f(x1,y1,x2,y2) sqrt(pow(x2-x1,2)+pow(y2-y1,2))
1
// #include 或
#include
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
x+i,y+i);
for(i=0;i
for(j=i+1;j
s+=f(x[i],y[i],x[j],y[j]);
printf(“%.2fn”, s);
}
15.
在考生目录下,有Modify.c程序,该程序中”___N_____”是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)
该程序功能:函数f将一个整数首尾倒置,程序输出结果应为"54321 -76543"。
#include
#include
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));}
16. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充部
分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f用以求一元二次方程 x*x+5*x-2=0 的实根。
#include
#include
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(2
)
printf("实数范围内无解n"); // f(a,b,c,&u1,&u2)
else
printf("%.2f %.2fn",u1,u2);
} //
答案:0.37 -5.37
17. 在考生目录下,有Modify.c程序,该程序中""的下一行中有错误, 请
改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入x、eps,计算多项式1-x+x*x/2!-x*x*x/3!+...的和直到末项的
绝对值小于eps为止。
# include
#include
void main( )
{ float x,eps,s=1,t=1,i=1;
scanf("%f%f",&x,&eps);
do{
t
= -t * x /
++i;
// t = -t * x/ i++;
s += t;
}while( fabs(t ) >=
eps)// 少 ;
printf("%fn",s);
}
18. 在考生目录下,有Modify2.c程序,该程序中"____ N ____"是根据程序功能需要填充
部 分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:函数f将数组循环左移k个元素,输出结果为:4 5 6 7 1 2 3
#include
void
f(int *a,int n,int k)
{ int i,j,t;
for(i=0;i
{ 1
; // t=a[0];
for(2
)
// j=1;j
a[j-1]=a[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");
}
19. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:调用函数f,从字符串中删除所有的数字字符。
#include
#include
#include
void f(char *s)
{ int i=0;
while(s[i]!=' ')
if(isdigit(s[i]))
1
(s+i,s+i+1); // strcpy
else 2
; // i++;
}
void
main()
{ char str[80];
gets(str);
f(str);
puts(str);
}
20. 程序修改题:在考生目录下,有Modify.c程序,该程序中"____ 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++) {
1
; // s=0;
for(j=1;2
;j++) if(i%j==0)
s+=j; // j
if(s==i)
printf("%dn",s); //
答案:6 28 496
}
}
*********以下题目是2003年秋考新增加的程序修改题!***********
21.
程序修改题:在考生目录下,有Modify.c程序,该程序中""的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:运行时输入n,输出n的所有质数因子(如n=13860,则输出2、2、3、3、5、
7、11)。
#include
void main( )
{ int n,i;
scanf("%d",&n);
i=1; // i=2;
while(n>1)
if(n%i==0)
{ printf("%dt",i); n/=i; }
else
n--; // i++;
}
22.
程序修改题:在考生目录下,有Modify.c程序,该程序中“”的下一行中有错误,请改正(注意:不得加行、减//行、加句、减句,否则后果自负)。
该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。
#include
#include
#include
void main()
{ int n,i;
char
str; // *str
scanf("%dn",&n); str=(char*)malloc(n); gets(str);
for(i=1;i
if(str[i]>='a'&&
str[i]<='z')
str[i]=(char)(str[i]-32); //这里(char)多余的,出题有误
puts(str);
}
23.在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入整数n(n>0)求m,使得2的m次方小于或等于n、2的m+1次方大于或等于n。
#include
void
main() // i 改为m考生较为好理解!出题的毛病
{ 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);
}
24.在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:对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() // i
改为 x 考生较为好理解!出题的毛病
{ 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); // 答案:49.455978
}
25. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充
部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:函数f去除数组中的负数,输出结果为:1 3 4 6
#include
void f(int *a,int
*m) //
题中说法有误:“函数f去除数组中的负数”,应改为:
// “函数 f 能去掉了数组中的负数”。
{ int i,j;
for(i=0;i
if(a[i]<0) {
for(j=i--;j
_____1_____; // *m=*m-1;
}
}
void main()
{ int
i,n=7,x[7]={1,-2,3,4,-5,6,-7};
_______2_______; // f(x,&n);
for(i=0;i
printf("n");
}
26. 程序修改题:在考生目录下,有Modify.c程序,该程序中""的下一行中
有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:运行时输入10个数,然后分别输出其中的最大值、最小值。
#include
void main()
{ float x,max,min;
for(i=1;i<=10;i++)
{ // for(int i=1; i<=10; i++)
这种写法C++允许,C不允许
scanf("%f",&x);
if(i =1) {
max=x;min=x;} // i==1
if(x>max) max=x;
if(x
}
printf("%f,%fn",max,min);
}