1、二级 C 语言机试 66 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun,该函数的功能是比较字符串 str1 和 str2 的大小,井返回比较的结果。 例如: 当str1=“cdef“,str2=“cde”时,函数 fun()返回“”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序:# include stdio, h #includeconio. h #define N 80 char *fun (char *st
2、r1,char *str2) char *p1=str1, *p2=str2; while (*p1 if(U 【2】 /U) return “; p1+; p2+; if (*p1=*p2) return “=“; if (*p1=U 【3】 /U) return “; else return “; main() char str1 N, str2 N; clrscr (); printf (“Input str1: /n“); gets (str1); printf (“Input str2: /n“); gets (str2); printf (“/n*the result*/n“);
3、printf (“/nstr1 %s str2“, fun (str1, str2) ); (分数:30.00)填空项 1:_二、B改错题/B(总题数: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#inc
4、lude 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+;/*found*/return smain() clrscr ();printf (“%f/n “, fun (10);(分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:计算并输出S=1+(1+20.5)+(1+20.5+30.5)+(1+20.5+30.5+n0.5)例如,若主函数从
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)_二级 C 语言机试 66 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/
6、B(总题数:1,分数:30.00)1.请补充函数 fun,该函数的功能是比较字符串 str1 和 str2 的大小,井返回比较的结果。 例如: 当str1=“cdef“,str2=“cde”时,函数 fun()返回“”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序:# include stdio, h #includeconio. h #define N 80 char *fun (char *str1,char *str2) char *p1=str1, *p2=str2; while (
7、*p1 if(U 【2】 /U) return “; p1+; p2+; if (*p1=*p2) return “=“; if (*p1=U 【3】 /U) return “; else return “; 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) ); (
8、分数:30.00)填空项 1:_ (正确答案:1 *p1*p2 2 *p1*p2 3 /0)解析:解析 填空 1:比较两个字符串的大小,是从第一个字符开始比较,如果两字符不相等,则由字符的大小决定字符串 P2 指向字符串 str2,如果 p1 所指的字符小于 p2 所指的字符,则字符串 str1 小于字符串 str2。填空 2:如果 p1 所指的字符大于 p2 所指的字符,则字符串 str1 大于字符串 str2。填空3:如果 str1 是 str2 的前一部分,则 str1 的所有字符都等于 str2 中的对应字符,而字符串结束标记符/0小于其他字符,所以,这里如果 p1 所指的字符等于/0
9、,则表示字符串 str1 小于字符串str2。二、B改错题/B(总题数: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;
10、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)错误:fun(int k) 正确:double fun(int k))解析:(2)错误:return s 正确:returns; 解析这样一道数学题要是用 C 程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。一个是简单的函数调用的定义,另一
11、个是语法错误。三、B编程题/B(总题数: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。注意;部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#include math. h#include stdio. hdouble fun(int n)main()int n;double s;printf(“/n/nInput n
12、: “);scanf (“%d“, s=fun (n)printf (“/n/ns=%f/n/n“, s);(分数:40.00)_正确答案:()解析:double fun(int n)int 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 项。