计算机二级C语言上机真题(24)【附详解】
【真题1】 给定程序的功能是分别统计字符串中大写字母和小写字母的个数。
例如,给字符串ss输入:AaaaBBb123CCccccd,
则输出结果应为:upper = 5,lower = 9
#include < stdio.h >void fun ( char *s, int *a, int *b )
{while ( *s )
{ if ( *s >= 'A' && *s < = 'Z' )
/**********found**********/
___1___ ;
if ( *s >= 'a' && *s < = 'z' )
/**********found**********/
___2___ ;
s++;
}
}
main( )
{ char s[100]; int upper = 0, lower = 0 ;
printf( "\nPlease a string : " ); gets ( s );
fun ( s, & upper, &lower );
/**********found**********/
printf( "\n upper = %d lower = %d\n", ___3___ );
}
(2011年2月)
解析: 本题的考核点是C语言中输入输出函数及指针的使用。
题中第一个空填"(*a)++":程序中,a是一个整型指针,要使a指向的数据实
现递增,则要把指针改为实际数据。
同样道理,题中第二个空填" (*b)++ "或相同作用的语句。
题中第三个空填"upper, lower":根据题义要求输出统计的字符串中大写字母
和小写字母的个数。
答案:【1】(*a) ++ 【2】(*b)++ 【3】upper,lower
【真题2】 下列给定程序中,函数fun()的功能是将字符串s 中位于偶数位置的字符
或ASCII码为奇数的字符放入字符串t 中(规定第一个字符放在第0 位中)。
例如:字符串中的数据为ADFESHDI,则输出应当是AFESDI。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < conio.h >#include < stdio.h >#include < string.h >#define N
80
/**********************found***********************/
void fun(char s, char t[ ])
{ int i, j=0;
for(i=0; i< strlen(s);i++)
/**********************found***********************/
if(i%2=0||s[i]%2!=0)
t[j++]=s[i] ;
t[j]='\0';
}
main()
{
char s[N], t[N];
clrscr();
printf("\nPlease enter string s :");
gets(s);
fun(s,t);
printf("\nThe result is :%s\n",t);
}
(2011年2月)
解析: (1)错误: void fun(char s, char t[ ])
正确:void fun(char *s, char t[ ])
(2)错误: if(i%2=0||s[i]%2!=0)
正确:if(i%2==0||s[i]%2!=0)
错误1:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处
理,因此,函数的参数应为字符串指针。
错误2:if语句中要用关系运算符,而不是赋值运算符。
【真题3】 请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。
S=1-x+x2/2!-x3/3!+…+(-1*x)n/n!
例如,当n=15,x=0.5时,函数值为0.606531。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编
写的若干语句。
试题程序:
#include< conio.h >#include< stdio.h >#include< math.h >double
fun(double x, int n)
{……}
main()
{ clrscr();
printf("%f ",fun(0.5,15));
}
(2011年2月)
解析: double fun(double x, int n)
{ int i,j=1;
double s=1.0,s1=1.0;
for(i=1;i< =n;i++)
{
j=-1*j;
s1=s1*i; /*各项中的阶乘*/
s=s+j*pow(x,i)/s1; /*按公式求出*/
}
return s;
}
本程序中用s1 来表示每项的分母(即各项中的阶乘),要注意本程序中s和
s1 的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j
=-1*j来实现。
例如,给字符串ss输入:AaaaBBb123CCccccd,
则输出结果应为:upper = 5,lower = 9
#include < stdio.h >void fun ( char *s, int *a, int *b )
{while ( *s )
{ if ( *s >= 'A' && *s < = 'Z' )
/**********found**********/
___1___ ;
if ( *s >= 'a' && *s < = 'z' )
/**********found**********/
___2___ ;
s++;
}
}
main( )
{ char s[100]; int upper = 0, lower = 0 ;
printf( "\nPlease a string : " ); gets ( s );
fun ( s, & upper, &lower );
/**********found**********/
printf( "\n upper = %d lower = %d\n", ___3___ );
}
(2011年2月)
解析: 本题的考核点是C语言中输入输出函数及指针的使用。
题中第一个空填"(*a)++":程序中,a是一个整型指针,要使a指向的数据实
现递增,则要把指针改为实际数据。
同样道理,题中第二个空填" (*b)++ "或相同作用的语句。
题中第三个空填"upper, lower":根据题义要求输出统计的字符串中大写字母
和小写字母的个数。
答案:【1】(*a) ++ 【2】(*b)++ 【3】upper,lower
【真题2】 下列给定程序中,函数fun()的功能是将字符串s 中位于偶数位置的字符
或ASCII码为奇数的字符放入字符串t 中(规定第一个字符放在第0 位中)。
例如:字符串中的数据为ADFESHDI,则输出应当是AFESDI。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include < conio.h >#include < stdio.h >#include < string.h >#define N
80
/**********************found***********************/
void fun(char s, char t[ ])
{ int i, j=0;
for(i=0; i< strlen(s);i++)
/**********************found***********************/
if(i%2=0||s[i]%2!=0)
t[j++]=s[i] ;
t[j]='\0';
}
main()
{
char s[N], t[N];
clrscr();
printf("\nPlease enter string s :");
gets(s);
fun(s,t);
printf("\nThe result is :%s\n",t);
}
(2011年2月)
解析: (1)错误: void fun(char s, char t[ ])
正确:void fun(char *s, char t[ ])
(2)错误: if(i%2=0||s[i]%2!=0)
正确:if(i%2==0||s[i]%2!=0)
错误1:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处
理,因此,函数的参数应为字符串指针。
错误2:if语句中要用关系运算符,而不是赋值运算符。
【真题3】 请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。
S=1-x+x2/2!-x3/3!+…+(-1*x)n/n!
例如,当n=15,x=0.5时,函数值为0.606531。
注意:部分源程序给出如下。
请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编
写的若干语句。
试题程序:
#include< conio.h >#include< stdio.h >#include< math.h >double
fun(double x, int n)
{……}
main()
{ clrscr();
printf("%f ",fun(0.5,15));
}
(2011年2月)
解析: double fun(double x, int n)
{ int i,j=1;
double s=1.0,s1=1.0;
for(i=1;i< =n;i++)
{
j=-1*j;
s1=s1*i; /*各项中的阶乘*/
s=s+j*pow(x,i)/s1; /*按公式求出*/
}
return s;
}
本程序中用s1 来表示每项的分母(即各项中的阶乘),要注意本程序中s和
s1 的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j
=-1*j来实现。