1、2018 年计算机等级考试二级 C 语言程序题练习 48 及答案解析(总分:100.00,做题时间:60 分钟)一、程序填空题(总题数:1,分数:30.00)给定程序中,函数 fun 的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读出,并调用库函数 atoi 和 atof 将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序保存在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30)(1).(分数:10)填空项 1:_
2、(2).(分数:10)填空项 1:_(3).(分数:10)填空项 1:_二、程序改错题(总题数:1,分数:30.00)给定程序 MODI1C 中函数 fun 的功能是对 N 名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数 fun 中指定部位的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)请编写函数 fun,函数的功能是删去一维数组中所有相同的数,使其只
3、剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,一维数组中的数据是 2、2、2、3、4、4、5,6,6,6、6、7、7、8、9、9、10、10、10。删除后,数组中的内容应该是 2、3、4、5、6、7、8、9、10。注意:部分源程序保存在文件 PROG1C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入编写的若干语句。给定源程序如下。(分数:40.00)_2018 年计算机等级考试二级 C 语言程序题练习 48 答案解析(总分:100.00,做题时间:60 分钟)一、程序填空题(总题数:1,分数:30.00)给定程序中,函
4、数 fun 的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读出,并调用库函数 atoi 和 atof 将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序保存在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30)(1).(分数:10)填空项 1:_ (正确答案:FILE*)解析:从使用 fp=fopen(“file1.txt“,“w“)可知 fp 应该是文件类型指针,因此本空因该填写 FILE*。(2).(分数:10
5、)填空项 1:_ (正确答案:fclose(fp))解析:当对 fp 作打开操作,并进行不同的操作时,应该先对其关闭,因为在第一次打开时是对 fp 进行写操作,而在第二次打开时进行的是读操作,因此应该先对 fp 进行关闭,本空填 fclose(fp)。(3).(分数:10)填空项 1:_ (正确答案:fp)解析:fscanf()是把文本文件输出,因此本空只能填写 fp。二、程序改错题(总题数:1,分数:30.00)给定程序 MODI1C 中函数 fun 的功能是对 N 名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首
6、地址作为函数值返回。请改正函数 fun 中指定部位的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!给定源程序如下。(分数:30.00)_正确答案:(1)t=(STU*)calloc(sizeof(STU),m);(2)tk=bj; )解析:(1)calloc 应用于分配内存空间。调用形式为(类型说明符*)calloc(n,size),功能为在内存动态存储区中分配 n 块长度为 size 字节的连续区域,函数的返回值为该区域的首地址,(类型说明符*)用于强制类型转换。calloc 函数与 malloc 函数的区别在于 calloc 函数一次可以
7、分配 n 块区域。例如,ps=(struct stu*)calloc(2,sizeof(struct stu);,其中的 sizeof(struct stu)是求 stu 的结构长度。该语句的意思是按 stu 的长度分配两块连续区域,强制转换为 stu 类型,并把其首地址赋予指针变量 ps。在本题中不用考虑那么复杂,语句缺少分号。(2)tk.num=bj.num 的错误意在考查对结构体概念的掌握和灵活应用程度。三、程序设计题(总题数:1,分数:40.00)请编写函数 fun,函数的功能是删去一维数组中所有相同的数,使其只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
8、例如,一维数组中的数据是 2、2、2、3、4、4、5,6,6,6、6、7、7、8、9、9、10、10、10。删除后,数组中的内容应该是 2、3、4、5、6、7、8、9、10。注意:部分源程序保存在文件 PROG1C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入编写的若干语句。给定源程序如下。(分数:40.00)_正确答案:()解析:该程序的流程是:定义变量 i 和 j,其中 j 用于控制删除后剩下的数在数组中的下标,i 用于搜索原数组中的元素。j 始终是新数组中最后一个元素的下一个元素的下标,所以 if 语句中的条件是 aj-1!=ai,其中 aj-1就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以 ai要保留到新数组中。注意本题中 i 和 j 的初值都要从 1 开始,该算法只能用于数组已排序的题目中。