1、国家二级 C+机试(操作题)模拟试卷 155及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #define N 5 #def2ne M 8 void fun(char(*ss)M) char*psN, *tp; int i, j
2、, k; for(i=0; i #include #include #include #defime N 80 int fun(char*s, char*t) int n; char*p, * r; n=0; *found* *r=t; while(*s) p=s; while(*r) if(*r=*p r+; p+; else break; if(*r= 0) n+; *found* 1 ; S+; return n; void main() char aN, bN; int m; printf(“ nPlease enter string a: “); gets(a); printf(“
3、nPlease enter substring b: “); gets(b); m=fun(a, b); printf(“ nThe result is: m= d n“, m); 三、综合应用题 3 请编写函数 fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10 注意:部分源程序给出 如下。 请勿改动主函数 main和其他函数中的任何
4、内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include #define N 80 int fun(int a, int n) void main() int aN=2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10,10, i, n=20; printf(“Tne original data: n“); for(i=0; in; i+) printf(“ 3d“, ai); n=fun(a, n); printf(“ n nThe data after deleted: n“); for(i=0;
5、in; i+) printf(“ 3d“, ai); printf(“ n n“); 国家二级 C+机试(操作题)模拟试卷 155答案与解析 一、基本操作题 1 【正确答案】 (1)i (2)psj (3)tp 【试题解析】 本题是按字符串的长短进行排序。 填空 1:外循环每循环一次, k应保存当前的 i值,所以应填 i。 填空 2:使用内循环对 i+1后面的字符串长度进行比较,所以应填 psj。 填空 3:此处的作用是交换两个变量的值,所以应填 tp。 二、简单应用题 2 【正确答案】 (1)r=t; (2)r=t;或 r=&t0; 【试题解析】 从字符串 s中找出子字符串的方法是:从第一个
6、字符开始,对字符串进行遍历,若 s串的当前字符等于 t串的第一个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串 t的末尾,则跳出循环;若 s串的字符与 t串的字符不对应相同,则继续对 s串的下一个字符进行处理。 三、综合应用题 3 【正确答案】 int fun(int a, int n) int i, j=1; for(i=1; in; i+) if(aj一 1!=ai) *若该数与前一个数不相同,则要保留 * aj+=ai; return j; *返回不相同数的个数 * 【试题解析】 该程序的流程是:定义变量 i和 j,其中 j用于控制删除后剩下的数在数组中的下标, i用于搜索原数 组中的元素。 j始终是新数组中最后一个元素的下一个元素的下标,所以 if语句中的条件是 aj 1!=ai,其中 aj一 1就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以 ai要保留到新数组中。注意本题中 i和 j的初值都要从 1开始,该算法只能用于数组已排序的题目中。