计算机二级C语言上机真题(87)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:删除字符串s 中所有空白字符
(包括Tab 字符、回车符及换行符)。输入字符串时用"#"结束输入。
试题程序:
#include < string.h >#include < stdio.h >#include < ctype.h >fun(char
*p)
{ int i, t; char c[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i))) 1___;
c[t]='\0';
strcpy(p,c);
}
main()
{char c,s[80];
int i=0;
printf("Input a string: ");
c=getchar();
while(__2___)
{ s[i]=c;i++;c=getchar();}
___3___;
fun(s);
puts(s);
}
(2011年2月)
解析: 填空1:在这个循环中,要实现的是将空格去掉的功能。所以在判断语
句成立的情况下要对c[t++]赋值,c[t]是结果字符串数组,p[i]是原数组,如
果是空格那么p[i]向右移,c[t]不动。
填空2:根据题意本程序的目的是将字符串中的空格、回车、换行符删掉,在输
入字符串时的结束标志是′#′,注意一定不要写成′#′。
填空3:字符串要以′\0′结束,这是C语言的规定,在上面的循环输入结束后所
有的字符都是作为字符输入的,没有结束符。
答案:【1】c[t++]=p[i] 【2】c!= '#' 【3】s[i]= '\0'
【真题2】 下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下公式
的值。
A1=1,A2=1/(5+A1),A3=1/(5+A2),…,An=1/(5+A(n-1))
例如,若n=10,则应输出0.192582。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < conio.h >#include < stdio.h >float fun(int n)
{ /**********************found***********************/
int A=1;
int i;
/**********************found***********************/
for(i=1;i< =n;i++)
A=1.0/(5+A);
return A;
}
main()
{ int n;
clrscr();
printf("\nPlease enter n: ");
scanf("%d",&n);
printf("A%d=%lf\n",n,fun(n));
}
(2011年2月)
解析: (1)错误:int A=1; 正确:float A=1;
(2)错误:for(i=1;i< =n;i++) 正确:for(i=2;i< =n;i++)
错误1:A为实型数,应定义为float类型。
错误2:由题意,A1=1,从A2开始,An=1/(5+A(n-1)),所以循环应从2
开始。
【真题3】 请编写一个函数fun(),它的功能是:求出1 到m(含m)之内能被7 或
11 整除的所有整数放在数组a中,通过n 返回这些数的个数。
例如,若传给m的值为50,则程序输出:
7 11 14 21 22 28 33 35 42 44 49
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编
写的若干语句。
试题程序:
#include< conio.h >#include< stdio.h >#define M 100
void fun(int m, int *a, int *n)
{ ……}
main()
{ int aa[M],n,k;
clrscr();
fun(50,aa,&n);
for(k=0;k< n;k++)
if((k+1)%20==0) /*每行输出20 个数*/
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");
}
(2011年2月)
解析: void fun(int m, int *a, int *n)
{ int i,j=0;
for(i=1;i< =m;i++)
if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7 或11 整除的所
有整数放在数组a中*/
a[j++]=i;
*n=j; /*返回这些数的个数*/
}
本题要找出能被7 或11 整除的所有整数,注意数学中的"或"和C语言中的"或"
的区别,但在此处,if条件语句中用了"||"运算符,若要找能同时被7 和11 整
除的所有整数则在if()中应用"&&"运算符。
(包括Tab 字符、回车符及换行符)。输入字符串时用"#"结束输入。
试题程序:
#include < string.h >#include < stdio.h >#include < ctype.h >fun(char
*p)
{ int i, t; char c[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i))) 1___;
c[t]='\0';
strcpy(p,c);
}
main()
{char c,s[80];
int i=0;
printf("Input a string: ");
c=getchar();
while(__2___)
{ s[i]=c;i++;c=getchar();}
___3___;
fun(s);
puts(s);
}
(2011年2月)
解析: 填空1:在这个循环中,要实现的是将空格去掉的功能。所以在判断语
句成立的情况下要对c[t++]赋值,c[t]是结果字符串数组,p[i]是原数组,如
果是空格那么p[i]向右移,c[t]不动。
填空2:根据题意本程序的目的是将字符串中的空格、回车、换行符删掉,在输
入字符串时的结束标志是′#′,注意一定不要写成′#′。
填空3:字符串要以′\0′结束,这是C语言的规定,在上面的循环输入结束后所
有的字符都是作为字符输入的,没有结束符。
答案:【1】c[t++]=p[i] 【2】c!= '#' 【3】s[i]= '\0'
【真题2】 下列给定程序中,函数fun()的功能是:根据整型形参n,计算如下公式
的值。
A1=1,A2=1/(5+A1),A3=1/(5+A2),…,An=1/(5+A(n-1))
例如,若n=10,则应输出0.192582。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < conio.h >#include < stdio.h >float fun(int n)
{ /**********************found***********************/
int A=1;
int i;
/**********************found***********************/
for(i=1;i< =n;i++)
A=1.0/(5+A);
return A;
}
main()
{ int n;
clrscr();
printf("\nPlease enter n: ");
scanf("%d",&n);
printf("A%d=%lf\n",n,fun(n));
}
(2011年2月)
解析: (1)错误:int A=1; 正确:float A=1;
(2)错误:for(i=1;i< =n;i++) 正确:for(i=2;i< =n;i++)
错误1:A为实型数,应定义为float类型。
错误2:由题意,A1=1,从A2开始,An=1/(5+A(n-1)),所以循环应从2
开始。
【真题3】 请编写一个函数fun(),它的功能是:求出1 到m(含m)之内能被7 或
11 整除的所有整数放在数组a中,通过n 返回这些数的个数。
例如,若传给m的值为50,则程序输出:
7 11 14 21 22 28 33 35 42 44 49
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编
写的若干语句。
试题程序:
#include< conio.h >#include< stdio.h >#define M 100
void fun(int m, int *a, int *n)
{ ……}
main()
{ int aa[M],n,k;
clrscr();
fun(50,aa,&n);
for(k=0;k< n;k++)
if((k+1)%20==0) /*每行输出20 个数*/
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");
}
(2011年2月)
解析: void fun(int m, int *a, int *n)
{ int i,j=0;
for(i=1;i< =m;i++)
if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7 或11 整除的所
有整数放在数组a中*/
a[j++]=i;
*n=j; /*返回这些数的个数*/
}
本题要找出能被7 或11 整除的所有整数,注意数学中的"或"和C语言中的"或"
的区别,但在此处,if条件语句中用了"||"运算符,若要找能同时被7 和11 整
除的所有整数则在if()中应用"&&"运算符。