1、二级 C 语言-196 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:找出形参 s 所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。 例如,形参 s 所指的字符串为:abcAbsmaxless,程序执行后的输出结果为: leffer“a“:3times leffer“s“:3times 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestr
2、ing.h #includectype.h void fun(char*s) int k26=0,n,i,max=0;char ch; while(*s) if(isalpha(*s) /*found*/ ch=tolower( 1); n=ch-“a“; /*found*/ kn+= 2; s+; /*found*/ if(maxkn)max= 3; printf(“/nAfter count:/n“); for(i=0;i26;i+) if(ki=max) printf(“/nletter“%c“:%d times/n“,i+“a“,ki); main() char s81; printf
3、(“/nEnter a string:/n/n“); gets(s);fun(s); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:求 S 的值。 S=(2 2 /(13)(4 2 /(35)(6 2 /(57)(2k) 2 /(2k-1)(2k+1) 例如,当 k 为 10 时,函数的值应为 1.533852。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includeconio.h #includestdio
4、.h #includemath.h /*found*/ double fun(int k) int n;float s,w,p,q; n=1; s=10; while(n=k) w=2.0*n; P=w-1.0; q=w+1.0; s=s*w*w/p/q; n+; /*found*/ return s void main() system(“CLS“); printf(“%f/n“,fun(10); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出下列多项式的值。 S=1/(12)+1/(23)+1/(n(n+1) 例如,当 n=
5、10 时,函数值为 0.909091。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h double fun(int n) void main() system(“CLS“); printf(“%f/n“,fun(10); (分数:40.00)_二级 C 语言-196 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能
6、是:找出形参 s 所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。 例如,形参 s 所指的字符串为:abcAbsmaxless,程序执行后的输出结果为: leffer“a“:3times leffer“s“:3times 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestring.h #includectype.h void fun(char*s) int k26=0,n,i,max=0;char ch; while(*s) if(i
7、salpha(*s) /*found*/ ch=tolower( 1); n=ch-“a“; /*found*/ kn+= 2; s+; /*found*/ if(maxkn)max= 3; printf(“/nAfter count:/n“); for(i=0;i26;i+) if(ki=max) printf(“/nletter“%c“:%d times/n“,i+“a“,ki); main() char s81; printf(“/nEnter a string:/n/n“); gets(s);fun(s); (分数:30.00)解析:*s 1 kn 解析 本题统计字符串中各字母的个数,
8、建立了一个包括 26 个整型变量的数组,用来存储每个字母的个数。 填空 1:isalpha 函数的作用是判断当前字符是否为字母,tolower 函数的作用是将当前字母转换为小写字母,所以应填*s。 填空 2:把该字母出现的个数累加到指定的数组中,所以应填 1。 填空 3:max 用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数大于最大次数 max,那么把该次数赋值给 max,所以应填 kn。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:求 S 的值。 S=(2 2 /(13)(4 2 /(35)(6 2 /(57)(2k) 2 /(2k-
9、1)(2k+1) 例如,当 k 为 10 时,函数的值应为 1.533852。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includemath.h /*found*/ double fun(int k) int n;float s,w,p,q; n=1; s=10; while(n=k) w=2.0*n; P=w-1.0; q=w+1.0; s=s*w*w/p/q; n+; /*found*/ return
10、s void main() system(“CLS“); printf(“%f/n“,fun(10); (分数:30.00)_正确答案:()解析:double fun(int k) return s; 解析 (1)此处为函数定义错误,根据返回值的类型可知函数类型标识符应为 double。 (2)语法错误。三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出下列多项式的值。 S=1/(12)+1/(23)+1/(n(n+1) 例如,当 n=10 时,函数值为 0.909091。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅
11、在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h double fun(int n) void main() system(“CLS“); printf(“%f/n“,fun(10); (分数:40.00)_正确答案:()解析:double fun(int n) int i; double s=0.0; for(i=1;i=n;i+) s=s+1.0/(i*(i+1); /*求级数的和*/ return s; 解析 本题要求级数的和,由多项式的形式可知,应使用循环语句实现,循环的通项为 1/n(n+1)。本程序首先定义了和变量及循环变量,然后运用一个 for 语句求出级数的和,最后将和变量 s 返回。