1、国家二级 C语言机试(操作题)模拟试卷 82及答案与解析 一、程序填空题 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3门课的成绩。函数fun的功能是对形参 b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b所指变量 t中的学号、姓名、和三门课的成绩依次是: 10002、“ZhangQi“、 93、 85、 87,修改后输出 t中的数据应为: 10004、 “LiJie“、 93、 85、87。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序
2、的结构 ! #include #include struct student long sno; char name10; float score3; ; void fun(struct student; *b) /*found*/ b 1 =1 0 0 0 4; /*found*/ strcpy(b 2 , “LiJie“); main() struct student t=10002, “ZhangQi“, 93, 85, 87); int i ; printi(“nnThe original data: n“); printf(“nNo: id Name: snScores: “, t
3、sno, t name); for(i=0; i0 00001) y=fun(a, x1); else y=x1; retumR y; msin()double x; printf(“Enter x; “); scanf(“ 1f“, &x); printf (“The square root of lfis1fn“, x, fun(x, 1 0); 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是: 把高于等于平均分的学生数据放在 b所指的数组中,高 r等于平均分的学生人数通过形参 n传回,平均分通过函数值返回。
4、 注意:部分源程序在文件 PROG1 C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #define N 12 typedef struct char num10; double s; STREC; double fun(STREC*a, STREC*b, int*n) main() STREC sN=“GA05“, 85), “GA03“, 76, “GA02“, 69, “GA04“, 85, “GA01“, 91, “GA07“, 72), “GA08“, 64), “GA06“, 87), “GA09“,
5、60), “GAll“, 79), “GAl2“, 73), “GA10“, 90); STREC hN, t ; FILE*out; int i, j , n; double ave; ave=fun(s, h, &n); printf f“The d student data which i s higher than 7 3f: n“, n, ave); for(i=0; isno (2)-name (3)&t 【试题解析】 函数 fun的功能是对形参 b所指结构体变量中的数据进行修改。 第一空: “b_1_=10004; ”等号右边是整型值,故这 里是修改结构体成员sno的值, b是结
6、构体指针,访问结构体数据成员时使用 “ ”运算符,因此第一空为 “b-sno”。 第二空: “strcpy(b_2_, “LiJie“); ”, strcpy是字符串拷贝函数,因此这里是修改结构体的 name成员值,故第二空处为 “b-name”。 第三空: fun函数的定义形式是: void fun( struct STUdent*b),可知 fun的参数是指针,因此主函数内调用 fun函数时传入的参数是结构体 t的地址,故第三空处为“&t”。 二、程序修改题 2 【 正确答案】 (1)double fun(double a, double x0) (2)if(fabs(x1一 x0)0 0
7、0001) 【试题解析】 函数的功能是应用递归算法求某数 a的平方根。 (1)主函数中 “fun(x, 1 0)”, x是 double型变量, 1 0是浮点数,可知 fun有两个 double型参数,而第一标识下 “dounle”不是 C语言关键字,所以应将 “double fun(doublea, dounle x0)”改为 “double fun(double a,double x0)”。 (2)第二个标识下的 if语句是判断进行递归运算的条件,第二标识下变量 xo没有定义,根据题意,这里是判断 x1和 x0的差值的绝对值是否比 0 00001大,所以第二个标识下 “if(fabs(x1-x0)0 00001)”改为 “if(fabs(x1 x0)0 00001)”。 三、程序设计题 3 【正确答案】 double t=0; int i; *n=0; for(i=0; it)b (*n)+=ai; return t; 【试题解析】 该程序功能是把高于或等于平均分的学生数据放在 b所指的数组中,高于等于平均分的学生人数通过形参 n传回,平均分通过函数返回值返回。解题过程首先求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均分,存入指定数组。