【真题1】 给定程序的功能是把s 串中所有的字母改写成该字母的下一个字母,字 母z 改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不 变。 例如:s 串中原有的字符串为:Mn.123Zxy,则调用该函数后,s 串中的内容为: No.123Ayz。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。 #include < string.h >#include < stdio.h >#include < ctype.h >#define N 81 fun ( char *s ) {/**************found**************/ char *p = ___1___ ; while(*p) { /**************found**************/ if(*p == 'Z') *p = ___2___ ; /**************found**************/ else if(*p == 'z') *p = ___3___ ; else if(isalpha(*p)) *p = (*p) + 1 ; p++ ; } } main( ) { char a[N]; 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 语言中的循环语句和条件判断语句的使用。 解题思路:从本题的要求来看,我们应该采用循环条件判断的算法。本参考函 数使用while循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z' 和其它字符进行不同的处理。 本评析仅供参考。 答案:【1】s 【2】'A' 【3】'a' 【真题2】 下列给定程序中,函数fun()的功能是:读入一个字符串(长度< 20), 将该字符串中的所有字符按ASCII码降序排序后输出。 例如:输入dafhc,则应输出hfdca。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include < conio.h >#include < stdio.h >/**********************found***********************/ int fun(char t[ ]) {char c; int i,j; for(i=0;i< strlen(t)-1;i++) for(j=i+1;j< strlen(t);j++) if(t[i]< t[j]) { c= t[j]; /**********************found***********************/ t[j]=t[i++]; t[i]=c; } } main() {char s[81]; clrscr(); printf("\nPlease enter a character string :"); gets(s); printf("\n\nBefore sorting :\n %s",s); fun(s); printf("\nAfter sorting decendingly:\n %s",s); } (2011年2月) 解析: (1)错误:int fun(char t[ ]) 正确:void fun(char t[ ]) (2)错误: t[j]=t[i++]; 正确:t[j]=t[i]; 错误1:该函数只是对一个字符串中的元素进行比较大小的操作,并没有具体的 返回值,因此,函数的返回值类型应为void。 错误2:本题的思路是利用选择法对数组元素进行比较。所谓选择法,是依次用 当前取得的元素和它后面的元素进行比较,在第一个元素和它后面的元素顺次 比较时,可以借助中间变量来对两数进行交换,要保证这第一个元素始终存放 数组中的最大数,以后依次挑出次大数,这样最终的数组就是有序的。解答本 题,只要理解了选择法的思想,找到并改正错误就很容易了。 【真题3】 请编写一个函数 int fun(int *s, int t, int *k),用来求出数组的最大元 素在数组中的下标, 用k 返回。 例如, 输入如下整数: 876 675 896 101 301 401 980 431 451 777 则输出结果为: 6, 980 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >int fun(int *s, int t, int *k) {……} main( ) { int a[10]={876,675,896,101,301,401,980,431,451,777}, k ; clrscr() ; fun(a, 10, &k) ; printf("%d, %d\n", k, a[k]) ; } (2011年2月) 解析: 本题的考核点是求数组中的最大元素在数组中的下标。 提示思路: 1、定义变量max_integer,用以存放数组s[]中的最大元素; 2、建立循环,查找出数组s[]中的最大元素; 3、将查找到的最大元素的下标赋给k,并传回主函数。 int fun(int *s, int t, int *k) { int max_integer=0; /*定义变量max_integer,用以存放数组s[]中的最 大元素*/ int i=0; max_integer = s[0]; /*假定第一个数组元素为最大*/ for(i=0; i< t; i=i+1){ /*建立循环,查找出数组s[]中的最大元素*/ /*将查找到的最大元素的下标赋给k,并传回主函数*/ if(max_integer< s[i]){ max_integer=s[i]; *k=i; } } } |