计算机二级C语言上机真题(26)【附详解】
【真题1】 下列给定程序中,函数fun()的作用是:将字符串tt 中的大写字母都改
为对应的小写字母,其他字符不变。例如,若输入"Ab,cD",则输出"ab,cd"。
试题程序:
#include < stdio.h >#include < string.h >#include < conio.h >char
____1__fun(char tt[])
{int i;
for(i=0;tt[i];i++)
{
if((tt[i] >='A')&&(tt[i]< = ____2___))
tt[i]+=32;
}
return(tt);
}
main()
{
char tt[81];
printf("\nPlease enter a string: ");
gets(tt);
printf("\nThe result string is: \n%s",fun(___3___));
}
(2011年2月)
解析: 填空1:由return语句可以看出,该函数的返回值类型是指向字符串的
指针,所以应该使用符号"*"。
填空2:从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的
ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准
是ASCII码值是否介于A和Z之间。
填空3:根据题目的意思这里应该调用函数fun 对字符串tt进行转换,所以应
该使用tt作为函数的参数。
答案:【1】* 【2】'Z' 【3】tt
【真题2】 文件MODI.C 中程序的功能是:统计一个英文句子中各小写的元音字母
出现的次数。 例如,若输入字符串: "I am glad when playing games",则应输
出:
a 4
e 2
i 1
o 0
u 0
注意:
请改正程序中的错误,使它能计算出正确的结果。
#include < conio.h >#include < stdio.h >int vv[26];
void Vs( char* s )
{ for( ; *s; s++ )
/************found**********/
switch( s );
{ case( 'a' ):
case( 'e' ):
case( 'i' ):
case( 'o' ):
case( 'u' ):
vv[ *s - 'a' ]++;
}
}
main()
{ char str[81], ww[6] = { "aeiou" };
int i;
clrscr();
printf( "\nPlease enter a string:\n" );
gets( str );
Vs( str );
/************found**********/
for( i = 0; i < 6; i++ )
printf( "\n%c == > %2d", ww[i], vv[ ww[i] - ww[0] ] );
getch();
}
(2011年2月)
解析: (1):错误:switch(s); 正确:switch(*s)
(2):错误:for(i=0;i< 6;i++) 正确:for(i=0;i< 5;i++)
【真题3】 编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数
值返回;n 通过形参传入。 1 1 1
S = 1 + ── + ─── + …… + ──────
1+2 1+2+3 1+2+3+…+n
例如:若n 的值为11 时,则函数值为:1.833333
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#include < string.h >float
fun(int n)
{……}
main()
{ int n;float s;
clrscr();
printf("\nPlease enter N:");scanf("%d",&n);
s=fun(n);
printf("the result is:%f\n",s);
}
(2011年2月)
解析: 解题思路:通过一变量来累计1 至n 的和值,再通过另一变量再累计分
式的和值。
本评析仅供参考。
float fun(int n)
{ int i;
float s=1.0,h=1;
for (i=2;i< =n;i++)
{ h=h+i;/*h 为每一分式的除数,i为前后相邻除数之间的增量*/
s=s+1.0/h;
}
return(s);
}
为对应的小写字母,其他字符不变。例如,若输入"Ab,cD",则输出"ab,cd"。
试题程序:
#include < stdio.h >#include < string.h >#include < conio.h >char
____1__fun(char tt[])
{int i;
for(i=0;tt[i];i++)
{
if((tt[i] >='A')&&(tt[i]< = ____2___))
tt[i]+=32;
}
return(tt);
}
main()
{
char tt[81];
printf("\nPlease enter a string: ");
gets(tt);
printf("\nThe result string is: \n%s",fun(___3___));
}
(2011年2月)
解析: 填空1:由return语句可以看出,该函数的返回值类型是指向字符串的
指针,所以应该使用符号"*"。
填空2:从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的
ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准
是ASCII码值是否介于A和Z之间。
填空3:根据题目的意思这里应该调用函数fun 对字符串tt进行转换,所以应
该使用tt作为函数的参数。
答案:【1】* 【2】'Z' 【3】tt
【真题2】 文件MODI.C 中程序的功能是:统计一个英文句子中各小写的元音字母
出现的次数。 例如,若输入字符串: "I am glad when playing games",则应输
出:
a 4
e 2
i 1
o 0
u 0
注意:
请改正程序中的错误,使它能计算出正确的结果。
#include < conio.h >#include < stdio.h >int vv[26];
void Vs( char* s )
{ for( ; *s; s++ )
/************found**********/
switch( s );
{ case( 'a' ):
case( 'e' ):
case( 'i' ):
case( 'o' ):
case( 'u' ):
vv[ *s - 'a' ]++;
}
}
main()
{ char str[81], ww[6] = { "aeiou" };
int i;
clrscr();
printf( "\nPlease enter a string:\n" );
gets( str );
Vs( str );
/************found**********/
for( i = 0; i < 6; i++ )
printf( "\n%c == > %2d", ww[i], vv[ ww[i] - ww[0] ] );
getch();
}
(2011年2月)
解析: (1):错误:switch(s); 正确:switch(*s)
(2):错误:for(i=0;i< 6;i++) 正确:for(i=0;i< 5;i++)
【真题3】 编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数
值返回;n 通过形参传入。 1 1 1
S = 1 + ── + ─── + …… + ──────
1+2 1+2+3 1+2+3+…+n
例如:若n 的值为11 时,则函数值为:1.833333
注意:部分源程序存在文件prog.c 中。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编
写的若干语句。
#include < conio.h >#include < stdio.h >#include < string.h >float
fun(int n)
{……}
main()
{ int n;float s;
clrscr();
printf("\nPlease enter N:");scanf("%d",&n);
s=fun(n);
printf("the result is:%f\n",s);
}
(2011年2月)
解析: 解题思路:通过一变量来累计1 至n 的和值,再通过另一变量再累计分
式的和值。
本评析仅供参考。
float fun(int n)
{ int i;
float s=1.0,h=1;
for (i=2;i< =n;i++)
{ h=h+i;/*h 为每一分式的除数,i为前后相邻除数之间的增量*/
s=s+1.0/h;
}
return(s);
}