1、国家二级 C语言机试(操作题)模拟试卷 286及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值 (规定所有数均为正数 ),作为函数值返回,并将大于平均值的数放在形参 Y所指数组中,在主函数中输出。 例如,有 10个正数: 46、 30、 32、 40、 6、 17、 45、 15、 48、 26,其平均值为30 500000。 主函数中输出: 46 32 40 45 48。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件 BLANK1 C中 。 不得增行或删行,也不得更改程序的结构 ! 试题
2、程序: 1 #include stdlib h 2 #include stdio h 3 #define N 10 4 double fun(double x, double*y) 5 int i, j; double av; 6 *found* 7 av=【 1】 ; 8 *found* 9 for(i=0; i N; i+) 10 av=av+【 2】 ; 11 for(i=j=0; i N; i+) 12 *found* 13 if(xi av)Y【 3】 =xi; 14 yj= 1; 15 return av; 16 17 main() 18 int i; double xN, yN;
3、 19 for(i=0; i N; i+) 20 xi=rand() 50; 21 printf(“ 4 0 f“, xi)j) 22 printf(“ n“); 23 printf(“ nThe average is: f n“, fun(x, y); 24 for(i=0; Yi =0; i+) 25 printf(“ 5 1 f“, yi); 26 printf(“ n“); 27 二、程序修改题 2 下列给定程序中函数 fun的功能是:将 P所指字符串中的所有字符复制到 b中,要求每复制三个字符之后插入一个空格。 例如,若给 a输入字符串: “ABCDEFGHIJK”,调用函数后,字符
4、数组 b中的内容为: “ABC DEFGHI JK”。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*P, char*b) int i, k=0; while(*P) i=1; while(i =3&*P) *found* bk=P; k+; P+; i+; if(*P) *found* bk+=“ “; bk= 0; main() char a80, b80; printf(“Enter a string: “); gets(a); printf(“T
5、he original string: “); puts(a); fun(a, b); printf(“ nThe string after insert space: “); puts(b); printf(“ n n“); 三、程序设计题 3 请编写函数 fun,其功能是:找出一维整型数组元素中最大的值及其所在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。 主函数中 x是数组名, 11是 x中的数据个数, max存放最大值, index存放最大值所在元素的下标。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干
6、语句。 试题程序: #inclucle time h #include stdlib h #include stdio h void fun(int a , int n, int*max, int*d) void main() int i, x20, max, index, n=10; srand(unsigned)time(NULL); for(i=0; i =n ; i+) xi=rand() 50 ; printf(“ 4d“, xi); *输出一个随机数组 * printf(“ n“); fun(x, n, &max, index); printf(“Nax= 5d, Index= 4
7、d n“, max, index); 国家二级 C语言机试(操作题)模拟试卷 286答案与解析 一、程序填空题 1 【正确答案】 (1)0 0 (2)xi N (3)j+ 【试题解析】 填空 1:通过上面的程序可以看出此空考的是给变量赋初值, av代表的是平均值,因此 av的初值应该是 0 0。 填空 2:通过 for循环可知,此空代表求平均值,因此应该填写 xi N。 填空 3:先把大于 平均值的数放在形参 y所指数组中,然后使下标值加 1,因此此空应该填 j+。 二、程序修改题 2 【正确答案】 (1)bk=*p; (2)bk=; k+; 【试题解析】 本题考查:指针类型变量作为函数的参数
8、,函数的参数不仅可以是整型、实型、字符型等数据类型,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。 (1)题目中 p是指针型变量作函数参数,因此给 bk赋值时出现错误。 (2)题目要求复制三个字符后加一个空格,所以应该是先给 bk赋值空格,然后变量 k再加 1。 c语言 中为了表示指针变量和它所指向的变量之间的关系,在程序中用 “*”符号表示 “指向 ”,例如, pointer代表指针变量,而 *pointer是 pointer所指向的变量。 三、程序设计题 3 【正确答案】 void fun(int a, int n, int *max, int*d) int i; *max=a0; *d=0; for(i=1; i n; i+) *将最大的元素放入指针 max所指的单元,最大元素的下标放入指针 d所指的单元 * if(*max ai) *max=ai; *d=i; 【试题解析】 查找最大值及其下标需要定义两个变量,该程序直接使用形参 max和 d,由于它们都是指针变量,所以在引用它所指向的变量时要对它进行指针运算。循环语句用来遍历数组元素,条件语句用来判断该数组元素是否最大。