1、国家二级 C语言机试(操作题)模拟试卷 106及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:将形参 n所指变量中,各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针 n传回所指变量。 例如,若输入一个数 27638496,则新数为 739。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(unsigned long*n) unsigned long X=0, i; int t; i
2、=1; while(*n) /*found*/ t=*n 【 1】 , /*found*/ if(t 2! =【 2】 ) X=x+t*i; i=i*10; *n=*n 10; /*found*/ *n=【 3】 ; main() unsigned long n=一 1; while(n 99999999 |n 0) printf(“Please input(0 n 100000000): ”); scanf(“ ld”, n);) fun( n); printf(“ nThe result is: ld n”, n), 二、程序修改题 2 下列给定程序中,函数 fun的功能是:计算并输出下列
3、级数的前 N项和 SN,直到SN+1的值大于 q为止, q的值通过形参传入。 例如,若q的值为 50 0,则函数值应为 49 394948。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h double fun(double q) int n; double s, t, n=2; s=2 0; while(s =q) t=S;/*found*/ s=s+(n+1) n; n+; printf(“n= d n”, n);/*found*/ retur
4、n S;main() printf(“ f n”, fun(50); 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 s中,清编写函数 fun,其功能是:把低于平均分的学生数据放入 b所指的数组中,低于甲均分的学生人数通过形参 n传回,平均分通过函数值返回。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define N 8 typedef struct char num10, double s; STREC; double
5、 fun(STREC*a, STREC*b, int*n) voidmain() STREC sN=“GA05”, 85, “GA03”, 76, “GA02”, 69, “GA04”, 85,“GA01”, 91, “GA07”, 72, “GA08”, 64, (“GA06”, 87, STREC hN; int i, n; double ave, ave=fun(s, h, n); printf(“The d student data which is lower than 7.3f: n”, n, ave); for(i=0; i n, i+) *输出成绩低于平均值的学生记录 * pr
6、intf(“ S 4 1fn”, hi num, hi S), printf(“n”); 国家二级 C语言机试(操作题)模拟试卷 106答案与解析 一、程序填空题 1 【正确答案】 (1)10 (2)0 (3)x 【试题解析】 填空 1:通过 t对 10求余,取出该数值的各个位。 填空 2:通过 if条件语句实现奇偶数的判定。如果条件表达式对 2求余为 0即为偶数,反之则为奇数。 填空 3:最后将剩余的数赋给 n所指向的元素。 二、程序修改题 2 【正确答案】 (1)s=s+(double)(n+1) n; (2)return t: 【试题解析】 (1)在 C语言中,整数除以整数得出的结果也是
7、整数,因此此处要转换数据类型。 (2)观察 while循环,如果返回变量是 8那么返回的是大于 q的值,而题中所要返回的是小于 q的值,所以应该返回变量 t。 三、程序设计题 3 【正确答案】 double fun(STREC*a, STREC*b, int *n int i, j=0; double av=0 0; for(i=0; i N, i+) av=av+ai s, av=av N; *求平均值 * for(i=0, i N, i+) if(ai s av)bj+=ai, *将低于平均值的学生记录存入结构体数组 b中 * *n=j; *指针传回低于平均值的学生 人数 * return av; *返回平均值 * 【试题解析】 本题使用循环语句和条件判断语句来实现程序操作,第 1个循环语句的作用是求出总分,然后求出平均分 av。第 2个循环的作用是将分数低于平均分的学生记录存入结构体数组 b中。