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