1、国家二级 C语言机试(操作题)模拟试卷 295及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将不带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为 2、 4、 6、 8、 10,逆置后,从头至尾结点数据域依次为10、 8、 6、 4、 2。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include stdlib h #define N 5 typedef struer node int data; struct nod
2、e*next; NODE; *found* 【 1】 *fun(NODE*h) NODE*P, *q, *r; p=h ; if(P=NULL) return NULL; q=P next; P next=NULL; while(q) *found* r=q 【 2】 ; q next=p; p=q; *found* q=【 3】 ; return P; NODE*creatlist (int a) NODE*h, *P, *q; int i; h=NULL; for(i=0; i N; i+) q=(NODE*)malloc(sizeof (NODE); q data=ai; q next=
3、NULL; if (h=NULL)h=p=q; elseP next=q; p=q; ) return h; void outlist(NODE*h) NODE*p; p=h; if(P=NULL) printf(“The list is NULL! n“); else printf(“ nHead“); do printf(“ d“, P data); p=p next; ) while(P!=NULL); printf(“ End n”); main() NODE*head; int aN=2, 4, 6, 8, 10; head=creatlist(a); printf(“ nThe o
4、riginal list: n“); outlist(head); head=fun(head); printf(“ nThe list after inverting: n“); outlist(head); 二、程序修改题 2 下列给定程序中 ,函数 fun的功能是:求 k!(k 13),所求阶乘的值作为函数值返回。例如,若 k=10,则应输出 3628800。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conjo h #include long fun(int k) *found* i
5、f k 1 return(k*fun(k 1); Eeturn 1; main() int k=10; printf(“ d!= ld n“, k, fun(k); 三、程序设计题 3 请编一个函数 void fun(int ttMN, int PPN), tt指向一个 M行 N列的二维数组,求出二维数组每列中最大元素,并依次放入 pp所指的一维数组中。二维数组中的数已在主函数中给出。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include conio h #
6、include stdio h #define M 3 #define N 4 void fun(int ttMN, int ppN) void main() int tMN=68, 32, 54, 12, 14, 24, 88, 58, 42, 22, 44, 56; int PN, i, j, k; system(“CLS“); printf(“The riginal data is: n“); for(i=0; i N; i+) for(j=0; j N; j+) printf(“ 6d“, tij); printf(“ n“); fun(t, P); printf(“ nThe res
7、ult is: n“); for(k=0; k N; k+) printf(“ 4d“, Pk); printf(“ n“); 国家二级 C语言机试(操作题)模拟试卷 295答案与解析 一、程序填空题 1 【正确答案 】 (1)NODE (2)next (3)r 【试题解析】 填空 1:本题考查了函数指针变量的函数返回值的类型,*fun(NODE, *h)的返回值为 p,而 p的数据类型为 NODE,因此本空应该填写NODE。 填空 2:从此空的形式 p可知本空应该填写 next。 填空 3:本题要求将不带头结点的单向链表逆置,为了使 q的指针向后移,此空应该填写 r。 二、程序修改题 2 【
8、正确答案】 if(k 1) 【试题解析】 本题考查: if语句,考生需要根据题意来确定 if语句是否是正确的, if条件语句经常考,考生 需掌握。 语法错误, if条件表达式应写在小括号内。 三、程序设计题 3 【正确答案】 void fun(int ttMN, int ppN) int i, j, max; for(j=0; j N; j+) max=tt0j; *假设各列中的第一个元素最大 * for(i=0; i M; i+) if(ttij max) *如果各列中的其他元素比最大值大,则将这个更大的元素看做当前该列中最大元素 * max=ttij; ppj=max; *将各列的最大值依次放入 pp数组中 * 【试题解析】 本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素进行比较。