知ing

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

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

゛Zirro、Y 上传

查看本书

41套: 

给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有 数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 

主函数中输出:m=30.0 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdlib.h> 

#define N 10 

double fun(double x[],double *av) 

{ int i,j; double d,s; 

s=0; 

for(i=0; i<N; i++) s = s +x[i]; 

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

__1__=s/N; 

d=32767; 

for(i=0; i<N; i++) 

if(x[i]<*av && *av - x[i]<=d){ 

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

d=*av-x[i]; j=__2__;} 

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

return __3__; 

main() 

{ int i; double x[N],av,m; 

for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} 

printf("\n"); 

m=fun(x,&av); 

printf("\nThe average is: %f\n",av); 

printf("m=%5.1f ",m); 

printf("\n"); 

解题思路: 

第一处:计算好的平均值通过形参av返回,所以应填:*av。 

第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。 

第三处:返回该数,所以应填:x[j]。 

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

给定程序MODI1.C中函数fun的功能是:根据整型形参n,计算如下公式的值。 

例如,若 n=10,则应输出: 0.617977。 

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

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

给定源程序: 

#include <stdio.h> 

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

int fun ( int n ) 

{ float A=1; int i; 

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

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

A = 1.0/(1+A); 

return A ; 

main( ) 

{ int n ; 

printf("\nPlease enter n: ") ; 

scanf("%d", &n ) ; 

printf("A%d=%f\n", n, fun(n) ) ; 

解题思路: 

第一处函数的返回是浮点型数所以应改为float fun(int n) 

第二处:for的终止条件应是i<=n。 

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

程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以。 

例如:若m的值为2数组中的值为 | 1 9 7 |  | 2 18 14|  | 2 3 8 | 则返回主程序后a数组中的值应为 | 2 6 16|  | 4 5 6 |  | 4 5 12| 

注意部分源程序存在文件PROG1.C文件中。 

请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

#include <stdlib.h> 

#define N 5 

int fun ( int a[][N], int m ) 

 

main ( ) 

{ int a[N][N], m, i, j; 

printf("***** The array *****\n"); 

for ( i =0; i<N; i++ ) 

{ for ( j =0; j<N; j++ ) 

{ a[i][j] = rand()%20; printf( "%4d", a[i][j] ); } 

printf("\n"); 

do m = rand()%10 ; while ( m>=3 ); 

printf("m = %4d\n",m); 

fun ( a ,m ); 

printf ("THE RESULT\n"); 

for ( i =0; i<N; i++ ) 

{ for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] ); 

printf("\n"); 

NONO ( ); 

解题思路: 

本题是利用两重循环给二维数组右上三角元素中的值乘以m。 

参考答案: 

int fun ( int a[][N], int m ) 

int i, j; 

for(i = 0 ; i < N ; i++) 

for(j = i ; j < N ; j++) 

 

a[i][j] *= m ; 

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


查看更多