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