1、2018 年计算机等级考试二级 C 语言程序题练习 49 及答案解析(总分:100.00,做题时间:60 分钟)一、程序填空题(总题数:1,分数:30.00)程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun 的功能是从形参 filename 所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到 filename 所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序保存在考生文件夹下的 BLANK1C 中。不得增行或删行,也不
2、得更改程序的结构!给定源程序如下。(分数:30)(1).(分数:10)填空项 1:_(2).(分数:10)填空项 1:_(3).(分数:10)填空项 1:_二、程序改错题(总题数:1,分数:30.00)给定程序 MODI1C 中函数 fun 的功能是在字符串的最前端加入 n 个“*“号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为 79。请改正函数 fun 中指定部位的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)请编写函数 fun,函数的功能是统计各
3、年龄段的人数。N 个年龄通过调用随机函数获得,并放在主函数的age 数组中;要求函数把 09 岁年龄段的人数放在 d0中,把 1019 岁年龄段的人数放在 d1中,把2029 岁年龄段的人数放在 d2中,其余依此类推,把 100 岁(含 100)以上年龄的人数都放在 d10中。结果在主函数中输出。注意:部分源程序保存在文件 PROG1C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入编写的若干语句。给定源程序如下。(分数:40.00)_2018 年计算机等级考试二级 C 语言程序题练习 49 答案解析(总分:100.00,做题时间:60 分钟)一、程序填
4、空题(总题数:1,分数:30.00)程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun 的功能是从形参 filename 所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到 filename 所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序保存在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30)(1).(分数:10)填空项 1:_ (正确答案:“rb“)解析:题目中要
5、求从形参 filename 所指的文件中读入学生的数据,以此可以看出本空应该填写“rb“。(2).(分数:10)填空项 1:_ (正确答案:)解析:此处的 if 语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写。(3).(分数:10)填空项 1:_ (正确答案:fwrite)解析:题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写 fwrite。二、程序改错题(总题数:1,分数:30.00)给定程序 MODI1C 中函数 fun 的功能是在字符串的最前端加入 n 个“*“号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为 79。请改正函数 fun 中指定部位的错
6、误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30.00)_正确答案:(1)p=s;(2)while(*p+);)解析:(1)指针 p 应指向 s,所以应改为 p=s;。(2)循环等待,当 while 循环执行一次,临时变量 P 应该指向字符串的下一位置,所以应改为 while(*p+);。三、程序设计题(总题数:1,分数:40.00)请编写函数 fun,函数的功能是统计各年龄段的人数。N 个年龄通过调用随机函数获得,并放在主函数的age 数组中;要求函数把 09 岁年龄段的人数放在 d0中,把 1019 岁年龄段的人数
7、放在 d1中,把2029 岁年龄段的人数放在 d2中,其余依此类推,把 100 岁(含 100)以上年龄的人数都放在 d10中。结果在主函数中输出。注意:部分源程序保存在文件 PROG1C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入编写的若干语句。给定源程序如下。(分数:40.00)_正确答案:()解析:本题是一个分段函数的问题,用两个循环来完成。第 1 个循环的作用是使 b 中的所有元素值都为 0。这个循环不能省略,因为若未对 b 中的元素赋初值,则它们的值是不可预测的。第 2 个循环的作用是分别统计a 中各年龄段的人数。当 ai100 时,按题意要将其统计到 b10中。else 的作用是如果年龄小于100,则将其分别统计到 bai/10中。由运算优先级可知先进行 ai/10 的运算,所得结果作为 b 的下标。若 ai为 09 时,ai/10 的值为 0,且 09 岁的人数正好要存入 b0中。若 ai为 1019 时,ai/10 的值为 1,且 1019 岁的人数正好要存入 b1中,依此类推。