【真题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'; } |