1、国家二级 C语言机试(操作题)模拟试卷 236及答案与解析 一、程序填空题 1 给定程序的主函数中,已给出由结构体构成的链表结点 a、 b、 c,各结点的数据域中均存入字符,函数 fun()的作用是:将 a、 b、 c三个结点链接成一个单向链表,并输出链表结点中的数据。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdio h 2 typedef struct list 3 char data; 4 struct list*next;
2、5 Q; 6 void fun(Q*pa, Q*pb, Q*pc) 7 Q*p; 8 *found* 9 pa- next=【 1】 ; 10 pb- next=pc; 11 p=pa; 12 while(p) 13 14 *found* 15 printf( c, 【 2】 ); 16 *found* 17 p=【 3】 ; 18 19 printf( n); 20 21 main() 22 (Q a, b, c; 23 a data=E; b data=F; 24 c data=G; c next=NULL; 25 fun( a, b, c); 26 二、程序修改题 2 给定程序 MODI
3、1 C中,函数 fun的功能是求矩阵 (二维数组 )aNN中每行 的最小值,结果存放到数组 b中。 假如:若 a= 则结果应为 1, 5,9, 13, 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 试题程序: 1 #include stdio h 2 #define N 43 void fun(int aN, nt b)4 int i, j; 5 for(i=0; i N;i+)6 7 *found* 8 bi=a00;9 *found* 10 for(j=1; j N-1; j+)11 *found* 12
4、if(bi aij)13 bi=aij; 14 15 16 main()17 int aNN=f1, 4, 3, 2), 8, 6, 5, 7), 11,10, 12, 9, 13, 16, 14, 15, bN; 18 int i; 19 fun(a, b); 20 for(i=0 ; iN; i+)21 printf( d, , bi); 22 printf( n); 23 三、程序设计题 3 请编写函数 fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出 ”YES”,否则返回 0,主函数中输出 ”NO”。回文是指顺读和倒读都一样的字符串。 例如,字符串 LEV
5、EL是回文,而字符串 123312就不是回文。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include stdio h 2 #define N 80 3 int fun(char * str) 4 5 6 7 main() 8 9 char sN; 10 FILE * out; 11 char * test=1234321, 123421, 123321, abcdCBA; 12 int i; 13 printf(Enter a string: ); 14 gets(s);
6、15 printf( n n); 16 puts(s); 17 if(fun(s) 18 printf(YES n); 19 else 20 printf(NO n); 21 * 22 out=fopen(out dat, w); 23 for(i=0; idata(3)p-next 【试题解析】 填空 1:将三个结点连接起来,即将 pa的指针域指向 pb, pb的指针域指向 pc。 填空 2:输出链表结点中的数据,表示为 p-data。 填空 3:指针后移,指向下一个结点,即 p=p-next。 二、程序修改题 2 【正确答案】 (1)bi=ai0; (2)for(j=1; jaij) 【试
7、题解析】 数组 b存放每行的最小值,针对二维数组使用二层循环,在第一层循环的开始将每行的第 1个数赋给数组 b相应的元素,在第二层循环中,数组 b中的元素依次与本行中的每个元素进行比较,找到一行中的最小值存人数组 b。 (1)bi存放二级数组 a每一行中第 1个元素值,表示为 ai0。 (2)每行元素的第 1个 值要和这一行中的每个元素进行比较,条件 jN可使 aij取到最后元素,而条件 jN-1使 aij最终取得倒数第 2个元素。 (3)因为是找最小值,所以当 bi大于其后的数值时说明它不是最小,要把比较中较大的值赋给它。 三、程序设计题 3 【正确答案】 1 int fun(char*st
8、r) 2 3 int i, n=0, fg=1; 4 char*p=str; 5 while(*p) *将指针 p置位到字符串末尾,并统计字符数 * 6 7 n+; 8 p+; 9 10 for(i=0; in 2; i+) *循环比较字符 * 11 if(stri=strn-1-i); *相同,什么都不作 * 12 else *不同,直接跳出循环 * 13 14 fg=0; 15 break; 16 17 return fg; 18 【试题解析】 判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的 结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。