1、二级 C 语言机试-198 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun,该函数的功能是比较字符串 str1 和 str2 的大小,井返回比较的结果。例如: 当 str1=“cdef“,str2=“cde”时,函数 fun()返回“”。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:# include stdio, h#includeconio. h#define N 80char *fun (char *str1,char
2、*str2)char *p1=str1, *p2=str2;while (*p1 if( 【2】 )return “;p1+;p2+;if (*p1=*p2)return “=“;if (*p1= 【3】 )return “;elsereturn “;main()char str1 N, str2 N;clrscr ();printf (“Input str1: /n“);gets (str1);printf (“Input str2: /n“);gets (str2);printf (“/n*the result*/n“);printf (“/nstr1 %s str2“, fun (str
3、1, str2) );(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是;求 S 的值。设 S=(2 2/1*30)*(42/(3*5)*(62/(5*7)*(2k)2/(2k-1)*(2k+1)例如,当 k 为 10 时,函数的值应为 1.533852。请改正程序中的错误,使它能得出正确的结果。注童;不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio. h#include stdio. h#include math.h /*found*/fun (int k)iht n;
4、 float s, w, p, q;n=1;s=1.0;while (n=k)w=2. 0*n;p=w-1.0;q=w+1.0;s=s*w*w/p/q;n+;/*found*/return smain()clrscr ();printf (“%f/n “, fun (10);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:计算并输出S=1+(1+20.5)+(1+20.5+30.5)+(1+20.5+30.5+n0.5)例如,若主函数从键盘给 n 输入 20 后,则输出为s=534.188884。注意;部分源程序给出如下。
5、请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#include math. h#include stdio. hdouble fun(int n)main()int n;double s;printf(“/n/nInput n: “);scanf (“%d“, s=fun (n)printf (“/n/ns=%f/n/n“, s);(分数:40.00)_二级 C 语言机试-198 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun,该函数的功能是比较字符串 str1
6、 和 str2 的大小,井返回比较的结果。例如: 当 str1=“cdef“,str2=“cde”时,函数 fun()返回“”。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:# include stdio, h#includeconio. h#define N 80char *fun (char *str1,char *str2)char *p1=str1, *p2=str2;while (*p1 if( 【2】 )return “;p1+;p2+;if (*p1=*p2)return “=“;i
7、f (*p1= 【3】 )return “;elsereturn “;main()char str1 N, str2 N;clrscr ();printf (“Input str1: /n“);gets (str1);printf (“Input str2: /n“);gets (str2);printf (“/n*the result*/n“);printf (“/nstr1 %s str2“, fun (str1, str2) );(分数:30.00)填空项 1:_ (正确答案:1 *p1*p2 2 *p1*p2 3 /0)解析:解析 填空 1:比较两个字符串的大小,是从第一个字符开始比较
8、,如果两字符不相等,则由字符的大小决定字符串 P2 指向字符串 str2,如果 p1 所指的字符小于 p2 所指的字符,则字符串 str1 小于字符串 str2。填空 2:如果 p1 所指的字符大于 p2 所指的字符,则字符串 str1 大于字符串 str2。填空3:如果 str1 是 str2 的前一部分,则 str1 的所有字符都等于 str2 中的对应字符,而字符串结束标记符/0小于其他字符,所以,这里如果 p1 所指的字符等于/0,则表示字符串 str1 小于字符串str2。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是;求 S 的值。设 S=(
9、2 2/1*30)*(42/(3*5)*(62/(5*7)*(2k)2/(2k-1)*(2k+1)例如,当 k 为 10 时,函数的值应为 1.533852。请改正程序中的错误,使它能得出正确的结果。注童;不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio. h#include stdio. h#include math.h /*found*/fun (int k)iht n; float s, w, p, q;n=1;s=1.0;while (n=k)w=2. 0*n;p=w-1.0;q=w+1.0;s=s*w*w/p/q;n+;/*fou
10、nd*/return smain()clrscr ();printf (“%f/n “, fun (10);(分数:30.00)填空项 1:_ (正确答案:(1)错误:fun(int k) 正确:double fun(int k)(2)错误:return s 正确:returns;)解析:解析这样一道数学题要是用 C 程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。一个是简单的函数调用的定义,另一个是语法错误。三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:计算并输出S=1+(1+20.5)+(1+20.5+30.5)+(1+2
11、0.5+30.5+n0.5)例如,若主函数从键盘给 n 输入 20 后,则输出为s=534.188884。注意;部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#include math. h#include stdio. hdouble fun(int n)main()int n;double s;printf(“/n/nInput n: “);scanf (“%d“, s=fun (n)printf (“/n/ns=%f/n/n“, s);(分数:40.00)_正确答案:(double fun(int n)i
12、nt i;double s=0.0,s1=0.0;for(i=1;i=n; i+)s1=s1+pow(i,0.5); /*求每项*/s=s+s1; /*按公式求出 s*/return s;)解析:解析 我们先用数学的思路读懂该程序,并用 1 个字符表示“()”内的值。在本程序中用 s1 来表示题中每个小括号内的值,第 1 项相当于有 1 个 10.5次方(它还是 1),第 2 项相当于第 1 项的值加上 200.5次方,第 3 项相当于第 2 项的值加上 30.5次方,依次类推。函数 pow (x,y)的功能是求出 x 的 y 次方,该函数已在库函数math. h中定义(即可直接使用)。要程序中用 s 来表示总的结果,每 1 次循环加 1次 s1 即加 1 项。