1、国家二级 C语言机试(操作题)模拟试卷 389及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数 fun的功能是:把形参 x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includestdlibh3 #define N 84
2、 typedef struct list5 int data;6 struct list *next;7 SLIST;8 void fun(SLIST *h,int x)9 SLIST *p,*q,*s;10 s=(SLIST *)malloc(sizeof(SLIST);11 *found*12 s-data= _1_;13 q=h;14 p=h-next;15 while(p!=NULL xp-data)16 *found*17 q=_2_;18 p=p-next;19 20 s-next=p;21 *found*22 q-next=_3_;23 24 SLIST*creatliSt(in
3、t *a)25 SLIST *h,*p,*q;int i;26 h=p=(SLIST *)malloc(sizeof(SLIST);27 for(i=0;iN;i+)28 q=(SLIST *)malloc(sizeof(SLIST);29 q-data=ai;p-next=q;p=q;30 31 p-next=0;32 return h;33 34 void outlist(SLIST *h)35 SLIST *p;36 p=h-next;37 if(p=NULL)printf(nThe list is NULL!n);38 else39 printf(nHead);40 do printf
4、(-d,p-data); p=p-next; while(p!=NULL);41 printf(-Endn);42 43 44 main()45 SLIST *head;int x;46 IntaN=11,12,15,18,19,22,25,29;47 head=creatlist(a);48 printf(nThe list before inserting:n);outlist(head);49 printf(nEnter a number: ); scanf(d,x);50 fun(head,x);51 printf(nThe list after inserting:n);outlis
5、t(head);52 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 modi1c 的主函数中,将 a、b、c 三个结点链成一个单向链表,并给各结点的数据域赋值,函数 fun()的作用是:累加链表结点数据域中的数据作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。1 #includestdioh2 typedef struct list3 int data;4 struct list *next;5 LIST;6 int fun(LIST *h)7 LIST *p;8
6、*found*9 int t;10 p=h;11 *found*12 while(*p)13 14 *found*15 t=t+pdata;16 p=(*p)next;17 18 return t;19 20 main()21 LIST a,b,c,*h;22 adata=34;bdata=51;23 cdata=87;cnext=0;24 h=a;anext=17 printf(The top:s,dn, mnum,ms);18 NONO();19 20 NONO()21 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 *22 FILE *rf,*wf;23 STU a N,
7、m;24 int i;25 rf=fopen(indat,r);26 wf=fopen(outdat,w);27 for(i=0 ; i10; i+) fscanf(rf,sd,ainum,ais);28 fun(a,38 else39 printf(nHead);40 do printf(-d,p-data); p=p-next; while(p!=NULL);41 printf(-Endn);42 43 44 main()45 SLIST *head;int x;46 IntaN=11,12,15,18,19,22,25,29;47 head=creatlist(a);48 printf(
8、nThe list before inserting:n);outlist(head);49 printf(nEnter a number: ); scanf(d,x);50 fun(head,x);51 printf(nThe list after inserting:n);outlist(head);52 (分数:2.00)_正确答案:(正确答案:(1)x (2)p (3)s)解析:解析:第一空:“s=(SLIST *)malloc(sizeof(SLIST);”显然 s是一个新结点,第一空处是给新结点的数据域赋值 x,因此第一空处应该是“s-data=x;”。 第二空:循环“while(
9、p!=NULL24 h=a;anext=17 printf(The top:s,dn, mnum,ms);18 NONO();19 20 NONO()21 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 *22 FILE *rf,*wf;23 STU a N,m;24 int i;25 rf=fopen(indat,r);26 wf=fopen(outdat,w);27 for(i=0 ; i10; i+) fscanf(rf,sd,ainum,ais);28 fun(a, 6 *s=aj;)解析:解析:该程序功能是求最高分数的学生。本题是关于求解结构体中某些成员的最大值,首先将第一个值设定为最大值,并在循环中将其他所有值与该值进行比较,求得最大值。然后将最大值与所有值进行比较,求得所有的最大值。