1、国家二级 C+机试(操作题)模拟试卷 188及答案与解析 一、基本操作题 1 给定程序中,函数 fun的功能是:调用随机函数产生 20个互不相同的整数放在形参 a所指数组中 (此数组在主函数中已置 0)。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: #include #include #define N 20 void fun(int*a) int i, x, n=0; x=rand() 20; *found* while(n #include #include fun
2、(char*p) int i, t; char c80; *found* For(i=0, t=0; pi; i+) if(!isspace(*(p+i) ct+=pi; *found* ct=“ 0“; strcpy(p, c); void main() 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,该函数的功能是:将 M行 N列的二维数组中的数据,按行
3、的顺序依次放到一维数组中,一维数组中数据的个数存放在形参 n所指 的存储单元中。 例如,若二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应该是: 33 33 33 33 44 44 44 44 55 55 55 55。 注意:部分源程序在文件 PROGl C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include void fun(int(*s)10, int*b, int*n, int mm, int nn) void main() FILE*wf; i
4、nt w1010=33, 33, 33, 33, 44, 44, 44, 44, 55, 55, 55, 55, i, j; int a100=0, n=0; printf(“The matrix: n“); for(i=0; i3; i+) for(j=0; j4; j+) printf(“ 3d“, wij); printf(“ n“); fun(w, a, &n, 3, 4); printf(“The A array: n“); for(i=0; in; i+) printf(“ 3d“, ai); printf(“ n n“); * wf=fopen(“out dat“, “w“);
5、for(i=0; in; i+) fprintf(wf, “ 3 d“, ai); fclose(wf); * 国家二级 C+机试(操作题)模拟试卷 188答案与解析 一、基本操作题 1 【正确答案】 (1)N或 20 (2)break (3)n 【试题解析】 填空 1:变量 n用于存储数组的下标,要通过 while语句对数组进行赋值,数组的容量为 20,因此循环条件应为 n20。 填空 2:通过一个 for循环判断 x是否与数组中已存的元素重复,若重复则跳出for循环结束。 填空 3:若 for循环是由 break语句结束的,则 x与数组中的元素重复,此时 i必然小于 n;若 for循环是因
6、为循 环变量 i递增到某值,而不再满足循环条件结束的,说明 x的值与数组中的元素不重复,则此时 i的值等于 n。 二、简单应用题 2 【正确答案】 (1)for(i=0, t=0; pi; i+) (2)ct= 0; 【试题解析】 该题目考查 C语言关键字的书写, c语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为 0,而非 “ 0”, “ 0”表示一个字符串。该程序的 if条件中应用了 isspace函数,该函数的功能是检查 ch是否为空格、跳格符 (制表符 )或换行符。 三、综合应用题 3 【正确答案】 void fun(int(*s)10, int*b, int*n, i
7、nt mm, int nn) int i, j, k=0; for(i=0; imm?i+) *将二维数组 s中的数据按行的顺序依次放到一维数组 b中 * for(j=0; jnn; j+) bk+=sij; *n=k; *通过指针返回元素个数 * 【试题解析】 本题可以用两个循环来处理,由于是按行的顺序取出,所以第 1个循环用于控制行下标,第 2个循环用于控制列下标;若改成按列 的顺序取出,则循环应改成: for(i-0; inn; i+) for(j=0; jmm; j+) bk+=sji; 要注意 sji的下标,不能用 sij。 若按行取出则列标变化较快,若按列取出则行标变化较快,即循环嵌套时,越在内层的循环,其循环变量变化就越快。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1