国家二级C语言机试(操作题)模拟试卷374
程序填空题
1.给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<string.h>
3 #define N 5
4 #define M 8
5 void fun(char(*ss)[M])
6 { char *ps[N],*tp;int i,j,k;
7 for(i=0;i<N;i++)ps[i]=ss[i];
8 for(i=0;i<N-1;i++) {
9 /**********found**********/
10 k= __1__;
11 for(j=i+1;j<N;j++)
12 /**********found**********/
13 if(strlen(ps[k] ) <strlen(__2__))k=j;
14 /**********found**********/
15 tp=ps[i];ps[i]=ps[k];ps[k]=__3__;
16 }
17 printf(’’\nThe string after sorting by length:\n\n’’);
18 for(i=0;i<N;i++)puts(ps[i]);
19 }
20 main()
21 {char ch[N][M]={’’red’’,’’green’’,’’blue’’,’’yellow’’,’’black’’};
22 int i;
23 printf(’’\nThe original string\n\n’’);
24 for(i=0;i<N;i++)puts(ch[i]); printf(’’\n’’);
25 fun(ch);}
(1)i (2)ps[j] (3)tp
解析:第一空:分析可知,fun函数采用的选择排序,在第一空处是初始化k。“for(j=i+1;j<N;j++)”循环是寻找长度最长的字符串,找到之后和k字符串交换,因此k从0开始,随着i变化,故第一空处应为’’i’’。
第二空:“if(strlen(ps[k])<strlen(__2__) k=j;”新的字符串ps[j]如果比ps[k]的长度长,那么k记录下新的最长的字符串的下标位置j,故第二空处应为“ps[j]”。
第三空:“tp=ps[i];ps[i]=ps[k];ps[k]=__3__;”是字符串地址交换,显然第三空处应是临时变量tp。
程序修改题
2.由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
1 #include<stdio.h>
2 #define N 10
3 /**********found**********/
4 void fun(int a[],int m)
5 { int low=0,high=N-1,mid;
6 while(low<=high)
7 (mid=(low+high)/2;
8 if(m<a[mid])
9 high=mid-1;
10 /**********found**********/
11 else Tf(m>a[mid])
12 low=mid+1;
13 else return(mid);
14 }
15 return(-1);
16 }
17 main()
18 {int i,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;
19 printf(’’a数组中的数据如下:’’);
20 for(i=0;i<N;i++) printf(’’%d’’,a[i]);
21 printf(’’Enter m:’’);scanf(’’%d’’,&m);
22 k=fun(a,m);
23 if(k>=0)printf(’’m=%d,index=%d\n’’,m,k);
24 else printf(’’Not be found!\n’’);
25 }
(1)int fun(int a[],int m) (2)else if(m>a[mid])
解析:(1)根据主函数中“k=fun(a,m);”,知道函数fun应该是返回int型的函数,所以第一个标识下面定义的“void fun(int a[],int m)”应该改为“int fun(int a[],int m)”。
(2)第二个标识下的“else If(m>a[mid])”是判断m是否比a[mid]大,在while循环中采用的是if-elseif-else语句,显然“else If”当中“If”应当小写,故第二标识下“else If(m>a[mid])”应改为“else if(m>a[mid])’’。
程序设计题
3.请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入XX所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。
注意:部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 void fun(int m, int k, int xx[])
3 {
4 }
5 Nain()
6 {
7 int m,n,zz[1000];void NONO();
8 pritf(’’\nPlease enter two integers:’’);
9 scanf(’’%d%d’’, &m, &n);
10 fun(m,n,zz);
11 for(m=0 ; m<n;m++)
12 printf(’’%d’’,zz[m]);
13 printf(’’\n’’);
14 NONO();
<本文档预览:3600字符,共4777字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载