1、2018 年计算机等级考试二级 C 语言程序题练习 37 及答案解析(总分:100.00,做题时间:60 分钟)一、程序填空题(总题数:1,分数:30.00)程序通过定义学生结构体变量,存储了学生的 学号、姓名和三门课的成绩。函数 fun 的功能是将 形参 a中的数据进行修改,把修改后的数据作为函 数值返回主函数进行输出。例如,传给形参 a 的数据中,学号、姓名和三 门课的成绩依次是 10001、“ZhangSan”、95、80、 88,修改后的数据应为 10002、“LiSi“、96、81、 89。请在程序的下画线处填入正确的内容并把下画 线删除,使程序得出正确的结果。注意:源程序保存在考生
2、文件夹下的 BLANK1. C 中。不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30)(1)(分数:10)填空项 1:_(2)(分数:10)填空项 1:_(3)(分数:10)填空项 1:_二、程序改错题(总题数:1,分数:30.00)假定整数数列中的数不重复,并存放在数组中。 给定程序 MODI1.C 中函数 fun 的功能是删除数列中 值为x 的元素。n 中存放的是数列中元素的个数。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行, 也不得更改程序的结构。给定源程序如下。(分数:30.00)_三、程序设计题(总题数:1,分数:40.00
3、)函数 fun 的功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是 将 a 数的十位和个位数依次放在 c 数的个位和百 位上,b 数的十位和个位数依次放在。数的千位 和十位上。例如,当 a=45、b=12 时,调用该函数后,c=1524。注意:部分源程序保存在文件 PROG1.C 中。 数据文件 IN.DAT 中的数据不得修改。请勿改动主函数 main 和其他函数中的任何 内容,仅在函数 fun 的花括号中填入编写的若干 语句。给定源程序如下。(分数:40.00)_2018 年计算机等级考试二级 C 语言程序题练习 37 答案解析(总分:100.00,做题时间:
4、60 分钟)一、程序填空题(总题数:1,分数:30.00)程序通过定义学生结构体变量,存储了学生的 学号、姓名和三门课的成绩。函数 fun 的功能是将 形参 a中的数据进行修改,把修改后的数据作为函 数值返回主函数进行输出。例如,传给形参 a 的数据中,学号、姓名和三 门课的成绩依次是 10001、“ZhangSan”、95、80、 88,修改后的数据应为 10002、“LiSi“、96、81、 89。请在程序的下画线处填入正确的内容并把下画 线删除,使程序得出正确的结果。注意:源程序保存在考生文件夹下的 BLANK1. C 中。不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:3
5、0)(1)(分数:10)填空项 1:_ (正确答案:struct student)解析:函数定义时,类型标识符指明了本函 数的类型,函数的类型实际上是函数返回值的类型。 该题中,用结构类型定义函数类型。(2)(分数:10)填空项 1:_ (正确答案:a.name)解析:填空 2 和填空 3:此处考査结构体变量成员的表 不方法 a、name 和 a、scorei分别表示学生的姓名 和成绩。(3)(分数:10)填空项 1:_ (正确答案:a.scorei)解析:二、程序改错题(总题数:1,分数:30.00)假定整数数列中的数不重复,并存放在数组中。 给定程序 MODI1.C 中函数 fun 的功能
6、是删除数列中 值为x 的元素。n 中存放的是数列中元素的个数。请改正程序中的错误,使它能得出正确结果。注意:不要改动 main 函数,不得增行或删行, 也不得更改程序的结构。给定源程序如下。(分数:30.00)_正确答案:((1) if(p=n) return -1;(2) ai=ai+1;)解析:(1)需要确定 if 条件语句的条件表达式,发现 变量 P 大写,C 语言中变量是区别大小写的。(2)删除数列中的元素,删除后,后面的元素 依次前移一个位置,因此此处应为 ai=ai+1。三、程序设计题(总题数:1,分数:40.00)函数 fun 的功能是:将两个两位数的正整数 a、b 合并形成一个
7、整数放在 c 中。合并的方式是 将 a 数的十位和个位数依次放在 c 数的个位和百 位上,b 数的十位和个位数依次放在。数的千位 和十位上。例如,当 a=45、b=12 时,调用该函数后,c=1524。注意:部分源程序保存在文件 PROG1.C 中。 数据文件 IN.DAT 中的数据不得修改。请勿改动主函数 main 和其他函数中的任何 内容,仅在函数 fun 的花括号中填入编写的若干 语句。给定源程序如下。(分数:40.00)_正确答案:(void fun(int a, int b, long *c)*c=a/10+(b%10)*10+(a%10)*100+(b/10)*1000;)解析:本题中主要的问题是如何取出 a 和 b 的个位数 和十位数,取出后如何表示成 c 中相应的位数。由 于 a和 b 都是只有两位的整数,所以分别对它们除 10 可得到它们的十位数,分别用 10 对它们求余可 得到它们的个位数。得到后对应乘以 1000、100、 10、1 就可得到 c 的千位数、百位数、十位数和个 位数。注意使用 c 时要进行指针运算。