【真题1】 函数fun 的功能是进行数字字符转换。若形参ch 中是数字字符'0'~ '9',则'0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它字符 则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的 内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的 BLANK1.C 中。不得增行或删行,也不得更改程序的结构! #include < stdio.h > /**********found**********/ ___【1】___ fun(char ch) { /**********found**********/ if (ch>='0' && ___【2】___) /**********found**********/ return '9' - (ch - ___【3】___ ); return ch; } main() { char c1, c2; printf("\nThe result :\n"); c1='2'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='8'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); c1='a'; c2 = fun(c1); printf("c1=%c c2=%c\n", c1, c2); } 解析: 由主函数中的语句"c2=fun(c1);"可知:函数fun 的返回类型为字符, 故第一个空应填char;在题面中要求对数字字符进行转换,故第二空的目的是 判断字符ch 是否为一数字字符,即ch 是否在'0'~'9'之间所以第二个空应填 ch<='9'或其等效形式;第三空处语句的目的是返回转换后的结果,即返回一字 符,其所对应的数字与转换前字符所对应的数字的和为9,故第三空应填'0'或 其等效形式。 答案:【1】char 【2】ch<='9' 【3】'0' 【真题2】 给定程序modi.c 中函数fun的功能是:首先将大写字母转换为对应小 写字母;若小写字母为a~u,则将其转换为其后的第5 个字母;若小写字母为v~ z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转 换为小写字母f;若形参是字母W,则转换为小写字母b。 请改正函数fun 中指定 部位的错误,使它能得出正确的结果。 注意:不要改动main 函数,不得增行或 删行,也不得更改程序的结构! #include < stdio.h > #include < ctype.h > char fun(char c) { if(c>='A' && c<='Z') /**************found**************/ c=c-32; if(c>='a' && c<='u') /**************found**************/ c=c-5; else if(c>='v' && c<='z') c=c-21; return c; } main() { char c1, c2; printf("\nEnter a letter(A-Z): "); c1=getchar(); if(isupper(c1)) { c2=fun(c1); printf("\n\nThe letter '%c' change to '%c'\n", c1,c2); } else printf("\nEnter (A-Z)!\n"); } (2011年2月) 解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。 提示思路:先判断输入的字母是否是大写字母,若是大写字母,将其转化为 相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字 母的ASCII码值,再判断该小写字母是否是a~u,若是转化其后的第5 个字 母,即c=c+5;。若该小写字母是v~z,则将其ACSII码值减去21,转换后 的小写字母作为函数值返回。 本题中的第一个错误:C 语言中,大写字母的ASCII码值比相应的小写字母 的ASCII码值小32,所以程序中语句"c=c-32;"应改为"c=c+32;"或相同作 用的语句。 本题中的第二个错误:C 语言中,字母从a~z 或A~Z 的ASCII码值是依次递 增的,所以将其转换为其后的第5 个字母应该是"c=c+5;"或相同作用的语句。 【真题3】 请编写一个函数fun(char *s),函数的功能是把字符串中所有的字母改 写在该字母的下一个字母,最后一个字母z 改写成字母a。大写字母仍为大写字母, 小写字母仍为小写字母,其他的字符不变。 例如,原有的字符串为:Mn.123xyZ, 则调用该函数后,串中的内容为:No.123yzA。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填 入你编写的若干语句。 #include < conio.h > #include < string.h > #include < stdio.h > #include < ctype.h > #define N 81 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语言中的循环语句和条件判断语句的使用。 提示 思路:从本题的要求来看,我们应该采用外循环内条件判断的算法。本参考函 数使用for 循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和 其它字符进行不同的处理。 fun (char *s) { int i, length; length = strlen(s);/*求得字符串s 的长度*/ for(i = 0; i<length; i++) { if(!((s[i] >='a' && s[i]< ='z') || (s[i]>='A' && s[i]<='Z'))) /*判断字符s[i]是否为大小写的英文字母*/ continue; switch(s[i]){ case 'z':/*假如s[i]为小写字母z,则改写成小写字母a*/ s[i] = 'a'; break; case 'Z':/*假如s[i]为大写字母Z,则改写成大写字母A*/ s[i] = 'A'; break; default: /*假如s[i]为除大小写字母Z 和z 以外字母,则直接改写成该 字母的下一个字母*/ s[i] = s[i] + 1; break; } } } |