第95套:
给定程序中,函数fun的功能是:计算N×N矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
fun函数首先累加1、5、9,然后累加3、5、7,函数的返回值为30。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 4
fun(int t[][N], int n)
{ int i, sum;
___1___;
for(i=0; i<n; i++)
sum+=___2___ ;
for(i=0; i<n; i++)
sum+= t[i][n-i-___3___] ;
return sum;
}
main()
{ int t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j;
printf("\nThe original data:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%4d",t[i][j]);
printf("\n");
}
printf("The result is: %d",fun(t,N));
}
解题思路:
第一处:变量sum是用来存放主对角线元素和反向对角线元素之和,要对其进行初始化,所以应填:sum=0。
第二处:对主对角线元素值累加,所以应填:t[i][i]。
第三处:对反向对角线元素值累加,所以应填:t[i][n-i-1]。
例如,若给m输入 -100,给n输入90,则函数求得的一个根值为2.000。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
#include <math.h>
double funx(double x)
{ return(2*x*x*x-4*x*x+3*x-6); }
double fun( double m, double n)
{
int r;
r=(m+n)/2;
while(fabs(n-m)<0.001)
{ if(funx(r)*funx(n)<0) m=r; else n=r; r=(m+n)/2;
}
return r;
}
main( )
{ double m,n, root;
printf("Enter m n : \n"); scanf("%lf%lf",&m,&n);
root=fun( m,n );
printf("root = %6.3f\n",root);
}
解题思路:
第一处:变量r应该定义为实数型double或浮点型float变量。
第二处:while必须先满足条件,才做循环体的内容,所以应改为:while(fabs(m-n)>0.001)。
假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是: 除了字符串前导和尾部的号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:ABCDEFG*******,删除后,字符串中的内容应当是:ABCDEFG****。在编写函数时,不得使用C语言提供的字符串
函数。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
void fun( char *a, char *h,char *p )
{
}
main()
{ char s[81],*t, *f;
printf("Enter a string:\n");gets(s);
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun( s , f,t );
printf("The string after deleted:\n");puts(s);
NONO();
}
解题思路:
本题是考察字符串的操作。
- 把r指针左边的字符仍存放字符串a首地址开始的位置上。
- 把r指针和p指针中间的字符进行判断,其字符是否是’‘,如果不是’',则把这些字符放到第1步操作字符串a的后面。
- 把p指针右边的字符放到第2步操作字符串a的后面。
- 最后给字符串a加上结束符。
参考答案:
void fun( char *a, char *h,char *p )
{
int j=0;
char *q=a;
while(*q && q < h) a[j++] = *q++ ;
while(*h && *p && h < p) {
if(*h != '*') a[j++] = *h ;
h++;
}
while(*p) a[j++] = *p++ ;
a[j] = 0 ;
}