1、国家二级 C语言机试(操作题)模拟试卷 204及答案与解析 一、程序填空题 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3门课的成绩。函数fun的功能是对形参 b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b所指变量 t中的学号、姓名、和三门课的成绩依次是:10002、 ”ZhangQi”、 93、 85、 87,修改后输出 t中的数据应为: 10004、 ”LiJie”、93、 85、 87。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl 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(“ n nThe original data: n“); printf(“ nNo: 1d Name: s nScores: “, t sno,
3、t name); for(i=0; i #include typedef struct aa int data; struct aa*next; NODE; int fun(NODE*h) f int sum=0 ; NODE*; *found* p=h ; while(P) if(p-data 2=0) sum+=p-data; *found* p=h-next; return sum; NODE*creatlink(int n) fNODE*h, *p, *s; int i; h=p=(NODE*)malloc(sizeof(NODE); for(i=1; idata=rand() 16;
4、 s-next=p-next; p-next。 s; p=p-next; p-next=NULL ; return h; outlink(NODE*h, FILE*pf) NODE*p; p=h-next; fprintf(pf, “ n nTHE LIST: nkn HEAD“); while(P) fprintf(pf, “- d“, p-data); p=p-next; fprintf(pf, “ n“); outresult(int s, FILE*pf) fprintf(pf, “ nThe sum of even numbers: d n“, s); ) msin() NODE *
5、head; int even; head=creatlink(12); head-data=9000; outlink(head, stdout); even=fun(head); printf(“ nThe result: n“); outresult(even, stdout); 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 S中,请编写函数 fun,它的功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序在文件 PROGl C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。
6、 #include #define N 16 typedef struct char num10; int s; STREC; void fun(STREC a) main() STREC sN=“GA005“, 85, “GA003“, 76, “GA002“, 69, “GA004“, 85, “GA001“, 91, “GA007“, 72, “GA008“, 64, “GA006“, 87, “GA015“, 85, “GA013“, 91, “GA012“, 64, “GA014“, 91, “GA011“, 66, “GA017“, 64, “GA018“, 64, “GA016“
7、, 72); int i; FILE*out; fun(s); printf(“The data after sorted: n“); for(i=0 ; isn0 (2)-name (3) t 【 试题解析】 第一空: “b_1_=10004: ”等号右边是整型值,故这里是修改结构体成员 sno的值, b是结构体指针,访问结构体数据成员时使用 “-”运算符,因此第一空为 “b-sno”。 第二空: “strcpy(b_2_, “LiJie“); ”, strcpy是字符串拷贝函数,因此这里是修改结构体的 name成员值,故第二空处为 “b-name”。 第三空: fun函数的定义形式是: v
8、oid fun(struct student b),可知 fun的参数是指针,因此主函数内调用 fun函数时传入的 参数是结构体 t的地址,故第三空处为“ t”。 二、程序修改题 2 【正确答案】 (1)p=h-next; (2)p=p-next; 【试题解析】 (1)根据题干中求得除了头结点之外的结点数据域中的最大值,头指针 h,工作指针 P指向头结点的下一个结点,所以第一个标识下的 “p=h; ”指向头结点应该改为指向下一个结点 “p=h-next; ”。 (2)工作指针 p,利用 p实现对链表的遍历, p表示指向链表的当前结点,所以指向下一个结点应该是 “p=p-next; ”。 三、程序设计题 3 【正确答案】 STREC tmp; int i, j ; for(i=0; iN; i+) for(j=i+1; jN; j+) if(ai saj s)( tmp=ai; ai=aj; aj=tmp; 【试题解析】 (1)在 fun函数中,通过循环对成绩记录进行排序。 (2)首次查找到最大的记录,第二次循环查找第二大的记录,依次实现对成绩记录的排序。