1、二级 C 语言机试-211 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:从键盘输入若干字符放到一个字符数组中,当桉回车键时结束输入,最后输出这个字符数组中的所有字符。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.h#includectype.hmain()int i=0;char a 81;char *p=s;clrscr ();printf“ Input a string
2、/n“);for (i=0; i80; i+)s i =getchar ( );if (s i=/n)【1】;si= 【2】printf(“ display the string /n“);while (*p)putchar (【3】 );(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如,当 s 中的数为 87653142 时,t 中的数为 8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main,数,不得增行
3、或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.hvoid fun(long s,long *t)/*/int d;long s1=l;*t=0;while(s0)d=s%10;/*/if(d%2=0)*t=d*sl+*t;sl*=10/*/s/=10;main ( )long s,t;clrscr();printf(“/nPlease enter s: “); scanf(“%ld“,fun(s,printf(“The result is :%ld/n“,t);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3
4、.请编写函数 fun(),其功能是:将 s 所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在 t 所指数组中。例如,当 s 所指字符串中的内容为 ABCDEFGHIJK,则在 t 所指数组中的内容应是 BDFHJ。注意:部分源程序给出如下。请勿改动主函数 main 口其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio. h#includestdio .h#includestring.hvoid fun(char *s,char t)main ()char sl00 ,tl00;clrscr ();printf(“%nPlea
5、se enter string S: “);scanf(“%s “,s);fun(s,t);prlntf(“/nThe result is:%s/n “,t);(分数:40.00)_二级 C 语言机试-211 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:从键盘输入若干字符放到一个字符数组中,当桉回车键时结束输入,最后输出这个字符数组中的所有字符。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includ
6、estdio.h#includectype.hmain()int i=0;char a 81;char *p=s;clrscr ();printf“ Input a string /n“);for (i=0; i80; i+)s i =getchar ( );if (s i=/n)【1】;si= 【2】printf(“ display the string /n“);while (*p)putchar (【3】 );(分数:30.00)填空项 1:_ (正确答案:1break 2/0 3*P+)解析:解析 填空 1:当输入的字符是回车符时,使用 break 语句跳出 for 循环,结束输入。填
7、空 2:结束输入后,在字符串 s 最后要加上结束标记符,/0 。填空 3:最初指针 p 指向字符串 s 的首字符,通过 P 慢逐一指向后面的每个字符,调用 putchar()函数输出字符。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如,当 s 中的数为 87653142 时,t 中的数为 8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main,数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#includ
8、e stdio.hvoid fun(long s,long *t)/*/int d;long s1=l;*t=0;while(s0)d=s%10;/*/if(d%2=0)*t=d*sl+*t;sl*=10/*/s/=10;main ( )long s,t;clrscr();printf(“/nPlease enter s: “); scanf(“%ld“,fun(s,printf(“The result is :%ld/n“,t);(分数:30.00)填空项 1:_ (正确答案:错误:int d; 正确 long d;(2)错误:if(d%2=0) 正确:if(d%2=0)(3)错误:s/=1
9、0; 正确:s/=10)解析:解析 其实,不论取出偶数还是奇数,思路应该是一样的。我们在刚开始学习 C 语言的时候就学习过强制类型转换以及运算级别的问题,所以,这里的 int 就没有存在的理由。错误 2 中的问题是怎么表达一个偶数的问题,归根结底还是“=”和“=”的区别问题。三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),其功能是:将 s 所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在 t 所指数组中。例如,当 s 所指字符串中的内容为 ABCDEFGHIJK,则在 t 所指数组中的内容应是 BDFHJ。注意:部分源程序给出如下。请勿改动主函数 main 口
10、其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includeconio. h#includestdio .h#includestring.hvoid fun(char *s,char t)main ()char sl00 ,tl00;clrscr ();printf(“%nPlease enter string S: “);scanf(“%s “,s);fun(s,t);prlntf(“/nThe result is:%s/n “,t);(分数:40.00)_正确答案:(void fun(char *s,char t)int i, j=0,k=strlen(s); /*k 为字符串的长度*/for (i=l; ik; i=i+2) /*将 s 所指字符串中下标为奇数的字符存入 t 所指字符串中*/t j+=s ii;tj=/0; /*在字符申最后加上结束标志*/ )解析:解析 本题使用了一种泳远是奇数的循环方法,即 for(i=1; ik;i=i+2),因为开始时的值为1,当 i+2 循环时,此值永远是奇数。