1、国家二级( C语言)机试模拟试卷 312及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:对形参 s所指字符串中下标为奇数的字符按ASC 码大小递增排序,并将排序后下标为奇数的字符取出,存入形参 p所指字符数组中,形成一个新串。 例如,形参 s所指的字符串为: baawrskjghzlicda,执行后 p所指字符数组中的字符串应为: aachjlsw。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKI C中。 不得增行或删行,也不得更改程序的结构 ! #include void fun(char
2、*s, char * p) int i, j, n, x, t; n=0; for(i=0; si!= 0; i+) n+; for(i=l, isj)t=j; if(t!=i) x=si; si=st; st=X; for(i=l, j=0; in; i=i+2, J+) pj=si; *found* Pj= 【 3】 ; main() char s80=“baawrskjghzlicda“, pis: sn“, s); fun(s, p); printf(“ nThe result is: s n“, p), 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:
3、根据整型形参 n,计算如下公式的值。 例如,若 n=10,则应输出: 0 617977。 请改正程序中的语法错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 !#include*found* int fun(int n) float A=1, int i ; *found* for (i=2; i 三、程序设计题( 40分) 3 请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 例如:二维数组中的值为: 则函数值为 61。 注意:部分源程序存在文件 PROGl C文件中。 请勿改动主函数 m
4、ain和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include#define M 4#define N 5int fun(int aMN)main()int aaMN=(1, 3, 5, 7, 9), 2, 9,9, 9, 4, 6, 9, 9, 9, 8, 1, 3, 5, 7, 0; int i, j, y; void NONO(); printf(“The original data is: n“); for(i=0; i 国家二级( C语言)机试模拟试卷 312答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)t=i (2)i (3)0或
5、 “ 0“ 【试题解析】 第一空:由审题分析可知, t记录开始的字符,数组中挑选一个最小的元素和 t位置的字符交换,故第一空处应为 “t=1“。 第二空: “for(j=【 2】 +2; jn; j=j+2)“从 i的后一个奇数位置开始,故 j应为i+2,因此第二空应为 “i“。 第三空;字符串以 “ 0“结束,故第三空为 “ 0“或 0。 二、程序修改题( 30分) 2 【正确答案】 (1)float fun(int n) (2)for(i=2; i=n; i+) 【试题解析】 (1)其中 fun函数中的 “float A=1; “和 “return A; “语句说明 fun函数具有 flo
6、at返回值,所以将 “int fun(int n)“改为 “float fun(hatn)“。 (2)根据题干中给出 的公式,可以知道第 11项的分母中 A是第 n-1项,所以第二个标识下的 “for(i=2; in; i+)“循环中应该是 2到 n, “for(i=2; in; i+)“应该改为 “for(i=2; i=n; i+)“。 三、程序设计题( 40分) 3 【正确答案】 int tot=0, i, j; for(i=O; iN; i+) tot+=a0i; tot+=aM一 1i; for(i=1; iM1; i+) tot+=ai0; tot+=aiN一 1; return tot; 【试题解析】 进入 fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。