1、全国计算机二级 C语言上机试题 57+2015年及答案解析(总分:30.00,做题时间:90 分钟)1.函数 fun的功能是:把形参 a所指数组中的最小值放在元素 a0中,接着把形参 a所指数组中的最大值放在 a1元素中;再把 a所指数组元素中的次小值放在 a2中,把 a所指数组元素中的次大值放在a3;其余以此类推。例如:若 a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形参 n中存放 a所指数组中数据的个数。 注意:规定 fun函数中的 max存放当前所找的最大值,px 存放当前所找最大值的下标。 请在程序的
2、下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: # include #define N 9 void fun(int a, int n) int i,j, max, min, px, pn, t; for (i=0; i /*found*/ max = min = _1_; px = pn = i; for (j=i+1; j /*found*/ if (max_3_) min = aj; pn = j; if (pn != i) t = ai; ai = min; ap
3、n = t; if (px = i) px =pn; if (px != i+1) t = ai+1; ai+1 = max; apx = t; main() int bN=9,1,4,2,3,6,5,8,7, i; printf(“/nThe original data :/n“); for (i=0; iprintf(“/n“); fun(b, N); printf(“/nThe data after moving :/n“); for (i=0; iprintf(“/n“); (分数:10.00)_2.给定程序 MODI1.C中函数 fun的功能是:用递归算法计算斐波拉契数列中第 n项的
4、值。从第 1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、 例如,若给 n输入 7,该项的斐波拉契数值为:13。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include long fun(int g) /*found*/ switch(g); case 0: return 0; /*found*/ case 1 ;case 2 : return 1 ; return( fun(g-1)+fun(g-2) ); main() long fib; int n; printf(“Input n: “)
5、; scanf(“%d“, printf(“n = %d/n“,n); fib=fun(n); printf(“fib = %d/n/n“,fib); (分数:10.00)_3.某学生的记录由学号、8 门课程成绩和平均分组成,学号和 8门课程的成绩已在主函数中给出。请编写函数 fun,它的功能是:求出该学生的平均分放在记录的 ave成员中。 例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。 注意: 部分源程序在文件 PROG1.C中。请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun部位中填入你编写的若干语句。
6、给定源程序: #include #define N 8 typedef struct char num10; double sN; double ave; STREC; void fun(STREC *a) main() STREC s=“GA005“,85.5,76,69.5,85,91,72,64.5,87.5; int i; fun( printf(“The %ss student data:/n“, s.num); for(i=0;i printf(“%4.1f/n“,s.si); printf(“/nave=%7.3f/n“,s.ave); NONO(); (分数:10.00)_全国
7、计算机二级 C语言上机试题 57+2015年答案解析(总分:30.00,做题时间:90 分钟)1.函数 fun的功能是:把形参 a所指数组中的最小值放在元素 a0中,接着把形参 a所指数组中的最大值放在 a1元素中;再把 a所指数组元素中的次小值放在 a2中,把 a所指数组元素中的次大值放在a3;其余以此类推。例如:若 a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形参 n中存放 a所指数组中数据的个数。 注意:规定 fun函数中的 max存放当前所找的最大值,px 存放当前所找最大值的下标。 请在程序的下划线
8、处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: # include #define N 9 void fun(int a, int n) int i,j, max, min, px, pn, t; for (i=0; i /*found*/ max = min = _1_; px = pn = i; for (j=i+1; j /*found*/ if (max_3_) min = aj; pn = j; if (pn != i) t = ai; ai = min; apn =
9、 t; if (px = i) px =pn; if (px != i+1) t = ai+1; ai+1 = max; apx = t; main() int bN=9,1,4,2,3,6,5,8,7, i; printf(“/nThe original data :/n“); for (i=0; iprintf(“/n“); fun(b, N); printf(“/nThe data after moving :/n“); for (i=0; iprintf(“/n“); (分数:10.00)_正确答案:(第一处:外循环每循环一次均把数组 a当前位置的值,分别赋值给 max和 min变量,
10、所以应填:ai。 第二处:判断 max是否小于 aj,若小于,则把 aj赋值给 max,所以应填:aj。 第三处:判断 min是否大于 aj,若大于,则把 aj赋值给 min,所以应填:aj。)解析:2.给定程序 MODI1.C中函数 fun的功能是:用递归算法计算斐波拉契数列中第 n项的值。从第 1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、 例如,若给 n输入 7,该项的斐波拉契数值为:13。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include long fun(int g) /*fo
11、und*/ switch(g); case 0: return 0; /*found*/ case 1 ;case 2 : return 1 ; return( fun(g-1)+fun(g-2) ); main() long fib; int n; printf(“Input n: “); scanf(“%d“, printf(“n = %d/n“,n); fib=fun(n); printf(“fib = %d/n/n“,fib); (分数:10.00)_正确答案:(第一处:switch 后有多余的分号。 第二处:case 1 后没有返回语句,也应该为 return 1;。所以应改为:ca
12、se 1: return 1; case2:return 1;。)解析:3.某学生的记录由学号、8 门课程成绩和平均分组成,学号和 8门课程的成绩已在主函数中给出。请编写函数 fun,它的功能是:求出该学生的平均分放在记录的 ave成员中。 例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。 注意: 部分源程序在文件 PROG1.C中。请勿改动主函数 main和其它函数中的任何内容,仅在函数 fun部位中填入你编写的若干语句。 给定源程序: #include #define N 8 typedef struct char num
13、10; double sN; double ave; STREC; void fun(STREC *a) main() STREC s=“GA005“,85.5,76,69.5,85,91,72,64.5,87.5; int i; fun( printf(“The %ss student data:/n“, s.num); for(i=0;i printf(“%4.1f/n“,s.si); printf(“/nave=%7.3f/n“,s.ave); NONO(); (分数:10.00)_正确答案:(void fun(STREC *a) int i ; for(i = 0 ; i ave = a-ave + a-si ; a-ave /= N ; )解析: