1、国家二级( C语言)机试模拟试卷 200及答案与解析 一、程序填空题( 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; i #include #define N 10 typedef struct ss char num10; int s; STU; fun(STU a, STU *s) main () STU aN= “A01“,81,“A02“,89,“A03“, 66,“A04“,87,“A05“,77,“A06“,90,“A07“,79,“A08“,61,“A0
3、9“,80,“A10“,71 , m ; int i; printf(“* The original data *n“); for (i=0; i N; i+)printf(“No = %s Mark = %dn“, ai.num,ai.s); fun (a, printf (“* THE RESULT *n“); printf (“The top : %s , %dn“,m.num, m.s); NONO(); NONO() /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; STU aN, m ; int i ; rf = fopen(
4、“in.dat“,“r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i 10; i+) fscanf(rf, “%s %d“, ai.num, fun(a, fprintf (wf, “The top : %s, %dn“, m.num, m.s); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 200答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)t=i (2)i (3)0或 “ 0“ 【试题解析】 第一空:由审题分析可知, t记录开始的字符,数组中挑选一个最小的元素和 t位置的字符交换,故第一空处应
5、为 “t=1“。 第二空: “for(j=【 2】 +2; jn; j=j+2)“从 i的后一个奇数位置开始,故 j应为i+2,因此第二空应为 “i“。 第三空;字符串以 “ 0“结束,故第三空为 “ 0“或 0。 二、程序修改题( 30分) 2 【正确答案】 (1)for(i=2; i=m; i+) (2)y+=1 0 (i*i); 【试题解析】 (1)根据题干中给出的公式,可以看到循环是从 2到 m,所以第一个标识下的 “for(i=2; im; i+)“应该改为 “for(i=2; i=m; i+)“。 (2)fun函数中定义 y为浮点型,而 “1 (i*i)“返回整型,随着 i的增加,计算结果一直为 0,因此得不出最后正确结果。应将 “y+=1/(j*i); “整型改为 “y+=1 0(i*i); “浮点型。 三、程序设计题( 40分) 3 【正确答案】 int i, max=a0.s, j=0; for(i=1; iN; i+) if(maxai.s) j=i; max=ai.s; *s=aj; 【试题解析】 ( 1)首先指定第一个成绩为最高分数。 ( 2)再使用一个 for循环把所有的成绩进行比较,找出最高的分数来。