1、国家二级(C 语言)机试-试卷 72 及答案解析(总分:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.00)_2.程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将形参 a所指结构体变量 8 中的数据进行修改,并把 a 中地址作为函数值返回主函数,在主函数中输出修改后的数据。 例如:a 所指变量 s 中的学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,修改后输出 t 中的数据应为:10002、”LiSi”、96、81、89。 请在程序的下划线处填入正确
2、的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKlC 中。不得增行或删行,也不得更改程序的结构 l #include #include struct student long sno; char name10; float score3; ; /*found*/ 【1】fun(struct student *a) int i; a-sno = 10002; strcpy(a-name, “LiSi“); /*found*/ for (i=0; isno, t-name); for (i=0; iscorei); printf(“/n“); (分数:2.
3、00)_二、程序修改题(总题数:2,分数:4.00)3.程序修改题()(分数:2.00)_4.给定程序 MODllC 中函数 fun 的功能是:按顺序给 s 所指数组中的元素赋予从 2 开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在 W 所指的数组中。若 s 所指数组中元素的个数不是 5 的倍数,多余部分忽略不计。 例如,s 所指数组有 14 个元素,则只对前 10 个元素进行处理,不对最后的 4 个元素求平均值。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 #include #define SIZE
4、 20 fun(double *s, double w) int k,i; double sum; for(k=2,i=0;i_三、程序设计题(总题数:2,分数:4.00)5.程序设计题()(分数:2.00)_6.程序定义了 NN 的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN),函数的功能是:使数组左下三角元素中的值全部置成 0。 例如:a 数组中的值为 则返回主程序后 a 数组中的值应为 (分数:2.00)_国家二级(C 语言)机试-试卷 72 答案解析(总分:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.0
5、0)_解析:2.程序通过定义学生结构体变量,存储了学生的学号、姓名和 3 门课的成绩。函数 fun 的功能是将形参 a所指结构体变量 8 中的数据进行修改,并把 a 中地址作为函数值返回主函数,在主函数中输出修改后的数据。 例如:a 所指变量 s 中的学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,修改后输出 t 中的数据应为:10002、”LiSi”、96、81、89。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKlC 中。不得增行或删行,也不得更改程序的结构 l #include
6、#include struct student long sno; char name10; float score3; ; /*found*/ 【1】fun(struct student *a) int i; a-sno = 10002; strcpy(a-name, “LiSi“); /*found*/ for (i=0; isno, t-name); for (i=0; iscorei); printf(“/n“); (分数:2.00)_正确答案:(正确答案:struct student* a-scorei a)解析:解析:第一空:主函数内 fun 函数的调用形式是“t=fun(”,t
7、是 student 结构体指针,故fun 函数的返回值是 student 结构体指针,因此第一空为“struct student *”。 第二空:“for (i=0; iscorei”。 第三空:此处补充返回值,由第一空的分析可知,返回值是指针,a 是指针变量,所以返回值为 a,即第三空为“a”。二、程序修改题(总题数:2,分数:4.00)3.程序修改题()(分数:2.00)_解析:4.给定程序 MODllC 中函数 fun 的功能是:按顺序给 s 所指数组中的元素赋予从 2 开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在 W 所指的数组中。若 s 所指数组中元素的个数
8、不是 5 的倍数,多余部分忽略不计。 例如,s 所指数组有 14 个元素,则只对前 10 个元素进行处理,不对最后的 4 个元素求平均值。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 #include #define SIZE 20 fun(double *s, double w) int k,i; double sum; for(k=2,i=0;i_正确答案:(正确答案:sum=0.0; if(i+1)%5= 0)解析:解析:(1)在第一标识下“sun=0.0;”,根据题意,这是给 sum 赋值,而 sun 没有定义编译时
9、会提示错误,应改为“sum=0.0;”。 (2)错误标识下的 if 判断语句是依顺序取五个字符,if 中的逻辑表达式语法有误,由于 1%5 恒等于 1,所以 i+1%5 也就等价于 i+1 了,所以将“if(i+1%5=0)”改为“if(i+1)%5= 0)”,此处主要注意的是运算符的优先级。三、程序设计题(总题数:2,分数:4.00)5.程序设计题()(分数:2.00)_解析:6.程序定义了 NN 的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN),函数的功能是:使数组左下三角元素中的值全部置成 0。 例如:a 数组中的值为 则返回主程序后 a 数组中的值应为 (分数:2.00)_正确答案:(正确答案: int i, j; for(i=0; i=i; j+) aij=0; )解析:解析:进入 fun 函数,根据前面的分析: (1)对二维数组常用双重循环结构来处理:外层循环控制二维数组的行处理,内层循环控制二维数组的列处理。 (2)左下半三角元素的下标特点是列下标小于或等于行下标,即 j=i。 (3)依次访问二维数组,把符合以上条件的元素的值赋 0。 该题是对矩阵操作的考查。