1、国家二级 C语言机试(操作题)模拟试卷 173及答案与解析 一、程序填空题 1 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数 fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #defitie N 8 typedef Struct list int data ; struct list*next: SLIST; void fun(SLIST
2、*h) SLIST*p, *q; p=h-next; if(p!=NULL) q=p-next; while(q!=NULL) if(p-data=q-data) p-next=q-next ; *found* free(_1_); *found* q=p-_2_; else p=q; *found* q=q-_3_; SLIST*creatlist(int*a) STIST*h, *p, *q; int i ; h=p=(SLIST*)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; p-next=0; return h; voi
3、d outlist(SLTST*h) SLIST*p; p=h-next ; if (p=NULL)printf(“ nThe list is NULL! n“); else printf(“ nHead“); do printf(“- d“, p-data); p=p-next; while(p!=NULL); printf(“-End n“); main() SLTST*head; int aN=1, 2, 2, 3, 4, 4, 4, 5; head=crearlist(a); prinLf(“ nThe list before deleting: n“); outlist(head);
4、 fun(head); printf(“ nThe list after deleting: n“); outliSt(head); 二、程序 修改题 2 给定程序 MODI1 C中函数 fun的功能是:按顺序给 s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若 s所指数组中元素的个数不是 5的倍数,多余部分忽略不计。 例如, s所指数组有 14个元素,则只对前 10个元素进行处理,不对最后的 4个元素求平均值。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 #i
5、nclude #define SIZE 20 fun(double*s, double*w) int k, i; double sum; for(k=2, i=0; i #include #define N 10 typedef struct ss char hum10; int s ; STU; 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
6、; printf(“*The original data * n“); for(i=0; idata=q-data)”成立则应该删除其中一个结点, “p-next=q-next; ”p指向 q的下一个结点,那么 q结点就可以删除了,因此第一空处应该为“free(q); ”。 第二空:在第一空处, q指向的结点已经被删除,如果要继续循环搜索数据域值相同的结点,那 么 q需要重新指向 p的下一个结点,因此第二空处应该为 “q=p-next; ”。 第三空:如果 “if(p-data=q-data)”不成立,那么 p和 q都向结点尾移动一个结点位置,因此第三空处应该是 “q=q-next; ”。 二
7、、程序修改题 2 【正确答案】 (1)sum=0 0; (2)if(i+1) 5=0) 【试题解析】 (1)在第一标识下 “sun=0 0; ”,根据题意,这是给 sum赋值,而sun没有定义编译时会提示错误,应改为 “sum=0 0; ”。 (2)错误标识下的 if判断语句是依顺序取五个字符, if中的逻辑表达式语法有误,由于 1 5恒等于 1,所以 i+1 5也就等价于 i+1了,所以将 “if(i+1 5=0)“改为 “if(i+1) 5=0)”,此处主要注意的是运算符的优先级。 三、程序设计题 3 【正确答案】 int i, msx=a0 s, j=0; for(i=1; iN; i+) i f(maxai s) j=i; msx=ai s; *s=aj; 【试题解析】 (1)首先指定第一个成绩为最 高分数。 (2)再使用一个 for循环把所有的成绩进行比较,找出最高的分数来。