【真题1】 下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即 A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIs is a boot,则 应输出是1 0 2 2 0。 试题程序: #include < conio.h >#include < stdio.h >void fun(char *s,int num[5]) { int k, i=5; for(k=0;k< i;k++) num[k]=__1__; for(;*s;s++) { i=-1; switch(*s) { case 'a': case'A':{i=0;break;} case 'e ': case 'E':{i=1;break;} case 'i': case 'I':{i=2;break;} case 'o': case 'O':{i=3;break;} case 'u': case 'U':{i=4;__2__;} } if(i >=0) __3__; } } main() { char s1[81]; int num1[5], i; printf("\nPlease enter a string: ");gets(s1); fun(s1, num1); for(i=0;i< 5;i++) printf("%d ",num1[i]); printf("\n"); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是对数组的初始化,因为在后面的 计算中将要使用累加,所以每一个数组元素都应该初始化为0。 填空2:根据题目的意思,此处是switch语句中case的一部分,即需使用 break 结束。 switch 语句说明:switch后的表达式,可以是整型或字符型,也可以是枚举类 型的。在新的ANSI C 标准中允许表达式的类型为任何类型。每个case后的常 量表达式只能是常量组成的表达式,当switch 后的表达式的值与某一个常量表 达式的值一致时,程序就转到此case后的语句开始执行。如果没有一个常量表 达式的值与switch 后的值一致,就执行default后的语句。各个case后的常 量表达式的值必须互不相同,不然的话程序就不知该跳到何处开始执行。各个 case的次序不影响执行结果,一般情况下,尽量使用出现机率大的case放在 前面。在执行完一个case后面的语句后,程序流程转到下一个case后的语句 开始执行。千万不要理解成执行完一个case后程序就转到switch后的语句去 执行了。 填空3:由算法可以看出,此处是对于满足条件的数组元素进行赋值,即把对应 下标为i的数组元素累加1。 答案:【1】0 【2】break 【3】num[i]++ 【真题2】 给定程序modi.c 中函数 fun 的功能是:删除字符串s 中的所有空白字 符(包括Tab 字符、回车符及换行符)。 输入字符串时用'#'结束输入。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动main 函数, #include < string.h >#include < stdio.h >#include < ctype.h >fun ( char *p) { int i,t; char c[80]; /************found************/ For (i = 0,t = 0; p[i] ; i++) if(!isspace(*(p+i))) c[t++]=p[i]; /************found************/ c[t]="\0"; strcpy(p,c); } main( ) { char c,s[80]; int i=0; printf("Input a string:"); c=getchar(); while(c!='#') { s[i]=c;i++;c=getchar(); } s[i]='\0'; fun(s); puts(s); } (2011年2月) 解析: 本题着重考察考生对C 语言中的语法以及一些简单算法的掌握情况。 C 语言中,大小写的字母含意不同。源程序中"For (i=0,t=0;p[i];i++)"是错 误的,"For"应为小写,程序应改为"for (i=0,t=0;p[i];i++)"或相同作用的语 句。 C 语言中,一对双引号括起来的字符序列表示字符串常量,一对单引号括起来的 表示字符常量。转义字符'\0'作为字符串常量的结束标志。源程序"c[t]="\0";" 是错误的,应改为"c[t]='\0';"。 【真题3】 请编写一个函数,用来删除字符串中的所有空格。 例如,输入"asd af aa z67", 则输出为 "asdafaaz67"。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容, 仅在函数fun 的花括号中填入你 编写的若干语句。 程序如下: #include< stdio.h >int fun(char *str) {……} main() {char s[80]; printf(“input a string:\n”); gets(s); fun(s); printf(“The result is:”); puts(s); } (2011年2月) 解析: 本题的考核点是字符数组、循环语句。 提示思路:通过for 循环语句以及if语句,判断当前位置上的字符是否为空格 (空格的ASCII码值为32),若是空格,再判断下一个字符是否为空格,若下 一个字符不是空格,则将当前位置上的字符赋给上一个字符位置上;若下一个 字符还是空格,则继续判断该字符的下一个字符,直至其下一个字符为非空格 时重复上述赋值操作,最终以字符串结束标志"\0"结束循环。 int fun(char *str) {int i,j; for(i=0;*(str+i);i++) if(*(str+i)==32) /*判断当前位置上的字符是否为空格(空格的ASCII码值 为32)*/ { for(j=i+1;*(str+j);j++) *(str+j-1)=*(str+j); /*删除空格*/ *(str+j-1)= '\0'; /*以字符串结束标志"\0"结束循环*/ i=0; } } |