1、国家二级( C语言)机试模拟试卷 314及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值 (规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数: 46 30 32 40 6 17 45 15 48 26,平均值为: 30 500000 移动后的输出为: 30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意
2、:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 10 double fun(double *x) int i, j; double av, yN; av=0; *found* for(i=0; i #include *found* void fun(char s, char t) int i, d; d=strlen(s); for(i=0; i #include void fun(char *str) main() char str81; void NONO(); printf(“Input
3、 a string: “); gets(str); puts(str); fun(str); printtf(“*str: s n“, str); NONO(); void NONO() *请在此函数内打开文件,输入调试数据, 调用 fun函数,输出数据,关闭文件。 * char str81; int n=0; FILE*rf, *wf; rf=fopen(“in dat“, “r“); wf=fopen(“out clat“, “w“); whi1e(n10) fgets(str, 80, rf); fun(str); fprintf(wf, “ s“, str); n+ ; fclose(
4、rf); fclose(wf), 国家二级( C语言)机试模拟试卷 314答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)xi N (2)j+或 j=j+1 (3)i+或 i=i+l 【试题解析】 第一空: “for(i=0; iN; i+)av+= 【 1】; “在该循环的下一个循环内是逐个比较元素 xi是否小于 av,即该循环的功能是求出平均值。由aV=(x0+x1+xN -1) N=x0 N+x1 N+xN -1 N可知,第一空处应为 “xi N“。 第二空: “if(xiav)yj=xi; xi=-1;【 2】; “如果 xi小于平均值则将 xi存储在 y数组中,变量
5、i是循环变量,变量 j记录数组 y的下标变化,下一次执行if内部语句时, y数组的下标应为下一个位置,故第二空处应为 j加 1,即第二空出为 “i+“或 “i=i+1“。 第三空: i为 while循环的循环变量,第一次进入 while的时候 i为 0,判断第一个元素 x0是否是 -1,第二次进入的时候判断第二个元素 x1是否是 -1,依此类推直到 i=N退出循环,故第三处是变 量 i自增,即第三空处为 “i+“或 “i=i+1“。 二、程序修改题( 30分) 2 【正确答案】 (1)void fun(char*s, char*t) (2)t2*d=0; 【试题解析】 (1)fun函数中的 s
6、和 t对应于主函数中数组的名, fun函数中的 s、 t传递的应该是地址,所以第一个错误标识下的 “voidfun(char s, chart)“语句中 s、 t定义的是字符型变量,应改为 “void fun(char*s, char*t)“。 (2)连接之后,新字符串的尾应该添加尾符指 示位,原来的串算上尾符长度应该是 d,所以第二个标识下的 “t2*d 1= 0; “应该改为 “t2*d= 0; “。 三、程序设计题( 40分) 3 【正确答案】 char*p=str; int i=0; while(*p) if(*p !=)stri+=*p; p+, stri=0; 【试题解析】 (1)首先,设置一个指针变量指向字符串的头位置,并使用循环,依次查找字符串中的空格。 (2)若字符是空格,则将后面位置的第一个非空格字符移动 到当前位置,并将其后的字符也依次前移。