1、国家二级 C语言机试(操作题)模拟试卷 167及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:判断形参 s所指字符串是甭是 “回文 ”(Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。 “回文 ”是正读和反读都一样的字符串 (不区分大小写字母 )。 例如, LEVEL和 Level是 “回文 ”,而 LEVLEV不是 “回文 ”。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行 或删行,也不得更改程序的结构 ! #include #include #includ
2、e int fun(char*s) char*lp, *rp; *found* 1p=_1_; rp=s+strlen(s)一 1 ; while(toupper(*lp)=toupper (*rp) (lp int fun(int*x, int y) int t; *found* t=x ; x=y ; *found* return(y); main() int a=3, b=8; printf(“ d d n“, a, b); b=fun( a, b); printf(“ d d n“, a, b); 三、程序设计题 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。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(int(*s)10, int*b, int *n, int mm, int nn) main() int w1010=33, 33, 33,
4、 33, 44, 44, 44, 44), 55, 55, 55, 55), i, j ; int a100=0, n=0; void NONO(); 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“); NONO(); void NONO() *请在此函数内打开
5、文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int i, j, k; int w1010, a100, n=0, mm, nn; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(k=0; k5; k+) ( fscanf(rf, “ d d“, mm, nn); for(i=0 ; imn ; i+) for(j=0; jnn; j+)fscanf (rf, “ d“, wij); fun(w, a, n, mm, nn); for(i=0; in; i+)fprintf (wf, “
6、 3d“, ai); fprintf(wf, “ n“); ) fclose(rf); fclose(wf), 国家二级 C语言机试(操作题)模拟试卷 167答案与解析 一、程序填空题 1 【正确答案】 (1)s (2)- (3)return 0 【试题解析】 第一空: “rp=s+strlen(s)-1; ”可知 rp指向最后一个元素,因此 lp是指向第一个元素,因此第一空应为 “s”。 第二空: “lp+; rp 2 ; ”lp往后移动, rp应该往前移动,故第二空处应为“一 ”。 第三空: “if(1prp)”成立说明 lp和 rp比较没有比较到字符串的最中间的字符,也就是说 s字符串不
7、是回文,因此第三空处的应为 “return 0”。 二、程序修改题 2 【正确答案】 (1)t=*x; *x=y; (2)return(t); 【试题解析】 (1)根据 fun中 x变量的定义, x为指针型变量,所以第一个错误标识下的 “t=x; x=y; ”改为 “t=*x; *x=y; ”。 (2)交换之后 t中存放原来 x的值, x存放原来 y的值,这里应该是返回原来 x的值,所以第二个标识下的 “return(y); ”应该改为 “return(t); ”或者 “return t; ”。 三、程序设计题 3 【正确答案】 int i, j ; for(i=0; imm; i+) for(j=0; jnn ; j+) b*n=*(*(s+i)+j); *n=*n+1; 【试题解析】 (1)利用两重循环,依次取矩阵中的元素。 (2)其中注意指针数组与数组指针的区别,其中数组指针 s,它指向包含 4个元素的一维数组。其数据元素的表示方式为: “*(*(s+i)+j)”。