1、国家二级 C语言机试(操作题)模拟试卷 265及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为 2、 4、 6、 8、 10,逆置后,从头至尾结点数据域依次为10、 8、 6、 4、 2。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include stdlib h #define N 5 typedef struct node int data; struct node
2、 * next; NODE; void fun(NODE*h) NODE*P, *q, *r; *found* P=h 【 1】 ; *found* if(p=【 2】 )return; q=P next; P next=NULL; while(q) r=q next; q next=p; *found* p=q; q=【 3】 ; h next=P; NODE*creatlist(int a) NODE*h, *P, *q; int i; h=(NODE*)malloc(sizeof(NODE); h next=NULL; for(i=0; i N; i+) q=(NODE*)malloc(
3、sizeof (NODE); q data=ai; q next=NULL; if(h next=NULL) h next=p=q; elseP next=q; p=q; ) return h; void outlist(NODE*h) NODE*P; P=h next; if(P=NULL) printf(“The list is NULL! n“); else printf(“ nttead“); do printf(“ d“, P data); p=P next; ) while(P!=NULL); printf(“ End n“); main() NODE*head; int aN=2
4、, 4, 6, 8, 10; head=creatlist(a); printf(“ nThe original list: n“); outlist(head); fun(head); printf(“ nThe list after inverting: n“); outlist(head); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:根据整型形参 n,计算如下公式的值。A1=1, A2= , , An= 例如,若 n=10,则应输出0 617977。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,
5、也不得更改程序的结构 !试题程序: 1 #include stdlib h 2 #include conio h 3 #include stdio h4 *found* 5 int fun(int n)6 float A=1; int i; 7 *found* 8 for(i=2; i n; i+)9 A=1 0 (1+A); 10 return A;11 12 void main()13 int n; 14 system(“CLS“); 15 printf(“ nplease enter n: “); 16 scanf(“ d“, &n); 17 printf(“A d= lf n“, n,
6、 fun(n); 18 三、程序设计题 3 某学生的记录由 学号、 8门课程成绩和平均分组成,学号和 8门课程的成绩已在主函数中给出,请编写函数 fun,其功能是:求出该学生的平均分,并放入记录的ave成员中。 例如,学生的成绩是: 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5,则他的平均分应为 78 875。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun部位中填入你编写的若干语句。 试题程序: #include stdio h #clefine N 8 typedef struct char num10; dou
7、ble sN; double ave; STREC; void fun(STREC*a) void main() STREC s=“GA005“, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5); int i; fun( s); printf(“The ss student data: n“, s num); for(i=0; i N; i+) printf(“ 4 1 f n“, s si); printf(“ nave= 7 3f n“, s ave); 国家二级 C语言机试(操作题)模拟试卷 265答案与解析 一、程序填空题 1 【正确答案】 (1)nex
8、t (2)NULL (3)r 【试题解析】 填空 1:本空考查了为 p赋初值,根据题目的要求是将带头结点的单向链表逆置可知, p的初值应该为 h next。 填空 2: if判断语句表明当 p等于什么时就要返回,因此只能当 p等于 NULL时返回,不用做后面的链表的逆置了。 填空 3:把 q的指针向后移动,才能实现将带头结点的单 向链表逆置。因此本空填写 r。 二、程序修改题 2 【正确答案】 (1)float fun(int n) (2)for(i=2; i n; i+) 【试题解析】 (1)根据函数的返回值可知,函数应定义为 float型。 (2)该题中函数 fun的作用是计算数列前 n项
9、的和,而数列的组成方式是:第 n项的分母是 1加第 n一 1项的值,分子为 1,如果循环累加按 for(i=2; i n; i+)执行,当输入 n=2时循环不会执行,程序将得不到想要的结果,因此循环变量的取值范围应包括 2,循环的条件为 i =n。 三、程序 设计题 3 【正确答案】 void fun(STREC*a) int i ; a ave=0 0; for(i=0; i N; i+) a aVe=a aVe+a si; *求各门课程成绩的总和 * a ave=a ave N; *求平均分 * 【试题解析】 本题考查自定义形参的相关知识点,程序流程为:在 fun函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参 STREC*a,此时,引用成员 的方式可以使用指向运算符,即 a ave和 asi,也可用 (*a) ave和 (*a) si。