1、二级 C 语言机试 56 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:计算下面公式的值 (k50): (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:输出 M 行 N 列整数方阵,然后求两条对角线上的各元素的平方和,返回此和数。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include conioh #include stdioh
2、 #define M 5 int fun(int n,int xxM) int i,j,sum=O; printf(“/nThe %d x %d matrix:/n“,M,M); for(i=0;iN;i+) for(j=0;jM;j+) /*found*/ printf(“%4d“,xxi j); /*found*/ printf(/n); for(i=0;in;i+) sum+=xxii*xxii+xxin-i-1 *xxin-i-1; return(sum); main() int aaMM=3,12,4,24,35, 11,3, 3,7, 56,61,27,58,49,24, 17,2
3、8,7,36,85,15,33,5,24,9; clrscr(); printf(“/nThe result of all elements on 2 diagnals iS%d“,fun(M,aa); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),其功能是:计算并输出下列多项式值。 S(1+1/2)+(1/3+1/4)+(1/(2n1)+l/2n) 例如,若主函数从键盘给 n 输入 12 后,则输出为 S=3.775958。 n 的值要求大于 1 但不大于100。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数
4、中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdioh double fun(int n) main() int n; double s; printf(“/nlnput n:“); scanf(“%d“,&n); s=fun(n); printf(“/ns=%f/n“,s);(分数:40.00)_二级 C 语言机试 56 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:计算下面公式的值 (k50): (分数:30.00)填空项 1:_ (正确答案
5、:1 1 2 k=n 3s*=f/p)解析:解析 填空 1:变量 s 存放最后的计算结果,由公式可知,计算结果为多个数的乘积,所以 s 应该初始化为 1。填空 2: for 循环的次数为 n,由公式可知,k 的取值应该从 1 到 n。填空 3:for 循环求出的 f 为(2k-1)2k+l,for 循环求出的 p 为(2k +1)2k-1,由公式可知,每项即为 f/p,所以此处应填s*=f/p。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:输出 M 行 N 列整数方阵,然后求两条对角线上的各元素的平方和,返回此和数。 请改正程序中的错误,使它能得
6、到正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include conioh #include stdioh #define M 5 int fun(int n,int xxM) int i,j,sum=O; printf(“/nThe %d x %d matrix:/n“,M,M); for(i=0;iN;i+) for(j=0;jM;j+) /*found*/ printf(“%4d“,xxi j); /*found*/ printf(/n); for(i=0;in;i+) sum+=xxii*xxii+xxin-i-1 *xxin-i-
7、1; return(sum); main() int aaMM=3,12,4,24,35, 11,3, 3,7, 56,61,27,58,49,24, 17,28,7,36,85,15,33,5,24,9; clrscr(); printf(“/nThe result of all elements on 2 diagnals iS%d“,fun(M,aa); (分数:30.00)填空项 1:_ (正确答案:(1)错误:printf(“%4d“,xxij); 正确:printf(“%4d“,xxij):)解析:(2) 错误:printf(/n); 正确:printr(“/n“); 解析 错误
8、1:此处考查的是对二维数组的引用方法。错误 2:此处考查的是输出语句的语法,括号中应该用双引号,而不是单引号。三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),其功能是:计算并输出下列多项式值。 S(1+1/2)+(1/3+1/4)+(1/(2n1)+l/2n) 例如,若主函数从键盘给 n 输入 12 后,则输出为 S=3.775958。 n 的值要求大于 1 但不大于100。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdioh double fun
9、(int n) main() int n; double s; printf(“/nlnput n:“); scanf(“%d“,&n); s=fun(n); printf(“/ns=%f/n“,s);(分数:40.00)_正确答案:()解析:double fun(int n) int i; double s=0.0; for(i=1;i=n;i+) /*计算 S=(1+l/2)+(1/3+1/4)+(1/(2n-1)+1/2n)*/ s=s+(1.0/(2*i-1)+1.0/(2*i); return s; 解析 本题中s=s+(1.0/(2*i-1)+1.0/(2*i);语句是用 C 程序去表达题目中的每一项,这是关键,其他问题不难理解。