1、国家二级 C语言机试(操作题)模拟试卷 108及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:把形参 a所指数组中的最大值放在 a0中,接着求出 a所指数组中的最小值放在 a1中,再把 a所指数组元素中的次大值放在 a2中,把 a数组元素中的次小值放在 a3中,依此类推。 例如,若 a所指数组中的数据最初排列为: 1、 4、 2、 3、 9、 6、 5、 8、 7,按规则移动后,数据排列为: 9、 1、 8、 2、 7、 3、 6、 4、 5。形参 n中存放 a所指数组中数据的个数。 请在程序的下画线处填人正 确的内容并将下面线删除,使程序得出正确的结果。 注意:部分源
2、程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 9 /*found*/ void fun(int【 1】 , int n) int i, j, max, min, px, pn, t; /*found*/ for(i=0; i n一 1; i+=【 2】 ) max=min=ai; px=pn=i; /*found*/ for(j=【 3】 ; j n; j+) if(max aj) max=aj; px=j; ) if(min aj) min=aj; pn=j; ) if(px!=i) t=ai, ai=max; a
3、px=t; if(pn=i)pn=px; if(pn!=i+1) t=ai+1; ai+1=min; apn=t; ) main() int bN=1, 4, 2, 3, 9, 6, 5, 8, 7), i; printf(“ nThe original data: n”), for(i=0; i N; i+) printf(“ 4d”, bi); printf(“ n”); fun(b, N); printf(“nThe data after moving : n”); for(i=0; i N; i+) printf(“ 4d”, bi); printf(“ n”); 二、程序修改题 2
4、下列给定程序中,函数 fun的功能是:删除指针 P所指字符串中的所有空白字符(包括制表符、回车符及换行符 )。 输入字符串时用 “#”结束输入。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include string h #include stdio h #include ctype h fun(char*P) int i, t; char c80; /*found*/ For(i=0, t=0; Pi; i+) if(!isspace(*(P+i) Ct+=Pi; /*found*/ ct=“ 0”, s
5、trcpy(P, C); voidmein() char c, s80; int i=0; printf(“Input a string: ”); C=getchar(); while(C!=#) Si=c; i+; C=getchar(), Si= 0; fun(s); puts(S); 三、程序设计题 3 规定输入的字符串中只包含字母和 *号。编写函数 fun,其功能是:除了字符串前导和尾部的 *号外,将串中其他的 *号全部删除。形参 h已指向字符串中第一个字母,形参 P指向字符串中最后一个字母。在编写函数时,不得使用 c语言提供的字符串函数。 例如,若字符串中的内容为 “*A*BC*DE
6、F*G*”,删除后,字符串中的内容应当是 “*ABCDEFG*”. 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #include conio h #include string h void fun(char*a, char*h, char*P) main() char s81, *t, *f; printf(“Enter a string: n”); gets(s); t=f=8; while(*t) t+; t一一 ; while(*t=*) t一一; while
7、(*f=*) f+; fun(s, f, t); printf(“The string after deleted: n”), puts(s); 国家二级 C语言机试(操作题)模拟试卷 108答案与解析 一、程序 填空题 1 【正确答案】 (1)a (2)2 (3)i+1 【试题解析】 填空 1:由 main中的函数调用语句确定函数定义的形式参数。 填空 2: for循环语句中,循环变量增值为 2。 填空 3:确定 for语句循环变量的初值。 二、程序修改题 2 【正确答案】 (1)for(i=0, t=0; pi; i+) (2)ct= 0; 【试题解析】 该题目考查 C语言关键字的书写,
8、C语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为 0,而非 “0”, “0”表示一个字符串。该程序的 if条件中应用了 isspace函数,该函数的功能是检查 ch是否为空格、跳格符 (制表符 )或换行符。 三、程序设计题 3 【正确答案】 void fun(char*a, char*h, char*p) int i=0; char*q=a; +将前导 *号保存到 a中 * while(q h) ai=*q, q+; i+; *继续遍历数组 * while(q p) if(*q!=*) *如果不是 *保存到 a中 * ai=* q; i+; q+; *将末尾 *号保存到 a中 * while(*q) ai=*q, i+; q+, ai=0; 【试题解析】 本题的重点是要选择好判断条件,首先是需要判断前导 *号的结束,然后判断是否指向最后一个字母,最后补充尾部 *号,只要思路对了即可正确解答。