1、国家二级( C语言)机试模拟试卷 352及答案与解析 一、程序填空题( 30分) 1 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数 fun的功能是:把形参 x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 8 typedef struct list int data; struct list *n
2、ext; SLIST; void fun(SLIST *h, int x) SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST); /*found*/ s-data=【 1】 ; q=h; p=h-next; while(p!=NULL p=p-next; s-next=p; /*found*/ q-next=【 3】 ; SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=
3、q; p-next=0; return h; void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(“nThe list is NULL!n“); else printf(“nHead“); do printf(“-%d“,p-data); p=p-next; while(p!=NULL); printf(“-Endn“); main() SLIST *head; int x; int aN=11,12,15,18,19,22,25,29; head=creatlist(a); printf(“nThe list befor
4、e inserting:n“); outlist(head); printf(“nEnter a number : “); scanf(“%d“, fun(head,x); printf(“nThe list after inserting:n“); outlist(head); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:先将在字符串 s中的字符按正序存放到 t串中,然后把 s中的字符按逆序连接到 t串的后面。 例如:当 s中的字符串为: ”ABCDE”时,则 t中的字符串应为: ”ABCDEEDCBA”。 请改正程序中的错误,使它能得出正确的结果 。 注
5、意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include #include void fun (char *s, char *t) int i, s; sl = strlen(s); /*found*/ for(i=0; idata=x;”。 第二空:循环 “while(p!=NULL”是找到下一个结点的地址,变量 q用来保存当前结点的地址,因此第二空处应该是 “q=p;”。 第三空: “s-next=p;”将 s插入链表当中, s指向 p,此时 s结点已经指向需 要插入位置的下一个节点,因此在需要插入 s结点的位置的上一个结点需要指向 s结点,故第三处应该为 “q-next=s;”。 二、程序修改题( 30分) 2 【正确答案】 sl tsl+sl=0 【试题解析】 ( 1)编译程序后可知, for( i=0; i=j”,包括对角线。 ( 2)依次访问二维数组,把符合条件的元素的值乘以 n。