1、国家二级 C语言机试(操作题)模拟试卷 609及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:找出 NN矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 c中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #inclucle stdio h #define N4 void fun(int: (*a)N, int*b)
2、 inti, j; for(i=0; i N; i+) *found* bi=【 1】 ; for(j=1; j N; j+) *found* if(bi【 2】 aji) bi=aji; main() int xNN=12, 5, 8, 7, 6, 1, 9, 3, 1, 2, 3, 4, 2, 8, 4, 3, yN, i, j; printf(“ nThe matrix: n“); for(i=0; i N; i+) for(j=0; j N; j+) printf(“ 4d“, xij); printf(“ n“); *found* fun(【 3】 ); printf(“ nThe
3、result is: “); for(i=0; i N; i+) printf(“ 3d“, yi); printf(“ n“); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:将 s所指字符串中最后一次出现的与 t1所指字符串相同的子串替换成 t2所指字符串,所形成的新串放在 w所指的数组中。要求 t1和 t2所指字符串的长度相同。 例如,当 s所指字符串中的内容为 “abedabfabc”, t1所指串中的内容为 “ab”, t2所指子串中的内容为 “99”时,结果在
4、 w所指的数组中的内容应为 “abcdabt99c”。 请改正程序中的错误,使它能得出正确的结果 。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h #include string h void fun(char*s, char*t1, char*t2, char*w) char*p, *r, *a; strcpy(w, s); *found* while(w) p=w; r=t1; while(*r) *found* IF(*r=*p) r+; p+; else break; if(*r=
5、 0) a=w; w+; r=t2; while(*r) *a=*r; a+; r+; main() char si00, t1i00, t2100, w100; printf(“ nPlease enter string s: “); Scanf(“ s“, s); printf(“ nPleaseenter substring t1: “); scanf(“ s“, t1); printf(“ nPlease enter substring t2: “); Scanf(“ s“, t2); if(strlen(t1)=strlen(t2) fun(s, t1, t2, w); printf
6、(“ nThe result is: s n“, w); ) else printf(“ nError: strlen(t1)!=strlen(t2) n“); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,编写函数 fun,它的功能是:求小于形参 n同时能被 3与 7整除的所有自然数之和的平方根,并作为函数值返回。 例如,若 n为 1000时,程序输出应为: s=153 909064。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fu
7、n的花括号中填入你编写的若干语句。 试题程序: #include math h #include stdio h doublefun(intn) main() *主函数 * void NONO(); printf(“s= f n“, fun(1000); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i, n; double s; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10; i+) fscanf(fp, “ d
8、“, &n); s=fun(n); fprintf(wf, “ f n“, s); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 609答案与解析 一、程序填空题 1 【正确答案】 (1)a0i (2) (3)x, y 【试题解析】 填空 1:数组 b用于存放每列元素中的最大值,首先将第 i列的第一个数赋给 bi,然后用 bi与其他数进行比较,因此此空应填 a0i。 填空 2: if条件表达式表示当 bi小于 aji时,就把 aji的值赋给 bi,因此此空应该填。 填空 3: fun函数的调用,通过 fun(int(*a)N, int*b)可知, 此空
9、应该填 x, y。 二、程序修改题 2 【正确答案】 (1)while(*w) (2)if(*r=*p) 【试题解析】 (1)此处要判断的是值的真假,而不是地址,所以改为 while(*w)。 (2)C语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。 三、程序设计题 3 【正确答案】 double fun(int n) double sum=0 0; int i; for(i=21; i =n; i+) if(i 3=0)&(i 7=0) sum+=i; return sqrt(sum); 【试题解析】 本题考查算术运算的算法,首先利用一个 for循环判断小于 n且能同时被 3和 7整除的整数,并将满足条件的整数累加到 sum,之后调用 sqrt函数计算 sum的平方根,并作为函数的返回值。