【真题1】 下列给定的程序中,fun()函数的功能是:将p 所指字符串中每个单词的 最后一个字母改成大写(这里的"单词"是指有空格隔开的字符串)。例如,若输入: I am a student to take the examination 则应输出:I aM A studenT tO takE thE examinatioN 试题程序: #include < conio.h > #include < ctype.h > #include < stdio.h > #include < string.h > void fun(char *p) { int k=0; for ( ;*p;p++) if (k) { if (*p==' ') { ____1_____; ___2____=toupper(*(p-1)); } } else k=1; } main() {char chrstr[64]; int d; printf("\nPlease enter an English sentence within 63 letters: "); gets(chrstr); d=strlen(chrstr); chrstr[d]=' '; chrstr[d+1]=0; printf("\nBofore changing:\n %s",chrstr); _____3____; printf("\nAfter changing:\n %s",chrstr); } (2011年2月) 解析: 填空1:根据题目的意思,这里应该是以变量k作为判断标志,如果标 志为1 并且当前指针指向空格就应该把标志返回0,以便下一次检测。 填空2:根据题目的意思,此处进行的是将p所指单词的最后一个字母改成大 写,但是此时p已经循环到了单词后面的那个空格,所以应该对p-1进行操 作。 填空3:由算法可以看出,这里应该是进行函数调用,根据前面的子函数定义可 以知道,参数是一个指向向字符串的指针,所以应该把数组的名字(也可以认 为是指向数组首地址的指针)作为参数。 答案:【1】k=0 【2】*(p-1) 【3】fun(chrstr) 【真题2】 给定程序modi.c 中,fun 函数的功能是:交换主函数中两个字符串中的 内容。例如:若a 所指字符串中的内容原为:123456,b 所指字符串中的内容原 为:abcde;程序运行后,a 所指字符串中为:abcde,b 所指字符串中则为: 123456。 请改正程序中的错误或在横线处填上适当的内容并把横线删除,使它能得 出正确结果。 注意:不要改动main 函数, #include < stdio.h > #define N 80 void fun(char *a,char *b) { char c[N];int i; for(i=0;a[i];i++) /************found************/ ___________; c[i]=0; for(i=0;b[i];i++) a[i]=b[i]; a[i]=0; for(i=0;c[i];i++) b[i]=c[i]; b[i]=0; } main() { char s1[N]="123456",s2[N]="abcde"; printf("s1=%s\n",s1); printf("s2=%s\n",s2); fun(s1,s2); printf("\nThe result:\n"); printf("s1=%s\n",s1); printf("s2=%s\n\n",s2); } (2011年2月) 解析: 本题的主要解题思路是:通过一维数组c 作为中转点,交换字符串a和 字符串b的内容,首先,将串a赋给c,再将串b赋给a,最后将c 赋给串b。 根据这个思路,很容易得出,在横线处应填上"c[i]=a[i];"或具有相同作用的语 句。 【真题3】 请编写一个函数fun,它的功能是:将ss 所指字符串中所有下标为奇数 位置上的字母转换成大写(若该位置上不是字母,则不转换)。 例如,若输入 “abc4EFG”,则应输出“aBc4EFG”。 注意:部分源程序存在文件prog.c 中。 请勿 改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的 若干语句。 #include < conio.h > #include < stdio.h > #include < string.h > void fun(char *ss) {……} main() { char tt[81]; clrscr(); printf("\nPlease enter an string within 80 characters:\n");gets(tt); printf("\n\nAfter changing,the string\n \"%s\"",tt); fun(tt); printf("\nbecomes\n \"%s\"\n",tt); } (2011年2月) 解析: 本题的考核点是指针、ASCII码、数组和循环语句。 解题思路:通过循环语句依次判断数组下标为奇数的元素是否为小写字母,如 果是则通过字符运算将其转换为大写字母。 本评析仅供参考。 void fun ( char *ss ) { int i,n=0; char *p; p=ss; while(*p++!='\0') /*判断是否到了字符串的末尾*/ n++; for(i=1;i< n;i+=2) if(ss[i] >='a' && ss[i]< ='z') /*判断该字符是否为小写字母*/ ss[i]=ss[i]-'a'+'A'; /*若上述条件成立,则将其转换为大写字母*/ } |