1、国家二级 C语言机试(操作题)模拟试卷 321及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:找出 NN矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: 1 #includestdioh 2 #define N 4 3 void fun(int(*a)N,int*b) 4 int i,j; 5 for(i=0;iN;i+)
2、 6 *found* 7 bi= 【1】 ; 8 for(j=1;jN;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;iN;i+) 18 for(j=0;jN;j+) 19 printf(“4d“,xij)j 20 printf(“n“); 21 22 *found* 23 fun( 【3】 ); 24 printf(“nThe result
3、 is:“); 25 for(i=0;iN;i+) 26 printf(“3d“,yi); 27 printf(“n“); 28 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中规定输入的字符串全部为字母,fun 函数的功能是:统计 a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。例如对于字符串:dadbcdbabdb,对应的输出应为:b 或 d。请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行。也不得更改程序的结构。
4、试题程序:#includestdioh#includestdioh#includestringhvoid fun(char a)int b2 6,i,n,max; for(i=0;i26;i+) *found* ai=0; n=strlen(a); for(i=0;in;i+) if(ai=aai=z) *found* baiA+; else if(ai=Aai=z) baiA+; max=0; for(i=1;i26;i+) *found* if(bmaxbi) max=i; printf(“出现次数最多的字符是:Cn”,max+a);main() char a200; printf(“请输
5、入一个待统计的字符串:“);scanf(“s“,a); fun(a);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a数组中的值为:0 1 2 7 91 9 7 4 52 3 8 3 14 5 6 8 25 9 1 4 1则返回主程序后 s的值应为 3375。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:1 #includ
6、estdioh2 #includeconioh3 #includeStdlibh4 #define N 55 double fun(int wN)6 78 9 void main()10 11 FILE*wf;12 int aNN=0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1);13 int i,j;14 double s;15 system(“CLS“);16 printf(“*The array*n“);17 for(i=0;iN;i+)18 for (j=0;jN;j+)19 printf(“4d“,aij);)20 print:f(
7、“n“);21 22 s=fun(a);23 printf(“*THE RESULT*n“);24 printf(“The sum is:lfn“,s);25 *26 wf=fopen(“outdat“,“w“);27 fprintf(wf,“lf“,s);28 fclose(wf);29 *30 (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 321答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:找出 NN矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入
8、正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: 1 #includestdioh 2 #define N 4 3 void fun(int(*a)N,int*b) 4 int i,j; 5 for(i=0;iN;i+) 6 *found* 7 bi= 【1】 ; 8 for(j=1;jN;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),y
9、N,i,j; 16 printf(“nThe matrix:n“); 17 for(i=0;iN;i+) 18 for(j=0;jN;j+) 19 printf(“4d“,xij)j 20 printf(“n“); 21 22 *found* 23 fun( 【3】 ); 24 printf(“nThe result is:“); 25 for(i=0;iN;i+) 26 printf(“3d“,yi); 27 printf(“n“); 28 (分数:2.00)_正确答案:(正确答案:(1)a0i (2) (3)x,y)解析:解析:填空 1:数组 h用于存放每列元素中的最大值,首先将第 i列的
10、第一个数赋给 bi,然后用bi与其他数进行比较,因此此空应填 a0i。 填空 2:if 条件表达式表示当 hi小于 aji时,就把 aji的值赋给 bi,因此此空应该填。 填空 3:fun 函数的调用,通过 tim(int(*a)N,int*b)可知,此空应该填 x,y。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中规定输入的字符串全部为字母,fun 函数的功能是:统计 a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。例如对于字符串:dadbcdbabdb,对应的输出应为:b 或 d。请改
11、正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行。也不得更改程序的结构。试题程序:#includestdioh#includestdioh#includestringhvoid fun(char a)int b2 6,i,n,max; for(i=0;i26;i+) *found* ai=0; n=strlen(a); for(i=0;in;i+) if(ai=aai=z) *found* baiA+; else if(ai=Aai=z) baiA+; max=0; for(i=1;i26;i+) *found* if(bmaxbi) max=
12、i; printf(“出现次数最多的字符是:Cn”,max+a);main() char a200; printf(“请输入一个待统计的字符串:“);scanf(“s“,a); fun(a);(分数:2.00)_正确答案:(正确答案:(1)bi=0; (2)bai一a+; (3)if(bmaxbi)解析:解析:要统计字符串中每个字符在这个字符串中出现的次数,可以设数组 b中存放每个字符出现的次数 h0存放字符 a的次数,b1存放字符 b的次数。统计之前为数组 b各元素赋初值为 0。然后依次取出字符串的每个字符进行判断,使对应数组 b加 1。max 初始值为 0,与数组 b中的每个元素进行比较,
13、如果小于,就把下标进行交换。 (1)数组 a存放的是字符串,数组 h为整型数组存放的是每个字符的个数,应将数组 b每个元素初始化为 0。 (2)小写字母的 ASCII码减去a的 ASCII即为相应字母的下标值,相应下标值的数组元素的值增加 1。 (3)最大值小于被比较数时,把被比较数的下标值赋给 max,max中存放的总是当前最大值。三、程序设计题(总题数:1,分数:2.00)3.下列程序定义了 NN的二维数组,并在主函数中赋值。请编写函数 fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的 s。例如,若 a数组中的值为:0 1 2 7 91 9 7 4 52 3 8
14、3 14 5 6 8 25 9 1 4 1则返回主程序后 s的值应为 3375。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:1 #includestdioh2 #includeconioh3 #includeStdlibh4 #define N 55 double fun(int wN)6 78 9 void main()10 11 FILE*wf;12 int aNN=0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1);13 int i,j
15、;14 double s;15 system(“CLS“);16 printf(“*The array*n“);17 for(i=0;iN;i+)18 for (j=0;jN;j+)19 printf(“4d“,aij);)20 print:f(“n“);21 22 s=fun(a);23 printf(“*THE RESULT*n“);24 printf(“The sum is:lfn“,s);25 *26 wf=fopen(“outdat“,“w“);27 fprintf(wf,“lf“,s);28 fclose(wf);29 *30 (分数:2.00)_正确答案:(正确答案:double
16、 fun(int wN) int i,j,k=0; double sum=00; for(i=0;iN;i+) for(j=0;jN;j+) if(i=0i=N1j=0j=N1)*只要下标中有一个为 0或 N1,则它一定是周边元素* sum=sum+wij;*将周边元素求和* k+; return sumk;*求周边元素的平均值* )解析:解析:本题要求计算二维数组周边元素的平均值,for 循环语句控制循环过程,if 条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。 本题采用逐一判断的方式,周边元素的规律为下标中有一个是 0或 N1,所以只要下标中有一个为 0或 N1,那么它一定是周边元素。计算周边元素个数的方式是当给 sum累加一个值时,k 也加 1。