1、国家二级 C语言机试(操作题)模拟试卷 339及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:有 NN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为 0。例如,若 N=3,有下列矩阵: 1 2 3 计算结果为 1 0 0 4 5 6 6 5 0 7 8 9 10 14 9 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出 正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 1 1 #include stdio h 2 #define N 4 3 *found* 4 voi
2、d fun(int(*t)_1_) 5 int i, j; 6 for(i=1 ; i N; i+) 7 ( for(j=0; j i; j+) 8 9 *found* 10 _2_=tij+tji; 11 *found* 12 _3_=0; 13 14 15 16 main() 17 int tN=21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21,33, 10, i, j; 18 printf( nThe originalarray: n); 19 for(i=0; i N; i+) 20 for(j=0; j N; j+) pri
3、ntf( 2d, tij); 21 printf( n); 22 23 fun(t); 24 printf( nThe result is: n); 25 for(i=0; i N; i+) 26 for(j=0 ; j N; j+)printf( 2d, tij); 27 printf( n); 28 29 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:计算正整数 num的各位上的数字之积。 例如,若输入: 252,则输出应该是: 20。若输入: 202,则输出应该是: 0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不
4、得更改程序的结构 ! 1 #include stdio h 2 long fun(long num) 3 4 *found* 5 long k; 6 do 7 k*=num 10; 8 *found* 9 num =10; 10 while(num); 11 return(k); 12 13 main() 14 long n; 15 printf( nPlease enter a number: ) scanf( 1d, n); 16 printf( n 1d n, fun(n); 三、程序设计题 3 请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主
5、函数中赋予。 例如:二维数组 中的值为: 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为 61。 注意:部分源程序存在文件 PROG1 C文件中。 请勿改动主函数 mare和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 l #include stdio h 2 #define M 4 3 #define N 5 4 int fun(int aMN) 5 6 7 8 main() 9 Int aaMN=1, 3, 5, 7, 9, 2, 9, 9, 9, 4, 6, 9, 9, 9, 8, 1,3, 5, 7, 0; 10 i
6、nt i, j, y; void NONO(); 11 printf(The original data is: n); 12 for(i=0; i M; i+) 13 for(j=0; j N; j+)printf( 6d, aaij); 14 printf( n); 15 16 y=fun(aa); 17 printf( nThe sum: d n, y); 18 printf( n); 19 NONO( ); 20 21 void NONO( ) 22 *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * 23 int i, j, y, k, aaMN; 24
7、 FILE *rf, *wf; 25 rf=fopen(in dat, r); 26 wf=fopen(out dat, w); 27 for(k=0; k 10; k+) 28 for(i=0; i M; i+) 29 for(j=0; j N; j+)fscanf(rf, d, 32 33 fclose(rf); 34 fclose(wf); 35 国家二级 C语言机试(操作题)模拟试卷 339答案与解析 一、程序填空题 1 【正确答案】 (1)N (2)tij (3) tji 【试题解析】 第一空:在主函数中 fun函数的调用形式是 “fun(t); ”, t是数组名,故 fun函数的参
8、数是指针,因此第一空处应为 “N”。第二空:“_2_=tij+tji; ”是将对称元素相加存放在左下三角元素中,左下三角元素可表示为 tij,故第二空处应为 “tij”。第三空: “_3_=0; ”是将右上三角元素置 0,右上三角元素可表示为 tji,故第三空为 “tii”。 二、程序修改题 2 【正确答案】 (1)long k=1; (2)num =10; 【试题解析】 (1)第一个错误标识下的 k是函数的返回值,子函数 fun中在执行“k*=num 10; ”之前,只进行了定义,却没有赋初值,编译时会警告变量在使用之前没有初始化 k。 k代表了各个位上的数字之积,其初值应为 1。因此,第一
9、个标识下的 “long k; ”改为 “long k=1; ”。 (2)第二个标识下的符号 “ ”是非法字符,根据题意,这里应该是进行除法运算,所以 “num =10; ”应该改为 “num =10; ”。 三、程序设计题 3 【正确答案 】 1 int tot=0, i, j; 2 for(i=0; i N; i+) 3 tot+=a0i; 4 tot+=aM-1i; 5 6 for(i=1; i M-1; i+) 7 tot+=ai0; 8 tot+=aiN-1; 9 10 return tot; 【试题解析】 进入 fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。