1、二级 C 语言-310 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:计算 MM 维矩阵元素的方差,结果由函数返回。维数 M 在主函数中输入。例如,输入 4,则 求方差的公式为: 其中 (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:统计字符串 sub 在字符串 str 中出现的次数。例如,若字符串为 bestwishesto you,子字符串为 st,则应输出 2。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改
2、动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h proc(char*str, char*sub) int i, j, k, num=0; /*ound* for(i=0, stri, i+) for(j=i, k=0; subk=strj; k+, j+) if(subk+1=“/0“) num+; break; return num; void main() char str80, sub80; printf(“Input a string:“); gets(str); printf(“Input a sbustring:“); ge
3、ts(sub); printf(“%d/n“, proc(str, sub); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.n 个人的成绩存放在 score 数组中,请编写函数 proc(),它的功能是将低于平均分的人数作为函数值返回,将低于平均分的分数放在 down 所指的数组中。 例如,当 score 数组中的数据为99,80,40,56,59,84,60,76,100时,函数返回的人数应该是4,down 中的数据应为 40 56 59 60。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编
4、写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includestring.h int proc(int score, int n, int down) void main() int i, n, down9; int score9=99, 80, 40, 56, 59, 84, 60, 76, 100; system(“CLS“); n=proc(score, 9, down); printf(“/ndown to the average score are:“); for(i=0; in; i+) printf
5、(“%d“, downi); printf(“/n“); (分数:30.00)_二级 C 语言-310 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:计算 MM 维矩阵元素的方差,结果由函数返回。维数 M 在主函数中输入。例如,输入 4,则 求方差的公式为: 其中 (分数:30.00)解析:int aMM s/(n*n) sqrt(f)解析 形参的个数和类型由实参的个数和类型决定,由 main()函数中调用函数 proc()的实参可知,第一处填“intaMM”;变量 aver 中存放平均值,
6、因此第二处填“s/(n*n)”;变量 f 中存放根号下的值,变量 sd 放其方差,由方差的公式可知第三处填“sqrt(f)”。二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:统计字符串 sub 在字符串 str 中出现的次数。例如,若字符串为 bestwishesto you,子字符串为 st,则应输出 2。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h proc(char*str, char*sub) int i, j, k, nu
7、m=0; /*ound* for(i=0, stri, i+) for(j=i, k=0; subk=strj; k+, j+) if(subk+1=“/0“) num+; break; return num; void main() char str80, sub80; printf(“Input a string:“); gets(str); printf(“Input a sbustring:“); gets(sub); printf(“%d/n“, proc(str, sub); (分数:40.00)_正确答案:()解析:错误:for(i=0, stri, i+) 正确:for(i=0
8、; stri; i+) 解析 根据 C 语言语法规则,for 循环中的条件语句之间是用分号间隔的,而不是用逗号。因此,“for(i=0, stri, i+)”应改为“for(i=0; stri; it+)”。三、程序设计题(总题数:1,分数:30.00)3.n 个人的成绩存放在 score 数组中,请编写函数 proc(),它的功能是将低于平均分的人数作为函数值返回,将低于平均分的分数放在 down 所指的数组中。 例如,当 score 数组中的数据为99,80,40,56,59,84,60,76,100时,函数返回的人数应该是4,down 中的数据应为 40 56 59 60。 注意:部分源
9、程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includestring.h int proc(int score, int n, int down) void main() int i, n, down9; int score9=99, 80, 40, 56, 59, 84, 60, 76, 100; system(“CLS“); n=proc(score, 9, down); printf(“/ndown
10、 to the average score are:“); for(i=0; in; i+) printf(“%d“, downi); printf(“/n“); (分数:30.00)_正确答案:()解析:int proc(int score, int n, int down) int i, j=0; float av=0.0; for(i=0; in; i+) av=av+scorei/n; /求其平均数 av for(i=0; in; i+) if(scoreiav) /通过 if 语句来把小于平均数的 数放到 down 数组中 downj+=scorei; return j; 解析 要找到所有学生中成绩低于平均分数的人数,首先需要算出所有学生的平均成绩。然后将所有学生的成绩与平均成绩相比较,将低于平均分数学生的记录存放在新的数组中,并将低于平均分数的学生数返回给主函数。