计算机二级C语言上机真题(14)【附详解】
【真题1】 下列给定程序中,函数fun()的功能是:从字符串s 中,删除所有小写字
母’c’。 试题程序:
__1__< stdio.h >
void fun(char *s)
{int i, j;
for(i=j=0;__2__;i++)
if(s[i]!= 'c')
__3__;
s[j]='\0';
}
main()
{ char s[80];
printf("\nEnter a string: "); gets(s);
printf("The original string: "); puts(s);
fun(s);
printf("The string after deleted: ");
puts(s);
printf("\n\n ");
}
(2011年2月)
解析: 填空1:由我们对C语言的掌握和学习知道,这是程序对头文件的声
明,根据C语言的规定头文件要用关键字include来声明,并用"#"开始。
填空2:这里考查的是对循环结束语句的掌握和字符串的结束标志的理解,我们
知道字符串由'\0'作为结束标志,由题意知,i一直增加到字符串结束,因此循
环结束判断语句使用s[i]!= '\0'。
填空3:由本题选择条件if(s[i]!='c')可知,如果字符串中的字符不是"c",则
执行循环,根据题目的意思这句应该执行的是s[j++]=s[i],这里考查了自加
运算符的灵活使用。
答案:【1】#include 【2】s[i]!= '\0' 【3】s[j++]=s[i]
【真题2】 给定程序modi.c 中函数fun的功能是:求出在字符串中最后一次出现
的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未
找到,则函数值为NULL。 例如,当字符串中的内容为:"abcdabfabcdx",t 中的
内容为:"ab"时,输出结果应是:abcdx。 当字符串中的内容为:
"abcdabfabcdx",t 中的内容为:"abd"时,则程序输出未找到信息:Not
found!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main 函
数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
char *fun(char *s,char *t)
{
char *p,*r,*a;
/************found************/
a=Null;
while (*s)
{ p=s;r=t;
while (*r)
/************found************/
if(r==p) {r++;p++;}
else break;
if (*r=='\0') a=s;
s++;
}
return a;
}
main()
{
char s[100],t[100],*p;
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
printf("\nPlease enter substring t:");scanf("%s",t);
p=fun(s,t);
if(p) printf("\nThe result is: %s\n",p);
else printf("\nNot found !\n");
}
(2011年2月)
解析: 本题着重考察C 语言中指针的用法与基本概念。
C 语言中,给指针变量赋NULL值。例如,a=NULL;或a=0;或a='\0';都表
示为指针a赋了"空值"。
在源程序中,r 与p为指向指针的指针变量,它们各自存放的是指针变量的地
址,题意中要求引用这两个地址所指向的内容进行比较,所以须在地址前加上
*。源程序中的"if ( r == p ) { r++; p++; }"应改为
"if(*r==*p){r++;p++;}"或相同作用的语句。
【真题3】 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用
C 语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相
同,则返回第一个字符串。 例如,输入beijing shanghaiㄌ,函数将返回
beijing。 注意: 部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函
数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#include < stdio.h >
char *fun ( char *s, char *t)
{……}
main( )
{ char a[20],b[10],*p,*q;
int i;
printf("Input 1th string:") ;
gets( a);
printf("Input 2th string:") ;
gets( b);
printf("%s\n",fun (a, b ));
}
解析: 本题的考核点是指针、循环语句和条件语句的使用。
解题思路:先分别使用循环语句计算出各个字符串的长度,再对此长度进行比
较来确定返回值。
#include < stdio.h >
char *fun ( char *s, char *t)
{ int first=0,second=0;
char *p,*q;
p=s;
q=t;
while(*p++!='\0') /*使用循环语句计算出s字符串的长度*/
first++;
while(*q++!='\0') /*使用循环语句计算出t字符串的长度*/
second++;
if(first==second) /*对求出的s及t字符串的长度进行比较*/
return s;
else if (first< second)
return s;
else
return t;
}
母’c’。 试题程序:
__1__< stdio.h >
void fun(char *s)
{int i, j;
for(i=j=0;__2__;i++)
if(s[i]!= 'c')
__3__;
s[j]='\0';
}
main()
{ char s[80];
printf("\nEnter a string: "); gets(s);
printf("The original string: "); puts(s);
fun(s);
printf("The string after deleted: ");
puts(s);
printf("\n\n ");
}
(2011年2月)
解析: 填空1:由我们对C语言的掌握和学习知道,这是程序对头文件的声
明,根据C语言的规定头文件要用关键字include来声明,并用"#"开始。
填空2:这里考查的是对循环结束语句的掌握和字符串的结束标志的理解,我们
知道字符串由'\0'作为结束标志,由题意知,i一直增加到字符串结束,因此循
环结束判断语句使用s[i]!= '\0'。
填空3:由本题选择条件if(s[i]!='c')可知,如果字符串中的字符不是"c",则
执行循环,根据题目的意思这句应该执行的是s[j++]=s[i],这里考查了自加
运算符的灵活使用。
答案:【1】#include 【2】s[i]!= '\0' 【3】s[j++]=s[i]
【真题2】 给定程序modi.c 中函数fun的功能是:求出在字符串中最后一次出现
的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未
找到,则函数值为NULL。 例如,当字符串中的内容为:"abcdabfabcdx",t 中的
内容为:"ab"时,输出结果应是:abcdx。 当字符串中的内容为:
"abcdabfabcdx",t 中的内容为:"abd"时,则程序输出未找到信息:Not
found!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main 函
数,
#include < conio.h >
#include < stdio.h >
#include < string.h >
char *fun(char *s,char *t)
{
char *p,*r,*a;
/************found************/
a=Null;
while (*s)
{ p=s;r=t;
while (*r)
/************found************/
if(r==p) {r++;p++;}
else break;
if (*r=='\0') a=s;
s++;
}
return a;
}
main()
{
char s[100],t[100],*p;
clrscr();
printf("\nPlease enter string S:");scanf("%s",s);
printf("\nPlease enter substring t:");scanf("%s",t);
p=fun(s,t);
if(p) printf("\nThe result is: %s\n",p);
else printf("\nNot found !\n");
}
(2011年2月)
解析: 本题着重考察C 语言中指针的用法与基本概念。
C 语言中,给指针变量赋NULL值。例如,a=NULL;或a=0;或a='\0';都表
示为指针a赋了"空值"。
在源程序中,r 与p为指向指针的指针变量,它们各自存放的是指针变量的地
址,题意中要求引用这两个地址所指向的内容进行比较,所以须在地址前加上
*。源程序中的"if ( r == p ) { r++; p++; }"应改为
"if(*r==*p){r++;p++;}"或相同作用的语句。
【真题3】 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用
C 语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相
同,则返回第一个字符串。 例如,输入beijing shanghaiㄌ,函数将返回
beijing。 注意: 部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函
数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#include < stdio.h >
char *fun ( char *s, char *t)
{……}
main( )
{ char a[20],b[10],*p,*q;
int i;
printf("Input 1th string:") ;
gets( a);
printf("Input 2th string:") ;
gets( b);
printf("%s\n",fun (a, b ));
}
解析: 本题的考核点是指针、循环语句和条件语句的使用。
解题思路:先分别使用循环语句计算出各个字符串的长度,再对此长度进行比
较来确定返回值。
#include < stdio.h >
char *fun ( char *s, char *t)
{ int first=0,second=0;
char *p,*q;
p=s;
q=t;
while(*p++!='\0') /*使用循环语句计算出s字符串的长度*/
first++;
while(*q++!='\0') /*使用循环语句计算出t字符串的长度*/
second++;
if(first==second) /*对求出的s及t字符串的长度进行比较*/
return s;
else if (first< second)
return s;
else
return t;
}