1、二级 C语言机试-167 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main函数,该函数的功能是:打印出 11000 中满足:个位数字的立方等于其本身所有数。本题的结果为;1 64 125 216 729注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 main的横线上填入所编写的若干表达式或语句。试题程序: #include stdio .hmain ( )int i,g;clrscr ();for (i=1; i1000; i+)g= 【1】 ;if( 【2】 )printf (“%4d“,
2、 i);(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定函数中,函数 fun()的功能是:统计字符串中各元音字母(即 A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入 THIs is a boot,则应输出是 1 0 2 2 0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h/*found*/fun(char *s, int num5)int k, i=5; for(k=0;ki;k+)/*found*/n
3、um i=0;for(;*s;s+)i=-l;/*found*/switch(s)case a: case A:i=0;break;case e: case E:i=1;break;case i: case I:i=2;break;case o: case O:i=3;break;case u: case U:i=4;break;if(i=0)numi+;main ( )char s181; int num15, i;clrscr ();printf(“/nPlease enter a string: “);gets (s1);fun(s1, num1);for(i=0;i5;i+) prin
4、tf(“%d“,num1i);printf (“/n“);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.编写一个函数 fun(),它的功能是:实现两个字符串的连接(不使用库函数 strcat),即把 p2所指的字符串连接到 p1所指的字符串后。例如,分别输入下面两个字符串:FirstStringSecondString则程序输出:FirstStringSecondString注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号小填入所编写的若干语句。试题程序:#include stdio. h#includecon
5、io. h void fun (char pi,char p2)main ( )char s180,s240;clrscr ();printf(“Enter s1 and s2:/n“);scanf (“%s%s“, s1, s2);printf (“s1=%s/n“, s1);printf(“s2=%s/n“,s2);printf(“Invoke fun(s1,s2) :/n“);fun(s1,s2);printf(“After invoking:/n“);printf (“%s/n“, s1);(分数:40.00)_二级 C语言机试-167 答案解析(总分:100.00,做题时间:90 分
6、钟)一、填空题(总题数:1,分数:30.00)1.请补充 main函数,该函数的功能是:打印出 11000 中满足:个位数字的立方等于其本身所有数。本题的结果为;1 64 125 216 729注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 main的横线上填入所编写的若干表达式或语句。试题程序: #include stdio .hmain ( )int i,g;clrscr ();for (i=1; i1000; i+)g= 【1】 ;if( 【2】 )printf (“%4d“, i);(分数:30.00)填空项 1:_ (正确答案:1 i%10 2 g
7、*g*g=i)解析:解析 填空 1:将一个整数对 10求余,就得到这个数的个位数字,并存于变量 g中。填空 2:如果个位数字的立方等于这个数本身,则将这个数输出。二、改错题(总题数:1,分数:30.00)2.下列给定函数中,函数 fun()的功能是:统计字符串中各元音字母(即 A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入 THIs is a boot,则应输出是 1 0 2 2 0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h/*found
8、*/fun(char *s, int num5)int k, i=5; for(k=0;ki;k+)/*found*/num i=0;for(;*s;s+)i=-l;/*found*/switch(s)case a: case A:i=0;break;case e: case E:i=1;break;case i: case I:i=2;break;case o: case O:i=3;break;case u: case U:i=4;break;if(i=0)numi+;main ( )char s181; int num15, i;clrscr ();printf(“/nPlease en
9、ter a string: “);gets (s1);fun(s1, num1);for(i=0;i5;i+) printf(“%d“,num1i);printf (“/n“);(分数:30.00)填空项 1:_ (正确答案:错误: fun(char *s, int num5) 正确: void fun(char *s, int num5)(2) 错误: numi=0; 正确: numk=0;(3) 错误: switch(s) 正确: switch(*s))解析:解析 switch 语句说明:(1)switch后的表达式,可以是整型或字符型,也可以是枚举类型的。在新的 ANSIC标准中允许表达
10、式的类型为任何类型。(2)每个 case后的常量表达式只能是常量组成的表达式,当 switch后的表达式的值与某一个常量表达式的值一致时,程序就转到此 case后的语句开始执行。如果没有一个常量表达式的值与 swish后的值一致,就执行 default后的语句。(3)各个 case后的常量表达式的值必须互不相同,不然的话程序就不知该跳到何处开始执行。(4)各个 case的次序不影响执行结果,一般情况下,尽量使用出现机率大的 case放在前面(为什么,等学到数据结构就知道了)。(5)在执行完一个 case后面的语句后,程序流程转到下一个 case后的语句开始执行。千万不要理解成行完一个 case
11、后程序就转到 switch后的语句去执行了。 在本例中,其他错误都比较简单,而且我们在前面已经介绍过了。三、编程题(总题数:1,分数:40.00)3.编写一个函数 fun(),它的功能是:实现两个字符串的连接(不使用库函数 strcat),即把 p2所指的字符串连接到 p1所指的字符串后。例如,分别输入下面两个字符串:FirstStringSecondString则程序输出:FirstStringSecondString注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号小填入所编写的若干语句。试题程序:#include stdio. h#incl
12、udeconio. h void fun (char pi,char p2)main ( )char s180,s240;clrscr ();printf(“Enter s1 and s2:/n“);scanf (“%s%s“, s1, s2);printf (“s1=%s/n“, s1);printf(“s2=%s/n“,s2);printf(“Invoke fun(s1,s2) :/n“);fun(s1,s2);printf(“After invoking:/n“);printf (“%s/n“, s1);(分数:40.00)_正确答案:(void fun (char p1,char p2)int i,j;for (i=0;p1 i !=/0; i+); /*求出的 i为 p1字符的总长度,包括结束标记位*/for (j=0;p2 j !=/0; j+)p1 i+=p2 j; /*将 p2字符串连在 p1字符串的后面*/p1i=/0; /*在字符串最后加上结束标记符*/)解析:解析 本题用两个循环,第 1个循环的作用是将 i走到第 1个字符串的末尾。第 2个循环的作用是将第 2个字符串的字符连到第 1个字符串的末尾。