【真题1】 下列给定程序中,函数fun()的功能是:给定n 个实数,输出平均值, 并统计平均值以上(含平均值)的实数个数。例如,n=8 时,输入193.199, 195.673,195.757,196.051,196.092,196.596,196.579,196.763, 所得平均值为195.838745,在平均值以上的实数个数应为5。 试题程序: #include < conio.h >#include < stdio.h >int fun(float x[], int n) int j, c=0;float __1__; { for (j=0; j< n; j++) __2__; printf("ave=%f\n",xa); for (j=0; j< n;j++) if(__3__) c++; return c; } main() {float x[100]={ 193.199,195.673,195.757,196.051,196.092,196.596,196.579, 196.763}; clrscr (); printf("%d\n",fun (x,8)); } (2011年2月) 解析: 填空1:这是一道语法题,这里对某个实型变量进行声明,在函数中找 一下就会发现xa就是这个变量,但是还要注意一下,xa是一个累加变量,其 初值应该设为0.0。 填空2:函数一共有两个循环体,可以很容易地看出第二个循环是计算有多少个 大于平均分的人数,这里的作用也自然就是求平均值,因为循环就这一条语 句,其后没有对累加值求均值的语句,所以在这里要对累加值一并进行除n 运 算。 填空3:这里要将大于平均值的数字个数计算出来,利用循环和条件选择语句, 对x数组进行遍历,若某个值大于等于平均成绩,则将该元素累加计入c 中。 答案:【1】xa=0.0 【2】xa+=x[j]/n 【3】x[j] >=xa 【真题2】 给定程序modi.c 中,函数fun 的功能是:找出一个大于给定整数m且 紧随m 的素数,并作为函数值返回。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h >#include < stdio.h >int fun(int m) { int i,k; for (i=m+1;;i++) { for (k=2;k< i;k++) /************found************/ if (i%k!=0) break; /************found************/ if (k< i) return(i); } } main() {int n; clrscr(); printf("\nPlease enter n:"); scanf("%d",&n); printf("%d\n",fun(n)); } (2011年2月) 解析: 首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错 误的重要前提。 程序中的重要思想如下: 1、首先,要了解素数的意思,素数是指只能被1和它自身整除的数; 2、题目中要求找出一个大于给定整数 m 且紧随 m 的素数。 本题中的第一个错误:在函数fun()的嵌套循环的循环体中,语句"if (i % k != 0) break ;"是不正确的,结合程序上下文,程序是为了判断当前离m 最近的 整数是否可以为素数,如果它可以整除除了1 和它自身以外其他任意一个整 数,就说明它不是素数,所以应当更改为"if(i%k==0) break;"; 本题中的第二个错误:函数fun()中的第二个判断语句"if (k< i)"是不正确的, 应当更改为"if (i< =k)"。 【真题3】 请编写一个函数fun,它的功能是:求出一个M×N 二维数组每行元素的 和数, 并依次放入一个一维数组中传回主函数。例如,若有以下二维数组: 6 10 2 10 16 17 15 15 8 6 4 18 11 19 12 0 12 1 3 7 则输出:44 61 64 23 注意: 部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #define M 4 #define N 5 #include < stdio.h >fun ( int a[][N] ,int b[]) {……} main( ) { int x[M][N], y[M], i , j; printf("The %dx%d Array :\n",M,N); for ( i = 0 ; i < M; i++ ) { for ( j = 0 ; j < N ; j++ ) { x[i][j] = rand()%20; printf("%4d", x[i][j]); } printf("\n"); } fun (x , y ); printf("The sum of each line :\n"); for (i = 0 ;i < M ; i++) printf("%4d", y[i]); printf("\n"); } (2011年2月) 解析: 本题的考核点是数组和循环语句的嵌套。 提示思路:通过外循环控制数组的行下标,再使用内循环依次对行数组中的所 有元素求和,内循环结束后,将行元素的和存入另外一个数组中。 fun ( int a[][N] ,int b[]) { int i,j,sum=0,n=0; for(i=0;i< M;i++){ /*通过外循环控制数组的行下标*/ for(j=0;j< N;j++) /*使用内循环依次对行数组中的所有元素求和*/ sum+=a[i][j]; b[n++]=sum; /*将行元素的和存入数组b中*/ sum=0; } } |