国家二级C语言机试(操作题)模拟试卷498
程序填空题
1. 给定程序中,函数fun的功能是:将NxN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
交换后为:
3 2 1
4 5 6
9 8 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
#define N 4
/********** found**********/
void fun (int【1】, int n)
{ int i,s;
/********** found**********/
for(【2】; i++)
{ s=t[i][i];
t[i] [i]=t[i] [n-i-1];
/*******found**********/
t[i] [n-l-i]=【3】;
}
}
main ()
{int t[][N]={21,12,13,24,25,
16,47,38,29,11,32,54,42,
21,33,10},i,j;
printf(\\
(1)t[][N] (2)i=0;i<n (3)s
解析:第一空:在主函数中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(lowhigh,查找结束。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#define N 10
/*********** found*********** /
void fun(int a[], int m)
{ int low=0,high=N-l,mid;
while (low<=high)
{ mid=(low+high)/2;
if(m<a[mid])
high=mid-l;
/*********** found*********** /
else If(m > a[mid])
low=mid+l;
else return(mid) ;
}
return(-1);
}
main ()
{int i,a[N]={-3,4,7,9,13,45,67,
89,100,180 },k,m;
printf (\\
(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)”应该改为“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中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(char *a, char *p)
{
}
main ()
{ char s[81],*t;
void NONO ();
printf(\\
char *q=a;
int j=0;
while(*q&&q<p){
if(*q !=’*’)a[j++]=*q;
q++;
}
while(*p)a[j++]=*p++;
a[j]=’\0’;
解析:(1)首先,主函数中使指针移到字符串的最后一个字符,对字符串由串尾开始进行操作。
(2)然后,指针由尾开始向头移动,查找第一个非“*”号字符,指针t指向后一个非“*”,即从最后一个非“*”,字符开始的字符都不需要删除,将前面的其他“*”号全部删除后,将尾部的“*”字符往前移动即可。
(3)确定了字符数组的最后一个字符非“*”后,调用fun函数,在fun函数中,将原串中由起始位置的字符开始到最后一个非“*”逐个查询该字符是否是“*”字符,如果是则删除,并将后面的字符往前移动;然后将t之后的字符移动到前面,最后在字符串的后面添加“’\\\\0’”即可。
本文档预览:3600字符,共3165字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载