【真题1】 给定程序的功能是:在x 数组中放入n 个采样值,计算并输出方差值。 N (XK-X')^2 N XK S = Σ ─────,其中X' = Σ ─ K=1 N K=1 N 例如n=8,输入:193.199、195.673、195.757、196.051、196.092、 196.596、196.579、196.763 时,结果应为:1.135901。 #include < stdio.h >float fun(float x[], int n) { int j; float xa=0.0, s; /************found************/ for (j=0; j< ___1___; j++ ) xa += x[j]/n; /************found************/ s = ___2___; for (j=0; j< n; j++ ) /************found************/ s += (x[j]-xa)*(x[j]-xa)/___3___; return s; } main ( ) { float x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763}; printf("%f\n", fun (x, 8)); } 解析: 本题着重考察考生对C 语言中基本语法的掌握情况。 题中第一个空填"n":由程序可知,此处是设置循环的次数,其值是由主调函数 中的实参所确定。由于在主调函数中是以确定的值定义的,所以循环变量可以 由形参变量所确定也可以用主调函数中的确定值所确定。 题中第二个空填"0":由题意可知在此处为变量赋初值,根据题面公式设置 s=0。 题中第三个空填"n":此处是将题面中的公式转化为C 程序中的公式。由于本程 序用的是固定个数的采样值,所以也可以填入固定值。 答案:【1】n 【2】0 【3】n 【真题2】 给定程序modi.c 中,函数fun 的功能是:计算函数 F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x 和y 的值不等,z 和y 的值不 等。 例如,当x 的值为9、y 的值为11、z 的值为15时,函数值为-3.50。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < stdio.h >#include < math.h >#define FU(m,n) (m/n) float fun(float a,float b,float c) { float value; /************found************/ value=FU(a+b,a-b)+FU(c+b,c-b); /************found************/ Return(Value); } main() { float x,y,z,sum; printf("Input x y z: "); scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n",x,y,z); if (x==y||y==z) {printf("Data error!\n");exit(0);} sum=fun(x,y,z); printf("The result is : %5.2f\n",sum); } (2011年2月) 解析: 本题着重考察考生对C 语言中自定义语句以及基本语法的掌握情况。 本题中的第一个错误:如果按照原程序中的语句调用自定义语句,那么 value=a+b/a-b+c+b/c-b,/运算高于+运算,很显然不符合题意,a+b应 作为一个整体传递给m,需为其加括号,所以程序中语句"value=FU(a+b,ab)+ FU(c+b,c-b);"应改为"value=FU((a+b),(a-b))+FU((c+b),(c-b));"或 相同作用的语句。 本题中的第二个错误:C 语言中,命令单词应为小写,所以程序中语句 "Return(Value);"应改为"return(value);"或相同作用的语句。 【真题3】 请编一个函数 void fun(int tt[M][N],int pp[N]),tt 指向一个M 行N 列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二 维数组中的数已在主函数中赋予。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#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; clrscr(); 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"); } (2011年2月) 解析: 编写的若干语句: int i, j, min; for(i = 0; i < N; i++) { min = tt[0][i];/*将每列的第一个数赋值给min*/ for(j = 0; j < M; j++)/*将min 与该列中的每个数进行比较,并把最大的那 个数赋值给min*/ if (min > tt[j][i]) min = tt[j][i]; pp[i] = min; } 本题的考核点是C 语言中循环嵌套语句的使用。 提示思路:从题目的要求来看,我们应建立一个两重循环来按行、列寻找最小 元素。因为题目要求出每列中的最小元素,所以列循环应放在外面,行循环放 在里面。我们给出的参考函数中,定义了一个变量min 来保存最小元素,在行 循环中比较出最小元素,并在行循环结束时赋给数组pp的相应元素。 |