国家二级C语言机试(操作题)模拟试卷698
程序填空题
1.给定程序中,函数fun的功能是:将N×N矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
交换后为:
3 2 1
4 5 6
9 8 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #define N 4
3 /**********found**********/
4 void fun(int __1__,int n)
5 { int i,s;
6 /**********found**********/
7 for( __2__ ;i++)
8 { s=t[i][i];
9 t[i][i]=t[i][n-i-1];
10 /**********found**********/
11 t[i][n-1-i]=___3 ___;
12 }
13 }
14 main()
15 {int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
16 printf(’’\nThe original array:\n’’);
17 for(i=0;i<N;i++)
18 { for(j=0,j<N;j++)printf(’’%d’’,t[i][j]);
19 printf(’’\n’’);
20 }
21 fun(t,N);
22 printf(’’\nThe result is:\n’’);
23 for(i=0;i<N;i++)
24 { for(j=0; j<N; j++)printf(’’%d’’,t[i][j]);
25 printf(’’\n’’);
26 }
27 }
(1)t[][N]
(2)i=0;i<n
(3)s
解析:函数fun的功能是将N×N矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换,在N×N的矩阵t中,i标识行下标,对角线元素为t[i][i],反向对角元素为t[i][N-i-1]。
第一空:在主函数中fun函数的调用形式是“fun(t,N);”,t是二维数组名,故fun函数的第一个参数为指针,因此,第一空处应为“t[][N]”。第二空:fun函数的第二个参数n指明了矩阵的大小为n,对角线元素与反向对角线元素有n个,故循环有n次,因此,变量i从0开始,到n.1结束,因此,第一空处应为“i=0;i<n”。第三空:循环体内部是对角线元素与反向对角线元素的交换,“s=t[i][i];”s保存了对角元素t[i][i],故,第三处应填“s”。
程序修改题
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=(10w+high)/2;
8 if(m<a[mid])
9 high=mid-1;
10/**********found**********/
11 else If(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)该题中函数功能是利用折半查找算法查找整数m在数组中的位置。其中,折半查找法是在有序数组中进行的,过程是先将待找的数和数组中间的元素进行比较,若待找的数大于数组中间元素的值,就在数组的后一半继续查找,若待找的数小于数组中间的值,就在数组的前一半继续查找,然后在取新区间的中间元素进行比较,不断重复以上过程,直到找到待找的元素为止。
(2)从己给定源程序的main主函数开始入手,从键盘输入获得要查找的值m“scanf(’’%d’’,&m);”,调用函数fun来实现折半查找。
(1)根据主函数中“k=fun(a,m);”,知道函数fun应该是返回int型的函数,所以第一个标识下面定义的“void fun(int a[],int m)”应该改为“intfun(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])”应改为“elseif(m>a[mid])”。
程序设计题
3.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参p己指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG*******。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数m
本文档预览:3600字符,共5211字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载