第59套:
给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。
例如,有下列矩阵:
1 2 13 4
7 8 10 6
3 5 9 7
程序执行结果为:find: a[2][2]=9
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define M 3
#define N 4
void fun(int (*a)[N])
{ int i=0,j,find=0,rmax,c,k;
while( (i<M) && (!find))
{ rmax=a[i][0]; c=0;
for(j=1; j<N; j++)
if(rmax<a[i][j]) {
rmax=a[i][j]; c= __1__ ; }
find=1; k=0;
while(k<M && find) {
if (k!=i && a[k][c]<=rmax) find= __2__ ;
k++;
}
if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]);
__3__ ;
}
if(!find) printf("not found!\n");
}
main()
{ int x[M][N],i,j;
printf("Enter number for array:\n");
for(i=0; i<M; i++)
for(j=0; j<N; j++) scanf("%d",&x[i][j]);
printf("The array:\n");
for(i=0; i<M; i++)
{ for(j=0; j<N; j++) printf("%3d",x[i][j]);
printf("\n\n");
}
fun(x);
}
解题思路:
本题是在矩阵中找出在行上最大、在列上最小的那个元素。
第一处:找出行上最大的数,并该位置j(列)保存在c中,所以应填:j。
第二处:使用while循环语句和控制变量find,如果该数不是列是最小数,那么把find置0,所以应填:0。
第三处:i是while的控制变量,所以每做一次循环,该数均要加1,所以应填:i++。
给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。
1 1 1
t = 1
22 33 m*m
例如,若 m 中的值为: 5,则应输出: 0.536389。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
double fun ( int m )
{ double y = 1.0 ;
int i ;
for(i = 2 ; i < m ; i++)
y -= 1 /(i * i) ;
return( y ) ;
}
main( )
{ int n = 5 ;
printf( "\nThe result is %lf\n", fun ( n ) ) ;
}
解题思路:
第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2; i<=m; i++)。
第二处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改
为y-=1./(i*i)。
m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4, below中的数据应为: 10、20、30、40。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
int fun(int score[], int m, int below[])
{
}
main( )
{ int i, n, below[9] ;
int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;
n = fun(score, 9, below) ;
printf( "\nBelow the average score are: " ) ;
for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ;
NONO() ;
}
解题思路:
本题是计算平均成绩,再把低于平均成绩的分数存入依次数组below中。
参考答案:
int fun(int score[], int m, int below[])
{
float av=0.0 ;
int i, j=0 ;
for(i=0; i<m; i++) av += score[i] ;
av /= m;
for(i=0; i<m; i++)
if(av>score[i]) below[j++]=score[i];
return j;
}