1、国家二级 C语言机试(操作题)模拟试卷 225及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:找出 NN矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 #define N 4 3 void fun(int(*a)N, int*b) 4 int i, j; 5 for(i=0; i N; i+) 6 *found* 7 bi=【 1】 ; 8
2、 for(j=1; j N; j+) 9 *found* 10 if(bi【 2】 aji) 11 bi=aji; 12 13 14 main() 15 int xNN=12, 5, 8, 7, 6, 1, 9, 3), 1, 2, 3, 4), 2, 8, 4,3, yN, i, j; 16 printf( nThe matrix: n); 17 for(i=0 ; i N; i+) 18 for(j=0 ; j N ; j+) 19 printf( 4 d, xij); 20 printf( n); 21 22 *found* 23 fun(【 3】 ); 24 printf( nThe
3、result is: ); 25 for(i=0; i N; i+) 26 printf( 3d, yi); 27 printf( n); 28 二、程序修改题 2 下列给定程序中函数 fun的功能是:根据整型形参 m,计算如下公式的值:例如,若 m的值为 5,则应输出1 463611。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #includeconio h 2 #include stdio h 3 double fun(int m)4 5 double y=1 0; 6 int i; 7 *found*
4、 8 for(i=2; i m; i+)9 *found* 10 y+=1 (i*i); 11 return(y); 12 13 main()14 15 int n=5; 16 printf( nThe result is 1 f n, fun(n); 17 三、程序设计题 3 编写函数 fun,其功能是:将两个两位数的正整数 a、 b合并成一个整数放在 c中。合并的方式是:将 a数的十位和个位数依次放存 c数的个位和百位上, h数的卜位和个位数依次放在 c数的千位和十位上。 例如,当 a=45, b=12时,调用该函数后, c=1524。 注意:部分源程序给出如下。数据文件 IN DAT中的
5、数据不得修改。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include conio h 2 #include stdio h 3 void fun(int a, int b, long*c) 4 5 6 7 main() 8 9 int a, b; 10 long c; 11 printf(Input a, b: ); 12 scanf( d d, a, b); 13 fun(a, b, c); 14 printf(The result is: 1d n, c); 15 国家二级 C语言机试(操作题)模拟试卷 225答
6、案与解析 一、程序填空 题 1 【正确答案】 (1)a0i (2) (3)x, y 【试题解析】 填空 1:数组 b用于存放每列元素中的最大值,首先将第 i列的第一个数赋给 bi,然后用 bi与其他数进行比较,因此此空应填 a0i。 填空 2: if条件表达式表示当 bi小于 aji时,就把 aji的值赋给 bi,因此此空应该填 。 填空 3: fun函数的调用,通过 fun(int(*a)N, int*b)可知,此空应该填 x, y。 二、程序修改题 2 【正确答案】 (1)for(i=2; i=m; i+) (2)y+=1 0 (i*i);或 y+=(double)1(i*i); 【试题解
7、析】 (1)根据公式可以知道 for循环语句中变量 i的取值范围应该包括m。 (2)变量 y是一个 double型变量,而 i是整型变量,所以要进行类型转换,改为y+=1 Q (i*i);或 y+=(double)1 (i*i);。 三、程序设计题 3 【正确答案】 1 void fun(int a, int b, long*c) 2 3 *b 10获取 b的个位 , a 10获取 a的十位, a 10获取 a的个位, b 10获取 b的十位 * 4 *c=a 10+(b 10)*10+(a 10)*100+(b 10)*1000; 5 【试题解析】 本题主要的问题是如何取出 a和 b的个位数和十位数,取出后如何表示成 c中相应的位数。由于 a和 h都是只有两位的整数,所以分别对它们除以10可得到它们的十位数,分别用 10对它们求余可得到它们的个位数。得到后对应乘以 1000、 100、 10、 1即可得到 c的千位数、百位数、十位数和个位数。注意使用 c时要进行指针运算。