1、国家二级( C语言)机试模拟试卷 283及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:计算形参 X所指数组中 N个数的平均值 (规定所有数均为正数 ),作为函数值返回;并将大于平均值的数放在形参 y所指数组中,在主函数中输出。 例如,有 10个正数: 46 30 32 40 6 17 45 15 48 26,平均值为: 30 500000 主函数中输出: 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意 :源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #in
2、clude #include #define N 10 double fun(double x, double*y) int i, j; double av; *found* av=【 1】; *found* for(i=0; iav)y【 3】 =xi; yj=一 1; return av; main() int i; double xN, yN; for(i=0; i=0; i+)printf (“ 5 1f“, yi); printf(“ n“); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:由形参给定 n个实数,输出平均值,并统计在平均值以上 (含平
3、均值 )的实数个数。 例如, n=8时,输入: 193 199, 195 673, 195 757, 196 051, 196 092,196。 596, 196 579, 196 763 所得平均值为: 195 838745,在平均值以上的实数个数应为: 5 请改正程序中的错误,使程序能输出正确的结果。 注意;不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include int fun(double x, int n) /*found*/ int j, c=0, double xa=0 0; for(j=0; jxa) c+; return c; main() doub
4、le x100=193 199, 195 673, 195 757, 196 051, 196 092,196 596, 196 579, 196 763); printf(“ d n“, fun (x, 8); 三、程序设计题( 40分) 3 假定输入的字符串中只包含字母和 号。请编写函数 fun,它的 功能是:使字符串的前导 号不得多于 n个;若多于 n个,则删除多余的 *号:若少于或等于 n个,则什么也不做,字符串中间和尾部的 *号不删除。 例如,字符串中的内容为: *A*BC*DEF*G*,若 n的值为 4,删除后,字符串中的内容应当是: *A*BC*DEF*G*;若 n的值为 8,则
5、字符串中的内容仍为 *A*BC*DEF*G*。 n的值在主函数中输入。在编写函数时,不得使用 C语言提供的字符串函数。 注意:部分源程序在文件 PROGl C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(char *a, int n) main() char s81; int n; void NONO(); printf(“Enter a string: n“); gets(s); printf(“Enter n: “); scanf(“ d“, &n); fun(s, n); printf(“T
6、he string after deleted: n“); puts(s); NONO(); void NONO() *本函数用于打开文件,输入数据,调用 函数,输出数据,关闭文件。 * FILE*in, *out; int i, n; char s81; in=fopen(“in dat“, “r“); out=fopen(“out dat“, “w“); for(i=0, iav)y【 3】 =xi; “是将 xi保存在 y所指的数组中, i是循环变量, j初始化为 0,故 y的计数变量为 j,故第三空处应为 “j+“。 二、程序修改题( 30分) 2 【正确答案】 (1)int j, c
7、=0, double xa=0 0; (2)if (xj=xa) 【试 题解析】 (1)第一标识下是两个变量定义语句,变量 j和 c是整型变量,而变量 xa是双精度浮点变量,应该分别定义,而不是在一个语句中,因此第一标识下应改成 “int j, c=0; doublexa=0 0; “。 (2)第二标识下是用 if判断 x啪是否大于等于 xa, “=“不是 C语言的运算符,在c语言中大于等于用 “=“表示,因此第二标识下应改成 “if(xjxa)“。 三、程序设计题( 40分) 3 【正确答案】 int i=0, k=0; char*t=a; while(*t=*) k+; t+; t=a ; if(kn) t=a+k n ; while(*t) ai=*t; i+; t+; ai=0; 【试题解析】 (1)首先由字符串头开始判断字符是否为 “*“号字符,如果字符是符号 “*“,则对 “*“号进行统计。 (2)根据统计的 “*“号数目结合题目中对 “*“号个数的要求,判断是执行对 “*“号的截取操作,还是什么都不用做。 (3)然后将其他的所有字符拷贝到字符串,最后记得在新串 s的末尾加上结束符“n“。