1、国家二级 C语言机试(操作题)模拟试卷 279及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:在形参 s所指字符串中寻找与参数 c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。 例如,若 s所指字符串为 “baaeda”, c中的字符为 a,执行后 s所指字符串为“baaaacdaa”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*s, char c) int i, j
2、, n; *found* for(i=0; si!=【 1】 ; i+) if(Si=c) *found* n=【 2】 ; while(si+1+n!= 0) n+; for(j=i+n+1 ; j i; j-) sj+1=sj; *found* sj+1=【 3】 ; i=i+1; main() char s80=“baaccla“, c; printf(“ nThe string: s n“, s); printf(“ nInput a character: “); scanf(“ c“, c); fun(s, c); printf(“ nThe result is: s n“, s);
3、 二、程序修改 题 2 下列给定程序中,函数 fun的功能是:根据以下公式求 值,并作为函数值返回。例如,当给指定精度的变量 eps输入 0 0005时,应输出 Pi=3 140578。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 !试题程序: #include conio h #include stdio h #include math hdouble fun(double eps) double s, t; int n=1; s=0 0;*found* t=0; while(t eps) s+=t; t=t*n (2*n+1)
4、; n+; *found* return(s); void main() double x; print(“ nPlease enter aprecision: “); scarlf(“ lf“, x); printf(“ nPi= 1f n“, fun(x); 三、程序设计题 3 请编写函数 fun,该函数的功能是:将 M行 N列的二维数组中的数据,按行的顺序依次 放到一维数组中,一维数组中数据的个数存放在形参 n所指的存储单元中。 例如,若二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应该是: 33 33 33 33 44
5、44 44 44 55 55 55 55。 注意:部分源程序在文件 PROG1 C中。请勿改动 mmn函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h void fun(int(*s)10, int*b, int*n, int mm, int nn) void main() FILE*wf; int w1010=33, 33, 33, 33, 44, 44, 44, 44, 55, 55, 55, 55, i, j, int a100=0, n=0; printf(“The matrix: n“)j for(i=0; i
6、 3; i+) (for(j=0; j 4; j+) printf(“ 3 d“, wij); printf(“ n“); fun(w, a, &n, 3, 4); printf(“The A array: n“); for(i=0; i n; i+) printf(“ 3d“, ai); printf(“ n n“); * wf=fopen(“out dat“, “w“); for(i=0; i n; i+) fprintf(wf, “ 3d“, ai); fclose(wf); * 国家二级 C语言机试(操作题)模拟试卷 279答案与解析 一、程序填空题 1 【正确答案】 (1) 0 (2
7、)0 (3)c 【试题解析】 填空 1: for语句循环条件是判断是否到达字符串结尾,即当前字符是否为 0。 填空 2: while语句用以确定字符串的长度,所以变量 n赋初值为 0。 填空 3:题目要求如果找到与参数 c相同的字符,就在后面插入一个相同的字符,且找到后应该给数组元素赋值,本题目给出参数为 c。 二、程序修 改题 2 【正确答案】 (1)t=1 0; (2)return(s*2); 【试题解析】 该题中,首先检查变量数据类型前后是否一致,因为变量 t定义为double型,所以赋值时要赋以实型数值。 return(s)是一个数学错误,应该返回return(s*2);。 三、程序设
8、计题 3 【正确答案】 void fun(int(*s)10, int, *b, int *n, int mm, int nn) int i, j, k: 0; for(i=0; i mm; i+) *将二维数组 s中 的数据按行的顺序依次放到一维数组 b中 * for(j=0; j nn; j+) bk+=sij; *n=k; *通过指针返回元素个数 * 【试题解析】 本题可以用两个循环来处理,由于是按行的顺序取出,所以第 1个循环用于控制行下标,第 2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成: flor(i=0; i nn; i+) for(j=0; j mm; j+) bk+=sji; 要注意 sji的下标,不能用 sij。 若按行取出 则列标变化较快,若按列取出则行标变化较快,即循环嵌套时,越在内层的循环,其循环变量变化就越快。