知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

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; 

/ **********found**********/ 

max= ___1___; 

for(i=1; i<n; i++) 

/ **********found**********/ 

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"); 

/ **********found**********/ 

printf("\nName : %s, Age : %d\n", ___3___,max.age); 

解题思路: 

本题是从结构体中找出年龄最大的记录。 

第一处:给存放最大者max赋初值,所以应填:*std。 

第二处:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age。 

第三处:输出最大者的姓名和年龄,所以应填:max.name。 

*************************************************** 

给定程序MODI1.C中函数 fun 的功能是:实现两个整数的交换。 

例如给ab分别输入:60 和 65,输出为:a = 65 b = 60 

请改正程序中的错误,使它能得出正确的结果。 

注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

/ **********found**********/ 

void fun ( int a, b ) 

{ int t; 

/ **********found**********/ 

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指向一个MN列的二维数组,求出二维数组每列中最小元素,并依次放入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]) { 

\TAB min=tt[j][i] ; 

k = j ; 

pp[i] = tt[k][i] ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多