1、二级 C语言机试-134 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是判断一个数是否为回文数。当字符串是回文时,函数返回字符申:yes!,否则函数返回字符串:no!,并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如:abcba。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includestring.h#includestdio.hchar *fun(char*str)char *p1,*p2;i
2、nt i, t=0;p1=str;p2=str+strlen(str)-1;for (i=0; 【1】 ;i+)if( 【2】 )t=1;break;if ( 【3】 )return(“yes!“);elsereturn(“no!“);main()char str50;printf(“Input;“);scanf(“%s“,str);printf(“%s/n“,fun(str);(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定的程序中,函数 fun()的功能是:判断字符 ch是否与 str所指字符串中的某个字符相同;若相同,则什么也不做,若相同,则将其插
3、在申的最后。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h#include string.h/*found*/void fun (char str,char ch)while (*str /*found*/if(*str=ch)str0=ch;/*found*/str1=0;main()char s81,c;clrscr();printf(“/nPlease enter a strzng : “);gets(s);printf(“/n Please ente
4、r the character tosearch : “);c=getchar();fun(s,c);printf(“/nThe result is %s/n“,s);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.printf(“The sum is : %lf/n “,s);(分数:40.00)_二级 C语言机试-134 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是判断一个数是否为回文数。当字符串是回文时,函数返回字符申:yes!,否则函数返回字符串:no!,并在主函
5、数中输出。所谓回文即正向与反向的拼写都一样,例如:abcba。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includestring.h#includestdio.hchar *fun(char*str)char *p1,*p2;int i, t=0;p1=str;p2=str+strlen(str)-1;for (i=0; 【1】 ;i+)if( 【2】 )t=1;break;if ( 【3】 )return(“yes!“);elsereturn(“no!“);main()char str50
6、;printf(“Input;“);scanf(“%s“,str);printf(“%s/n“,fun(str);(分数:30.00)填空项 1:_ (正确答案:1 i=strlen(sb)/2 或 istrlen(sw)/2 2 *p1+!=*p2- 3 t=20)解析:解析 填空 1:判断回文数就是将第一个字符与最后个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都是相同,则这个字符串就是回文数,否则不是。所以比较的次数是 strlen(str)/2。填空 2:指针 p1从第一个字符向后移动,指针 p2从最后一个字符向前移动,如果两字符不相同,则说明
7、此字符串不是回文数,将标记变量 t置为 1。填空 3:变量 t用来标记此字符串是否为回文数,当 t为 0时,表示字符串是回文数,当 t为 1时,表示字符串不是回文数。二、改错题(总题数:1,分数:30.00)2.下列给定的程序中,函数 fun()的功能是:判断字符 ch是否与 str所指字符串中的某个字符相同;若相同,则什么也不做,若相同,则将其插在申的最后。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h#include string.h/*found*/v
8、oid fun (char str,char ch)while (*str /*found*/if(*str=ch)str0=ch;/*found*/str1=0;main()char s81,c;clrscr();printf(“/nPlease enter a strzng : “);gets(s);printf(“/n Please enter the character tosearch : “);c=getchar();fun(s,c);printf(“/nThe result is %s/n“,s);(分数:30.00)填空项 1:_ (正确答案:错误;void fun(char
9、str,char ch) 正确:void fun(char *str,char ch)(2) 错误:if(*str=ch) 正确:if(*str=/0)(3) 错误;str1=0; 正确:str1=/0;)解析:解析 该题的重点就是在 while的循环嵌套语句中,由题干信息“若相同,则什么也不做”很容易就能看出 if(*str=ch)后面的执行语句是错误的。另外,void 指针具有一般性,它们可以指向任何类型的数据。但目前绝大多数 C编译所提供的这类函数都返回 char指针,再由题目中的定义得出 void fun(char str,char ch)的错误信息;str1=0;是一个简单的语法错误
10、。三、编程题(总题数:1,分数:40.00)3.printf(“The sum is : %lf/n “,s);(分数:40.00)_正确答案:(double fun (int wN)int i,j,k=0;double av=0.0;for(i=0;iN;i+)for(j=0;jN;j+)if(i=0|i=N-1|j=0|j=N-1) /*只要下标中有一个为 0或 N-1,则它一定是周边元素*/av=av+wij; /*将周边元素求和*/k+;return av/k; /*求周边元素的平均值*/)解析:解析 该题采用逐一判断的方式,周边元素的下标一定有一个是 0或 N-1,且只要下标中有一个为 0或 N-1,则它一定是周边元素。计算周边元素个数的方式是当给 av加一个值时,则 k加 1。k 也可用2*N+2*N-4求得。