1、国家二级 C语言机试(操作题)模拟试卷 149及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为: 10、 4、 2、 8、 6,排序后链表结点数据域从头至尾的数据为: 2、 4、 6、 8、 10。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 6 typedef struct node int data; s
2、truct node *next; NODE; void fun(NODE *h) NODE *p, *q; int t; P=h; while(p) *found* q=_1_; *found* while(_2_) if(p-dataq-data) t=p-data; P-data=q- data; q-data=t; ) q=q-next; *found* p=_3_; NODE *creatlist(int a) NODE *h, *p, *q; int i; h=NULL; for(i=0; idata=ai; q-next=NULL; if(h=NULL)h=p=q; elsep-
3、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=0, 10, 4, 2, 8, 6; head=creatlist(a); printf(“inThe original list: in“); ou
4、tlist(head); fun(head); printf(“inThe list after inverting: in“); outliSt(head); 二、程序修改题 2 给定程序 MODIl C中函数 fun的功能是:将 s所指字符串中的字母转换为按字母序列的后续字母 (但 Z转换为 A, Z转换为 a),其他字符不变。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include void fun *found* while( *s!=) if(*s=A & *s=a & *
5、s #define N 80 void fun(int *w, int P, int n) main() int aN=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); int i, p, n=15; void NONO(); printf(“The original data: n“); for(i=0; inext (2)q (3)p-next 【试题解析】 函数 fun的功能是将不带头节点的单向链表结点数据 域中的数据从小到大排序,在 fun函数内采用的是选择法排序。 第一空:由审题分析可知, q从 p的下一个元素开始寻找最小值,故第
6、一空为“p-next”。 第二空:由审题分析可知, “while(2)”是在剩下的元素当中找最小值,剩下的结点是由 q指向的链表,故第二空处的循环条件是 q不为 NULL链表就存在元素继续往后搜索,故第二空处为 “q”。 第三空:由审题分析可知, q指向 p的下一个结点,下次外循环进入时,继续寻找剩余结点的最小值,故第三空处应为 “p-next”。 二、程序修改题 2 【正确答案】 (1)while(*s) 或 while(*s!= 0)或 while(*s!=0) (2)s+; 【试题解析】 函数的功能是将字符串中的字母改为该字母序列的后续字母。 (1)第一个错误标识下的 “while(*s
7、!=)”语句原意是 s不指向字符串尾就进入下面的循环,所以对于指针判断不为尾符的语句应该是 “while(*s)”或者 “while(*s!= 0)”或者 “while(*s!=0)”。 (2)第二个标识下 “(*s)+; ”是对字符内容加 1,而原题是 对字符位置加 1,所以将其改为 “s+: ”。 三、程序设计题 3 【正确答案】 int i, j=0, bN; for(i=p+1; in; i+)bj+=wi; for(i=0; i=p; i+)bj+=wi; for(i=0; in; i+)wi: bi; 【试题解析】 该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。