1、国家二级 C语言机试(操作题)模拟试卷 509及答案与解析 一、程序填空题 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】 = 10004; /* found*/ strcpy(b【 2】 , “LiJie“); main () struct student t=10002, “ZhangQi“,93,85,87 ; int i; printf(“nnThe original data:n“); printf(“nNo: %ld Name: %snScores: “,t
3、.sno, t.name); for (i=0; i0.00001)y=fun(a,xl) ; else y=xl; return y;main () double x;printf(“Enter x: “);scanf (“%lf“,printf(“The square root of %lfis %lfn“,x,fun(x,1.0) ) ; 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组s中,请编写函数 fun,它的功能是:把高于等于平均分的学生数据放在 b所指的数组中,高于等于平均分的学生人数通过形参 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“,60,“GA11“,79, “GA1
5、2“,73, “GA10“,90; STREC hN, t;FILE *out ; int i,j,n; double ave; ave=fun(s,h, printf(“The %d student data which is higher than %7. 3f:n“,n,ave); for(i=0;isno (2)一 name(3) t 【试题解析】 函数 fun的功能是对形参 b所指结构体变量中的数据进行修改。 第一空: “b【 1】 =10004; ”等号右边是整型值,故这里是修改结构体成员 sno的值, b是结构体指针,访问结构体数据成员 时使用 “-”运算符,因此,第一空为“b-
6、sno”。 第二空: “strcpy(b【 2】, ”LiJie”); ”, strcpy是字符串拷贝函数,因此,这里是修改结构体的 name成员值,故第二空处为 “b一 name”。 第三空: fun函数的定义形式是: void fun(structstudent *b),可知 fun的参数是指针,因此,主函数内调用 fun函数时传入的参数是结构体 t的地址,故第三空处为 “&t”。 二、程序修改题 2 【正确答案】 (1)double fun(double a, double x0) (2)if(fabs(x1 x0)0 00001) 【试题解析】 函数的功能是应用递归算法求某数 a的平方
7、根。 (1)主函数中 “fun(x,1 0)”, x是 double型变量, 1 0是浮点数,可知 fun有两个 double型参数,而第一标识下 “dounle”不是 C语言关键字,所以应将 “double fun(doublea, dounle x0)“改为 “double tim(double a,double x0)”。 (2)第二个标识下的 if语句是判断进行递归运算的 条件,第二标识下变量 xo没有定义,根据题意,这里是判断 x1和 x0的差值的绝对值是否比 0 00001大,所以第二个标识下 “if(fabs(x1-xo)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传回,平均分通过函数返回值返回。解题过程首先求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均分,存入指定数组。