第78套:
给定程序中,函数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中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 4
void fun(int ___1___ , int n)
{ int i,s;
for(___2___; i++)
{ s=t[i][i];
t[i][i]=t[i][n-i-1];
t[i][n-1-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("\nThe original array:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%d ",t[i][j]);
printf("\n");
}
fun(t,N);
printf("\nThe result is:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%d ",t[i][j]);
printf("\n");
}
}
解题思路:
第一处:在函数体fun中,已经使用了t整型数组,所以应填:t[][N]。
第二处:要求填写for循环语句的初始值和终止值,所以应填:i=0;i<n。
第三处:交换变量的值,根据循环体中的语句可知,s是存放交换的中间变量,所以应填: s。
由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值, 则下一次的查找范围落在中间位置之后的元素中;反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
#define N 10
void fun(int a[], int m )
{ int low=0,high=N-1,mid;
while(low<=high)
{ mid=(low+high)/2;
if(m<a[mid])
high=mid-1;
else If(m > a[mid])
low=mid+1;
else return(mid);
}
return(-1);
}
main()
{ int i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m;
printf("a数组中的数据如下:");
for(i=0;i<N;i++) printf("%d ", a[i]);
printf("Enter m: "); scanf("%d",&m);
k=fun(a,m);
if(k>=0) printf("m=%d,index=%d\n",m,k);
else printf("Not be found!\n");
}
解题思路:
第一处:函数有返回值,不能定义为void,所以应改为:int fun(int a[],int m)。
第二处:if错定成If。
假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:除了尾部的号之外,将字符串中其它号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:ABCDEFG*****,删除后,字符串中的内容应当是: ABCDEFG*******。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
void fun( char *a, char *p )
{
}
main()
{ char s[81],*t;
printf("Enter a string:\n");gets(s);
t=s;
while(*t)t++;
t--;
while(*t=='*')t--;
fun( s , t );
printf("The string after deleted:\n");puts(s);
NONO();
}
解题思路:
本题是考察字符串的操作。
- 利用循环扫描出p指针左边的字符是否是’‘,如果不是’',则依次把这些字符移动原字符串a首地址开始存放。
- 把p指针所指的字符串也依次存放到字符串a中。
- 最后给字符串a加上结束符。
参考答案:
void fun( char *a, char *p )
{
char *q=a;
int j=0;
while(*q && q<p) {
if(*q != '*') a[j++] = *q ;
q++ ;
}
while(*p) a[j++]=*p++;
a[j]=0;
}