1、国家二级 C语言机试(操作题)模拟试卷 242及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为: 10、 4、 2、 8、 6,排序后链表结点数据域从头至尾的数据为: 2、 4、 6、 8、 10。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BIANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #include stdlib h 3 #define N 6 4 typede
2、f struct node 5 int data; 6 struct node*next; 7 NODE; 8 void fun(NODE*h) 9 NODE*p, *q; int t; 10 *found* 11 p=【 1】 ; 12 while(p) 13 *found* 14 q=【 2】 ; 15 while(q) 16 *found* 17 if(p- data 【 3】 q-data) 18 t=p- data; 19 p- data=q- data; 20 q- data=t; 21 q=q- next; 22 23 p=p- next; 24 25 26 NODE* crea
3、tlist(int a) 27 NODE*h, *p, *q; int i; 28 h=(NODE*)malloc(si zeof (NODE); 29 h- next=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- next=NULL) 35 h- next=P=q; 36 elsep- next=q; p=q; 37 38 return h; 39 40 void outlist(NODE*h) 41 NODE*p; 42 p=h- n
4、ext; 43 if(p=NULL) 44 printf(The list is NULL! n); 45 else 46 printf( nHead); 47 do 48 printf(- d, p- data); 49 p=p- next; 50 while(p!=NULL); 51 printf(- End n); 52 53 54 main( ) 55 NODE*head; 56 int aN=0, 10, 4, 2, 8, 6; 57 head=creatlist(a); 58 printf( nThe original list: n); 59 outlist(head); 60
5、fun(head); 61 printf ( nThe list after sor-ting: n); 62 outlist(head); 63 二、程序修改题 2 下列给定程序中,函数 fun的功能是:根据整型形参 n,计算如下公式的值。例如,若 n=10,则应输出 0 617977。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdlib h 2 #include conio h 3 #include stdio h 4 *found* 5 int
6、 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= if n, n, fun(n); 18 三、程序设计题 3 下列程序定义了 NN的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返同给主函数中的 S。例如,若
7、a数组中的值为: 0 1 2 7 9 1 9 7 4 5 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1 则返回主程序后 s的值应为 3 375。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: 1 #include stdio h 2 #include conio h 3 #include stdlib h 4 #define N 5 5 double fun(int wN) 6 7 8 19 void main() 10 11 FILE*wf; 12 int aNN=0,
8、1, 2, 7, 9, 1, 9, 7, 4, 5, 2, 3, 8, 3, 1, 4, 5, 6,8, 2, 5, 9, 1, 4, 1; 13 int i, j; 14 double s; 15 system(CLS); 16 printf(*The array* n); 17 for(i=0; inext(2)p-next(3) 【试题解析】 填空 1:本题考查了指针变量 p赋初值,使 p指向链表的头结点的下一个结点,因此本空应该填写 h-next。 填空 2:本空考查了 q的作用, q代表 p的下一个数,因此次空应该填写 p-next。 填空 3: if判断句是比较链表中相邻两个数的大
9、小,如果 p-dataq-data就交换这两个数的值,因而此空填写 。 二、程序修改题 2 【正确答案】 (1)float fun(int n) (2)for(i=2: i=n; i+) 【试题解析】 (1)根据函数的返回值可知,函数应定义为 float型。 (2)该题中函数 fun的作川是计算数列前 n项的和,而数列的组成方式是:第 n项的分母是 1加第 n-1项的值,分子为 1,如果循环累加按 for(i=2; in; i+)执行,当输入 n=2时循环不会执行,程序将得不到想要的结果,因此循环变量的取值范围应包括 2,循环的条件为 i=n。 三、程序设计题 3 【正确答案】 1 doubl
10、e fun(int wN) 2 3 int i, j, k=0; 4 double sum=0 0; 5 for(i=0; iN; i+) 6 for(j=0 ; jN; j+) 7 if(i=0 i=N-1 j=0 j=N-1) *只要下标中有一个为 0或 N-1,则它一定是周边元素 * 8 sum=sum+wij; *将周边元素求和 * 9 k+; 10 11 return sum k; *求周边元素的平均值 * 12 【试题解析】 本题要求计算二维数组周边元素的平均值, for循环语句控 制循环过程, if条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。 本题采用逐一判断的方式,周边元素的规律为下标中有一个是 0或 N-1,所以只要下标中有一个为 0或 N-1,那么它一定是周边元素。计算周边元素个数的方式是当给 sum累加一个值时, k也加 1。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1