1、国家二级 C语言机试(操作题)模拟试卷 534及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 找出 NN矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 4 void fun(int(* a)N, int*b) int i, j; for(i=0; i N; i+) *found* bi=【 1】 ; for(j=1; j N;
2、 j+) 【 1】 if(bi【 2】 aji) bi=aji; main() int xNN=12, 5, 8, 7), 6, 1, 9, 3, 1, 2, 3, 4, 2, 8, 4, 3), yN, i, j; printf(“ nThe matrix: n“); for(i=0 ; i N; i+) for(j=0; j N; j+) printf(“ 4 d“, xij); printf(“ n“); *found* fun【 3】 ; printf(“ nThe result is: “); for(i=0; i N; i+) printf(“ 3d“, yi); printf(“
3、 n“); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:将主函数中 两个变量的值进行交换。例如,若变量 a中的值为 8, b中的值为 3,则程序运行后, a中的值为 3, b中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODII C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h *found* void fun(int x, int Y) int t; *found* t=X; X=Y; Y=t; void main() int a, b; a=8; b=3; fun( a
4、, b); print: f(“ d d n“, a, b); 三、程序设计题 3 编写函数 int fun(int lira, int aa MAX),其功能是求出小于或等于 lim的所有素数并放在 aa数组中,并返回所求出的素数的个数。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h #include stdlib h #define MAX 100 int fun(int lim, int aaMAX) void m
5、ain() FTLE*wf; int 1imit, i, sum; int aaMAX; systern(“CLS“); printf(“输入一个整数: “); Scarlf(“ d“, limit); sum=fun(limit, aa); for(i=0 ; i sum; i+) if(i 10=0 i!=0) *每行输出 10个数 * printf(“ n“); printf(“ 5d“, aai); * wf=fopen(“out dat, “, “W“); sum=fun(15, aa); for(i=0; i sum; i+) if(i 10=0 i!=0) *每行输出 10个数
6、* fprintf(wf, “ n“); fprintf(wf, “ 5 d“, aai); fclose(wf); * 国家二级 C语言机试(操作题)模拟试卷 534答案与解析 一、程序填空题 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)可知,此空应该填
7、x,y。 二、程序修改题 2 【正确答案】 (1)void fun( int*x, int*y) (2)t=*x; *x=*y; *y=t; 【试题解析】 (1)本题考查指针变量作函数参数。一般变量作参数时,不能改变实参的值,采用指针变量作为参数则能够改变实参的值。主函数中 fun函数的调用方式表明 fun函数的参数应当为指针类型。 (2)此处是一个变量交换操作错误,可知 x、 y是指针类型,变量类型不同,因而x、 y不能与 t进行值的交换。 三、程序设计题 3 【正确答案】 int fun (int lim, int aaMAX) int i, j, k =0; for(i=2; i =lim; i+) *求出小于或等于 lim的全部素数 * for(j=2, j i; j+) if (i j =0) break; if(j =i) aak+=i; *将求出的素数放入数组 aa中 * return k; *返回所求出的素数的个数 * 【试题解析】 本程 序如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。使用 for循环语句查找小于 lim的所有数,使用内嵌的循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素数的判定方法: for(j =2; j sqrt(i); j+) if(i j=0) break;