1、国家二级 C+机试(操作题)模拟试卷 168及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是建立一个 NN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为 1;从外向内第 2层元素的值全部为 2;第 3层元素的值全部为 3, 依此类推。例如,若 N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #define N
2、7 *found* void fun(int(*a)【 1】 ) int i, j, k, m; if(N 2=0)m=N 2; else m=N 2+1; for(i=0; i #include void fun( char *a, char *b, char *c) int i, j; char ch; i=0; j=strlen(b)一 1; *found* while(ij) ch=bi; bi=bj; bj=ch; i+; j-; while(*a*b) *found* If( *a) *c= *a ; c+; a+; if(*b) *c= *b; c+; b+; *c=0; mai
3、n() char s1100, s2100, t200; printf(“ nEnter s1 string: “); scanf(“ s“, s1); printf(“ nEnter s2 string: “); scanf(“ s“, s2); fun(s1, s2, t); printf(“ nThe result; is: s n“, t); 三、综合应用题 3 规定输入的字符串中只包含字母和 *号。请编写函数 fun,其功能是:使字符串的前导,一 c号不得多于 n个,若多于 n个,则删除多余的木号;若少于或等于 n个,则不做处理。字符串中间和尾部的水号不删除。 例如,字符串中的内容为
4、 “*A*BC*DEF*G*”,若 n的值为 4,删除后,字符串中的内容应当是 “*A*BC*DEF*G*”;若 n的值为 8,则字符串中的内容仍为 “*A*BC*DEF*G*”。 n的值在主函数中输入。在编写函数时,不得使用 C语言提供的字符串函数。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容。仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include #include void fun(char*a, int n) void main() char s81; int n; printf(“Enter a string: n“); (jet
5、s(s); printf(“Enter n: “); scarlf(“ d“, &n); fun(s, n); printf(“The string after deleted: n“); puts(s); 国家二级 C+机试(操作题)模拟试卷 168答案与解析 一、基本操作题 1 【正确答案】 (1)N (2)i (3)i+1 【试题解析】 填空 1:本题考查了形参的确定。参数传递时将实参的值赋给形参,实参和形参是一一对应的,因此该空应该填写 N。 填空 2:第二重 for循环中 aij和 aN i一 1j表示 第一行和最后一行数组aNN的值,因而此空应该填写 i。 填空 3:第三重 for循环代表的是 aNN中每一列的值,因此此空应该填写i+l。 二、简单应用题 2 【正确答案】 (1)while(in) *如果 k大于 n,则使 p的前部保留 n个星号,其后的字符依次存入数组 a中 * while(*p) ai=*(p+kn); i+; p+; ai= 0; *在字符串最后加上结束标识 * 【试题解析】 字符串中前导 *号不能多于 n个,多余的应删除。首先需要通过while循环统计字符串前导 *号的个数,然后通过 if条件语句完成前导 *号的个数和n的比较,如果前导 *号多于 n个,需要把 n个 *号和其余字符重新保留。