第66套:
给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
typedef struct
{ char name[10];
int age;
}STD;
STD fun(STD std[], int n)
{ STD max; int i;
max= 1;
for(i=1; i<n; i++)
if(max.age<2) max=std[i];
return max;
}
main( )
{ STD std[5]={“aaa”,17,“bbb”,16,“ccc”,18,“ddd”,17,“eee”,15 };
STD max;
max=fun(std,5);
printf("\nThe result: \n");
printf("\nName : %s, Age : %d\n", 3,max.age);
}
解题思路:
本题是从结构体中找出年龄最大的记录。
第一处:给存放最大者max赋初值,所以应填:*std。
第二处:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age。
第三处:输出最大者的姓名和年龄,所以应填:max.name。
给定程序MODI1.C中函数 fun 的功能是:实现两个整数的交换。
例如给a和b分别输入:60 和 65,输出为:a = 65 b = 60
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
void fun ( int a, b )
{ int t;
t = b; b = a ; a = t;
}
main ( )
{ int a, b;
printf ( "Enter a , b : “); scanf ( “%d,%d”, &a, &b );
fun ( &a , &b ) ;
printf (” a = %d b = %d\n ", a, b );
}
解题思路:
第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int *a,int *b。
第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*b;*b=*a;*a=t;。
请编一个函数void fun(int tt[M][N ], int pp[N]),tt指向一个M行N列的
二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
#define M 3
#define N 4
void fun ( int tt[M][N], int pp[N] )
{
}
main( )
{ int t [ M ][ N ]={{22,45, 56,30},
{19,33, 45,38},
{20,22, 66,40}};
int p [ N ], i, j, k;
printf ( “The original data is : \n” );
for( i=0; i<M; i++ ){
for( j=0; j<N; j++ )
printf ( “%6d”, t[i][j] );
printf("\n");
}
fun ( t, p );
printf( “\nThe result is:\n” );
for ( k = 0; k < N; k++ ) printf ( " %4d “, p[ k ] );
printf(”\n");
NONO( );
}
解题思路:
本题是求出二维数组每列中最小元素,并依次放入pp所指一维数组中。
参考答案:
void fun ( int tt[M][N], int pp[N] )
{
int i,j, min, k ;
for(i = 0 ; i < N ; i++) {
min = tt[0][i] ; k = 0 ;
for(j = 1 ; j < M ; j++)
if(min > tt[j][i]) {
min=tt[j][i] ;
k = j ;
}
pp[i] = tt[k][i] ;
}
}