1、国家二级( C语言)机试模拟试卷 184及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include typedef struct int num; char name10; PERSON; /*found*/ void fun(PERSON 【 1】 ) /*found*/ 【 2】 temp; if(std0.numstd1
2、.num) temp=std0; std0=std1; std1=temp; if(std0.numstd2.num) temp=std0; std0=std2; std2=temp; if(std1.numstd2.num) temp=std1; std1=std2; std2=temp; main() PERSON std= 5,“Zhanghu“,2,“WangLi“,6,“LinMin“ ; int i; /*found*/ fun(【 3】 ); printf(“nThe result is :n“); for(i=0; i #include typedef struct aa in
3、t data; struct aa *next; NODE; NODE *Creatlink(int n, int m) NODE *h=NULL, *p, *s; int i; /*found*/ p=(NODE )malloc(sizeof(NODE); h=p; p-next=NULL; for(i=1; idata=rand()%m; s-next=p-next; p-next=s; p=p-next; /*found*/ return p; outlink(NODE *h) NODE *p; p=h-next; printf(“nnTHE LIST :nn HEAD “); whil
4、e(p) printf(“-%d “,p-data); p=p-next; printf(“n“); main() NODE *head; head=Creatlink(8,22); outlink(head); 三、程序设计题( 40分) 3 已知学生的记录由学号和学习成绩构成, N名学生的数据已存入 a结构体数组中。请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数 (规定只有一个最低分 )。 注意:部分源程序存在文件 PROGl C文件中。 请勿改动主函数 main和其他函数中的任何内容。仅在函数 fun的花括号中填入你编写的若干语句。 #include #in
5、clude #define N 10 typedef struct ss char num10; int s; STU; void fun(STU a, STU *s) main() STU aN=”A01”, 81, ”A02”, 89, ”A03”, 66, ”A04”, 87, ”A05”, 77, ”A06”, 90, ”A07”, 79, ”A08”, 61, ”A09”, 80, ”A10”, 71, m; int i; void NONO(); printf (”*The original data * n”); for(i=0; istd1.num)”可知形参名为 std,故第
6、一空处应为 “void fun(PERSON *std)”。 第二空: temp变量用来进行交换时临时保存变量值,由 “temp=std0;”可知 temp是 PERSON结构体变量,故第二空处的 temp结构体定义应为 “PERSON temp;”。 第三空:这里是调用 fun函数, fun函数的参数是结构体变量指针, std是结构体数组,数组名相当于数组的首地址,故第三空处应为 “fun(std);”。 二、程序修改题( 30分) 2 【正确答案】 p=(NODE *)malloc(sizeof(NODE); return h; 【试题解析】 ( 1)第一标识下 “p=(NODE )mal
7、loc(sizeof(NODE);”, maclloc函数 的返回类型是 void* 类型,表示未确定类型的指针,因此需要指针类型转换,而“(NODE )”不是指针类型,故第一标识下应改成 “p=(NODE *)malloc(sizeof(NODE);”。 ( 2)第二个标识下,最后将单链表返回,应该是返回头指针 h指向的链表,而不是其中的一个节点 p,所以 “return p;”应该改为 “return h;”。 三、程序设计题( 40分) 3 【正确答案】 int i, min=a0 s, j=0; for(i=1; iai s) *7如果最低分 min 仍大于当前分 * j=i; *记住位置 * min=ai s; *把当前分赋值给 min* *s=aj; 【试题解析】 (1)首先指定第一个成绩为最低分数。 (2)再使用一个 for循环把所有的成绩进行比较,找出最低的分数来。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1