第三部分 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("%d\n",k);
}
2.
在考生目录下,有Modify.c程序,该程序中"/***** N
*****/"的下一行中有错误,
请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:运行时若输入a、n分别为3、6,则输出下列表达式的值:
3+33+333+3333+33333+333333
#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("%d\n",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) {
// n
s=s+n%10;
/********
2 ******/
n=n%10;
// n=n/10;
}
printf("%d\n",s);
}
4.
在考生目录下,有Modify.c程序,该程序中"/***** N
*****/"的下一行中有错误,
请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:输入1个字符串,输出其中所出现过的大写英文字母。如运行时
输入字符串"FONTNAME and FILENAME",应输出"F
O N T A M E I L"。
#include <stdio.h>
void main()
{ char
x[80],y[26]; int i,j,ny=0;
gets(x);
for(i=0;x[i]!='\0';i++)
if(x[i]>='A'&&x[i]<='Z')
{
for(j=0;j<ny;j++)
/*****
1 *****/
if(y[i]==x[j]) continue; // if(y[j]==x[i]) break;
if(j==ny)
{ y[ny]=x[i]; ny++; }
}
/*****
2 *****/
for(i=0;i<26;i++) // i<ny
printf("%c
",y[i]);
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("%f\n",s);
}
6. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下
一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
该程序功能:分别统计字符串中所有英文字母中的各元音字母个数。
#include
<stdio.h>
#include
<ctype.h>
void
main()
{ char a[80]; int
n[5]={0},i;
gets(a);
for(i=0; a[i]!=’\0’; i++)
/***** 1 *****/
switch(tolower(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;
/***** 2
*****/
case 'U': n[4]++; break; // ‘u’
}
for(i=0;i<5;i++)
printf("%d\n",n[i]);
}
7. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下
一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)
该程序功能:输入n(0<n<10)后,输出1个数字金字塔。如输入n为4,
则输出:
1
222
33333
4444444
#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,%f\n",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("%d\t",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("%d\n",&n); str=(char*)malloc(n); gets(str);
/***** 2 *****/
for(i=1;i<strlen(str);i++) // i=0
if(str[i]>='a'&& str[i]<='z') str[i]=str[i]-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("%d\n",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("%d\t",f(12345));
printf("%d\n",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("%d\n",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 ____"是根据程序功能需要填充