1、二级 C 语言机试 96 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:把字符串 str1 中的非空格字符拷贝到字符串 str2 中。 例如,若sffl=“glad to see you!”, 则 str2=“gladtoseeyou!”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #define N 80 main() static char strl N
2、 =“glad to see you!“; char str2 IN; int i=0, j=0; clrscr (); printf(“/n* strl*/n “); puts (str1); while (str1 i ) if(U【1】/U) str2 J+ =strl i; U【2】/U; printf(“/n* str2 */n “); for (i=0; ij; i+) printf (“%c“, str2 i ); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:根据整型形参 n,计算如下公式的值。A
3、1=1,A 2=1/(1+A1),A 3=1/(1+A2),A n=(1/(1+A(n-1)例如,若 p=10,则应输出 0.617977。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 mah 函数,不得增行或删行,也不得更改程序的蛄构试题程序:#include conio.h#include stdio.h/*found*/iht fun(iht n) float A=l;inti;/*foudn*/for(i=2;in;i+)A=1.0/(i+A); return A;main () int n;clrscr ();printf(“/nPlease enter n: “);$c
4、anf (“%d“, printf (“A%d=%lf/n“, n, fun (n);(分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。 例如,若字符串中的内容为*A*BC*DEF*G*删除后,字符串中的内容则应当是*A*BC*DEF*G。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 6ln 的花括号中填入所编写的若干语句。 试题程序: #include stdio,h #include co
5、nio.h void fun (char *a) main() char s81; printf(“Enter a string :/n“); gets(s);fun(s); printf(“The string after deleted:/n“); puts(s); (分数:40.00)_二级 C 语言机试 96 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:把字符串 str1 中的非空格字符拷贝到字符串 str2 中。 例如,若sffl=“glad to see you!”, 则 str2=
6、“gladtoseeyou!”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #define N 80 main() static char strl N =“glad to see you!“; char str2 IN; int i=0, j=0; clrscr (); printf(“/n* strl*/n “); puts (str1); while (str1 i ) if(U【1】/U) str2 J+ =strl i; U【2】/U; prin
7、tf(“/n* str2 */n “); for (i=0; ij; i+) printf (“%c“, str2 i ); (分数:30.00)填空项 1:_ (正确答案:1 str1i!= 2i+)解析:解析 填空 1:如果当前字符不为空格,则将它保存在字符串 str2 中。填空 2:在 while 循环中,通过 1 忖取得字符串 str1 中当前字符的下一个字符,继续判断是否为空格。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:根据整型形参 n,计算如下公式的值。A1=1,A 2=1/(1+A1),A 3=1/(1+A2),A n=(1/(
8、1+A(n-1)例如,若 p=10,则应输出 0.617977。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 mah 函数,不得增行或删行,也不得更改程序的蛄构试题程序:#include conio.h#include stdio.h/*found*/iht fun(iht n) float A=l;inti;/*foudn*/for(i=2;in;i+)A=1.0/(i+A); return A;main () int n;clrscr ();printf(“/nPlease enter n: “);$canf (“%d“, printf (“A%d=%lf/n“, n, fun
9、 (n);(分数:30.00)填空项 1:_ (正确答案:错误:int fun(int n) 正确:float fun(int n))解析:(2)错误:for(i=2;in;i+) 正确:for(i=2;i=n;i+)解析 该题中 fun()函数的作用是计算数列前 n 项的和,而数列的组成方式是:第 n 项的分母是功口第n-1 项的值,分子为 1,如果循环累加按 for(i=2;in;i+)执行的话,当我们输入 n=2 的时候会是什么结果?循环会怎么执行呢?循环不能执行,但数学思路绝对正确,这就矛盾了,所以循环条件应该是for(i=2;in;i+)。三、B编程题/B(总题数:1,分数:40.0
10、0)3.假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。 例如,若字符串中的内容为*A*BC*DEF*G*删除后,字符串中的内容则应当是*A*BC*DEF*G。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 6ln 的花括号中填入所编写的若干语句。 试题程序: #include stdio,h #include conio.h void fun (char *a) main() char s81; printf(“Enter a string :/n“); gets(s);fun(s); printf(“The string after deleted:/n“); puts(s); (分数:40.00)_正确答案:()解析:void fun (char *a) while (*a!= /0) a+; a-; /*指针 a 指向字符串的尾部*/ while (*a=* ) a- /*指针 a 指向最后一个字母*/ * (a+l)=/0; /*在字符串最后加上结束标志位*/ 解析 前面我们遇到类似将字符串头部的*号全部删除,其实解题思路是一样的,请参照前面试题解析及参考答案。