【真题1】 下列给定程序中,函数fun()的功能是:将s 所指字符串中的字母转换为 按字母序列的后续字母(但Z 转化为A,z 转化为a),其他字符不变。 试题程序: #include < stdio.h >#include < ctype.h >#include < conio.h >void fun(char *s) {while(__1__) { if(*s >='A'&&*s< ='Z'||*s >='a'&&*s< ='z') {if(*s=='Z') *s='A'; else if(*s=='z') *s='a'; else *s+=__2__; } __3__; } } main() { char s[80]; printf("\n Enter a string with length< 80:\n\n"); gets (s); printf("\n The string:\n\n"); puts(s); fun(s); printf("\n\n The Cords :\n\n"); puts(s); } (2011年2月) 解析: 填空1:从C 语言的学习中我们知道,while语句的结束条件是括号中 的式子结果为0,而一个字符串的结尾标志为'\0',即满足循环的结束条件,所 以一般情况下C 语言中使用字符串的结尾作为结束循环的标志;s为指向一个数 组的指针,*s 为取出s指向的内容。 填空2:根据题目的意思,若该字母不是'z'或'Z',则该字母的ASCII码值加 1。 填空3:根据题目的意思,要对字符串所有字母进行遍历,使用指针进行这一过 程应该使用循环,即每次都对该指针进行加一操作。 答案:【1】*s 【2】1 【3】s++ 【真题2】 下列给定程序中,函数fun()的功能是:从字符串s 中,删除所有大写字 母'F'。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include < stdio.h >void fun(char *s) {int i, j; /**********************found***********************/ for(i=j=0; s[i]!= '0';i++) if(s[i]!= 'F') /**********************found***********************/ s[j]=s[i]; 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)错误:for(i=j=0; s[i]!= '0';i++) 正确:for(i=j=0; s[i]!= '\0';i++) (2)错误:s[j]=s[i]; 正确:s[j++]=s[i]; 错误1:本题考查是否掌握字符串的最后一个字符是结束标志符'\0 '。 错误2:在循环中,新字符串的下标也要递增,这样最终产生一个新的字符串。 【真题3】 要求程序的功能是:把20 个随机数存入一个数组,然后输出该数组中的 最小值。其中确定最小值的下标的操作在fun 函数中实现,请给出该函数的定义。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < stdio.h >#include < conio.h >#define VSIZE 20 int vector[VSIZE]; int fun(int list[],int size) {……} main() { int i; clrscr(); for (i=0;i< VSIZE;i++) { vector[i]=rand(); printf("Vector[%d]=%6d\n",i,vector[i]); } i=fun(vector,VSIZE); printf("\nMininum:Vector[%d]=%6d\n",i,vector[i]); } (2011年2月) 解析: 本题的考核点是在组数中找出最小数及其下标算法。 提示思路:通过一个循环来实现,方法是:将下标0赋给一个变量,如在循环 中有比变量下标所对应的数还要小,那么就将这个数的下标赋给变量,直至找 到最小数的下标。 int fun(int list[],int size) { int x,i; x=0; for (i=1;i< size;i++) if (list[x] >list[i]) x=i;/*从前到后顺序比较list数组中的数,并将每次比较 过程中较小的那个数的下标赋值给x*/ return x; } |