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