1、国家二级 C语言机试(操作题)模拟试卷 252及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将不带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为 2、 4、 6、 8、 10,逆置后,从头至尾结点数据域依次为10、 8、 6、 4、 2。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include stdlib h 3 #define N 5 4 typedef struct node 5 int data;
2、6 struct node*next; 7 NODE; 8 *found* 9 【 1】 *fun(NODE * h) 10 NODE*p, *q, *r; 11 p=h; 12 if(p=NULL) 13 return NULL ; 14 q=p- next; 15 p- next=NULL; 16 while(q) 17 18 * found* 19 r=q- 【 2】 ; 20 q- next=p; 21 p=q; 22 *found* 23 q=【 3】 ; 24 25 return p; 26 27 NODE*creatlist(int a) 28 NODE*h, *p, *q; i
3、nt i ; 29 h=NULL; 30 for(i=0; i N; i+) 31 q=(NODE*)malloc(sizeof(NODE); 32 q- data=ai; 33 q- next =NULL; 34 if(h=NULL)h=p=q; 35 elsep- next=q; p=q; 36 37 return h; 38 39 void outlist(NODE*h) 40 NODE*p; 41 p=h; 42 if(p=NULL) 43 printf(The list is NULL! n); 44 else 45 printf( nHead); 46 do 47 printf(-
4、 d, p- data); 48 p=p- next; 49 while(p!=NULL); 50 printf(- End n); 51 52 53 main() 54 NODE * head; 55 int aN=2, 4, 6, 8, 10); 56 head=creatlist(a); 57 printf( nThe original list: n); 58 outliSt(head); 59 head=fun(head); 60 printf( nThe list after inverting: n); 61 outlist(head); 62 二、程序修改题 2 下列给定程序中
5、,函数 fun的功能是:对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并 将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdlib h 2 #include conio h 3 #include string h 4 #include stdio h 5 #include malloc h 6 #define N 10 7 typedef struct ss 8 9 char num
6、10; 10 int s; 11 STU; 12 STU*fun(STU a, int m) 13 14 STU bN, *t; 15 int i, j, k; 16 *found* 17 *t=calloc(m, sizeof(STU) 18 for(i=0; ibj s) 24 j=i; 25 *found* 26 tk num=bj num; 27 bj s=0; 28 29 return t; 30 31 outresult(STU a, FILE * pf) 32 33 int i; 34 for(i=0; i10) 49 50 printf( nGive the num-ber o
7、f the srudents who have better sCOre: ); 51 scanf( d, m); 52 pOrder=fun(a, m); 53 printf(*THE RESULT* n); 54 printf(The top: n); 55 for(i=0; i5 double fun(double x , int n)6 78 9 void main()10 11 FILE*wf; 12 system(CLS);13 printf( f, fun (0 3, 10); 14 * 15 wf=fopen(out dat, w); 16 fprintf(wf, f, fun
8、(0 3, 10); 17 fclose(wf);18 * 19 国家二级 C语言机试(操作题)模拟试卷 252答案与解析 一、程序填空题 1 【正确答案】 (1)NODE (2)next (3)r 【试题解析】 填空 1:本题考查了函数指针变量的函数返回值的类型,*fun(NODE * h)的返回值为 p,而 p的数据类型为 NODE,因此本空应该填写NODE。 填空 2:从此空的形式 p-可知本空应该填写 next。 填空 3:本题要求将不带头结点的单向链表逆置,为了使 q的指针向后移,此空应该填写 r。 二、程序修改题 2 【正确答案】 (1)t=calloc(m, sizeof(STU
9、); (2)tk=bj; 【试题解析】 (1)calloc应用于分配内存空间。调用形式为 (类型说明符*)calloc(n, size),功能:在内存动态存储区中分配 n块长度为 “size”字节的连续区域,函数的返回值为该区域的首地址, (类型说明符 *)用于强制类型转换。 calloc函数与 malloc函数的区别在于 calloc函数一次可以分配 n块区域。例如, ps=(struct stu*)calloc(2, sizeof(struct stu);,其中的 sizeof(struct stu)是求 stu的结构长度。该语句的意思是:按 stu的长度分配两块连续区域,强制转换为 st
10、u类型,并把其首地址赋予指针变量 ps。在本题中不用考虑那么复杂,根据定义类型 STU bN, *t;就可以看出 *t=calloc(m, sizeof(STU)中的错误,变量 t少 *号。 (2)tk num=bj num;的错误旨在考查对结构体概念的掌握和灵活应用程度。 三、程序设计题 3 【正确答案】 1 double fun(double x, int n) 2 3 int i; 4 double s=1 0, s1=1 0; 5 for(i=1 ; i=n; i+) 6 s1=s1*i; *各项中的阶乘 * 7 s=s+pow(x, i) s1; *按公式求出 * 8 9 return s; 10 【试题解析】 程序定义了变量 s1和 s, s1表示每项的分母 (即各项的阶乘 ), s存放累加和。循环语句控制累加的次数,在循环体中进行阶乘和累加操作,累加的结果存入 s中。此处使用了求乘方函数 pow(x, i),其含义是求 x的 i次方的值。