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