计算机二级C语言上机真题(19)【附详解】
【真题1】 给定程序的功能是把s 串中所有的字符前移一个位置,串中的第一个字
符移到最后。 例如:s 串中原有的字符串为:Mn.123xyZ,则调用该函数后,s 串
中的内容为:n.123xyZM。
#include < stdio.h >
#define N 81
fun ( char *s )
{ char b[N] ;
fprintf(b, "%s%c", s + 1, *s) ;
/**************found**************/
strcpy(___1___) ;
}
main( )
{ char a[ N ] ;
printf ( "Enter a string : " ); gets ( a );
printf ( "The original string is : " ); puts( a );
/**************found**************/
fun ( ___2___ );
printf ( "The string after modified : ");
/**************found**************/
___3___ ( a );
}
(2011年2月)
解析: 本题的考核点是c 语言中循环语句的使用。
提示思路:先保存原字符串的第一个字符,然后将后面的字符依次向前移一
位,最后将原字符串的第一个字符添加到新字符串的最后。
答案:【1】a 【2】s,b 【3】puts
【真题2】 给定程序modi.c 功能是:读入一个英文文本行,将其中每个单词的第一
个字母改成大写,然后输出此文本行(这里的"单词"是指由空格隔开的字符串)。
例如,若输入:I am a student to take the examination., 则应输出:I Am A
Student To Take The Examination.。 请改正程序中的错误,使它能得出正确结
果。 注意:不要改动main 函数,
#include < ctype.h >
#include < string.h >
/************found************/
include (stdio.a)
/************found************/
upfst (char p)
{ int k=0;
for ( ;*p;p++)
if (k)
{ if (*p==' ') k=0;}
else if (*p!=' ')
{ k=1; *p=toupper(*p);}
}
main()
{ char chrstr[81];
clrscr();
printf("\nPlease enter an English test line:");
gets(chrstr);
printf("\n\nBefore changing:\n %s",chrstr);
upfst(chrstr);
printf("\nAfter changing:\n %s\n",chrstr);
}
(2011年2月)
解析: 本题的考核点是C语言中函数入口参数的使用和文件包含的用法。
C 语言提供了#include命令用来实现"文件包含"的操作。其一般形式为
#include "文件名" 所以,"include "stdio.h" "include前不加"#"是错误
的,应改为"#include "stdio.h" "它的圆括号应改为尖括号或双引号,
"stdio.a"应改为"stdio.h"或相同作用的语句。
从主函数中可以看出,p是一个字符串,因此在upfst函数的参数表中应将p
改为字符指针或字符数组,即把"upfst(char p )"语句改为"upfst(char *p )"
或相同作用的语句。
【真题3】 编写一个函数void fun ( char *s ),函数的功能是把字符串s 中的所
有字符前移一个位置,串中的第一个字符移到最后。 例如:s 串中原来的字符串
为:"Mn.123xyZ",则调用该函数后,s 串中的内容为:"n.123xyZM"。 注意:部
分源程序保存在文件prog.c中。 请勿改动主函数main 和其它函数中的任何内容,
仅在函数fun 的花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
#define N 81
void fun ( char *s )
{……}
main( )
{ char a[ N ] ;
clrscr( );
printf ( "Enter a string : " ); gets ( a );
printf ( "The original string is : " ); puts( a );
fun ( a );
printf ( "The string after modified : ");
puts ( a );
}
(2011年2月)
解析: 本题的考核点是c 语言中循环语句的使用。
解题思路:先保存原字符串的第一个字符,然后将后面的字符依次向前移一
位,最后将原字符串的第一个字符添加到新字符串的最后。
解法一:
void fun ( char *s )
{int i, length;
char tmp;
length = strlen( s ); /*通过strlen 函数求字符数组s 的长度*/
if (length == 0) return; /*如果字符串长度为0,则不进行任何处理,直接
返回主函数*/
tmp = s[0]; /*变量tmp用于保存原字符串的第一个字符*/
for (i = 0;i < length - 1; i++)
s[i] = s[i + 1]; /*将字符串s中的除首字符以外的所有字符前移一个位置*/
s[length - 1] = tmp; /*将原字符串的第一个字符添加到新字符串的最后*/
}
解法二:
/* 注:该题要先将字符串的头元素存到某一变量(用tmp=*s)中,然后后面
的字符依向前移(用for()循环),要记得在串的未尾加一个结束符*/
fun(char *s)
{ char tmp=*s;
for(;*(s+1);s++)
*s=*(s+1);
*s=tmp;
*(s+1)='\0';
}
符移到最后。 例如:s 串中原有的字符串为:Mn.123xyZ,则调用该函数后,s 串
中的内容为:n.123xyZM。
#include < stdio.h >
#define N 81
fun ( char *s )
{ char b[N] ;
fprintf(b, "%s%c", s + 1, *s) ;
/**************found**************/
strcpy(___1___) ;
}
main( )
{ char a[ N ] ;
printf ( "Enter a string : " ); gets ( a );
printf ( "The original string is : " ); puts( a );
/**************found**************/
fun ( ___2___ );
printf ( "The string after modified : ");
/**************found**************/
___3___ ( a );
}
(2011年2月)
解析: 本题的考核点是c 语言中循环语句的使用。
提示思路:先保存原字符串的第一个字符,然后将后面的字符依次向前移一
位,最后将原字符串的第一个字符添加到新字符串的最后。
答案:【1】a 【2】s,b 【3】puts
【真题2】 给定程序modi.c 功能是:读入一个英文文本行,将其中每个单词的第一
个字母改成大写,然后输出此文本行(这里的"单词"是指由空格隔开的字符串)。
例如,若输入:I am a student to take the examination., 则应输出:I Am A
Student To Take The Examination.。 请改正程序中的错误,使它能得出正确结
果。 注意:不要改动main 函数,
#include < ctype.h >
#include < string.h >
/************found************/
include (stdio.a)
/************found************/
upfst (char p)
{ int k=0;
for ( ;*p;p++)
if (k)
{ if (*p==' ') k=0;}
else if (*p!=' ')
{ k=1; *p=toupper(*p);}
}
main()
{ char chrstr[81];
clrscr();
printf("\nPlease enter an English test line:");
gets(chrstr);
printf("\n\nBefore changing:\n %s",chrstr);
upfst(chrstr);
printf("\nAfter changing:\n %s\n",chrstr);
}
(2011年2月)
解析: 本题的考核点是C语言中函数入口参数的使用和文件包含的用法。
C 语言提供了#include命令用来实现"文件包含"的操作。其一般形式为
#include "文件名" 所以,"include "stdio.h" "include前不加"#"是错误
的,应改为"#include "stdio.h" "它的圆括号应改为尖括号或双引号,
"stdio.a"应改为"stdio.h"或相同作用的语句。
从主函数中可以看出,p是一个字符串,因此在upfst函数的参数表中应将p
改为字符指针或字符数组,即把"upfst(char p )"语句改为"upfst(char *p )"
或相同作用的语句。
【真题3】 编写一个函数void fun ( char *s ),函数的功能是把字符串s 中的所
有字符前移一个位置,串中的第一个字符移到最后。 例如:s 串中原来的字符串
为:"Mn.123xyZ",则调用该函数后,s 串中的内容为:"n.123xyZM"。 注意:部
分源程序保存在文件prog.c中。 请勿改动主函数main 和其它函数中的任何内容,
仅在函数fun 的花括号中填入你编写的若干语句。
#include < conio.h >
#include < stdio.h >
#define N 81
void fun ( char *s )
{……}
main( )
{ char a[ N ] ;
clrscr( );
printf ( "Enter a string : " ); gets ( a );
printf ( "The original string is : " ); puts( a );
fun ( a );
printf ( "The string after modified : ");
puts ( a );
}
(2011年2月)
解析: 本题的考核点是c 语言中循环语句的使用。
解题思路:先保存原字符串的第一个字符,然后将后面的字符依次向前移一
位,最后将原字符串的第一个字符添加到新字符串的最后。
解法一:
void fun ( char *s )
{int i, length;
char tmp;
length = strlen( s ); /*通过strlen 函数求字符数组s 的长度*/
if (length == 0) return; /*如果字符串长度为0,则不进行任何处理,直接
返回主函数*/
tmp = s[0]; /*变量tmp用于保存原字符串的第一个字符*/
for (i = 0;i < length - 1; i++)
s[i] = s[i + 1]; /*将字符串s中的除首字符以外的所有字符前移一个位置*/
s[length - 1] = tmp; /*将原字符串的第一个字符添加到新字符串的最后*/
}
解法二:
/* 注:该题要先将字符串的头元素存到某一变量(用tmp=*s)中,然后后面
的字符依向前移(用for()循环),要记得在串的未尾加一个结束符*/
fun(char *s)
{ char tmp=*s;
for(;*(s+1);s++)
*s=*(s+1);
*s=tmp;
*(s+1)='\0';
}