国家二级C语言机试(操作题)模拟试卷360
程序填空题
1.给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<string.h>
3 #define M 5
4 #define N 20
5 int fun(char(*ss)[N],int *n)
6 { int i,k=0,len=N;
7 /**********found**********/
8 for(i=0;i< __1__;i++)
9 {len=strlen(ss[i]);
10 if(i==0) *n=len;
11 /**********found**********/
12 if(len __2__ *n)
13 {* n=len;
14 k=i ;
15 }
16 }
17 /**********found**********/
18 return(__3__);
19 }
20 main()
21 { char ss[M][N]={’’shanghai’’,’’guangzhou’’,’’beijing’’,’’tianjing’’,’’chongqing’’};
22 int n,k,i;
23 printf(’’\nThe original strings are:\n’’);
24 for(i=0;i<M;i++)puts(ss[i]);
25 k=fun(ss,&n);
26 printf(’’\nThe length of shortest string is:%d\n’’,n);
27 printf(’’\nThe shortest string is:%s\n’’,ss[k]);
28 }
(1)M (2)< (3)k
解析:第一空:循环的目的是在M个字符串中寻找长度最短的字符串,因此循环变量i从0变化到“M-1”,故第一空处应为“M”。
第二空:“*n”记录最小字符串的长度,由审题分析可知,字符串ss[i]长度比min小,则交换最小长度值和下标位置,故第二空处应为“<”。
第三空:变量k记录了最小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处应为“k”。
程序修改题
2.给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<stdlib.h>
3 typedef struct aa
4 {int data; struct aa *next;} NODE;
5 int fun(NODE *h)
6 { int sum=0;
7 NODE *p;
8 /**********found**********/
9 p=h;
10 while(p)
11 { if(p->data%2==0)
12 sum+=p->data;
13 /**********found**********/
14 p=h->next;
15 }
16 return sum;
17 }
18 NODE *creatlink(int n)
19 (NODE *h,*p,*s;
20 int i;
21 h=p=(NODE*)malloc(sizeof(NODE));
22 for(i=1;i<=n;i++)
23 {s=(NODE *)malloc(sizeof(NODE));
24 s->data=rand()%16;
25 s->next=p->next;
26 p->next=s;
27 p=p->next;
28 }
29 p->next=NULL;
30 return h;
31 }
32 outlink(NODE *h,FILE *pf)
33 {NODE *p;
34 p=h->next;
35 fprintf(Pf,’’in\nTHE LIST:in\n HEAD’’);
36 while(p)
37 {fprintf(pf,’’->%d’’,p->data); p=p->next;}
38 fprintf(pf,’’in’’);
39 }
40 outresult(int s,FILE *pf)
41 { fprintf(pf,’’\nThe sum of even numbers:%d\n’’,s);}
42 main()
43 { NODE *head;int even;
44 head=creatlink(12);
45 head->data=9000;
46 outlink(head,stdout);
47 even=fun(head);
48 printf(’’\nThe result:in’’); outresult(even,stdout);
49 }
(1)p=h->next; (2)p=p->next;
解析:(1)根据题干中求得除了头结点之外的结点数据域中的数据值,头指针h,工作指针p指向头结点的下一个结点,所以第一个标识下的“p=h;”指向头结点应该改为指向下一个结点“p=h->next;”。
(2)工作指针p,利用p实现对链表的遍历,p表示指向链表的当前结点,所以指向下一个结点应该是“p=p->next;”。
程序设计题
3.编写函数fun,它的功能是计算下列级数和,和值由函数值返回。
1 double s=1.0,y=x ;
2 int i;
3 long k=1;
4 for(i = 1 ; i <=n ; i++) {
5
本文档预览:3600字符,共3821字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载