1、国家二级 C语言机试(操作题)模拟试卷 316及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #define N 5 #define M 8 void fun(char(*ss)M) char*
2、psN, *tp; int i, j, k; for(i=0; i N; i+) psi=ssi; for(i=0 ; i N一 1; i+) *found* k=【 1】 ; for(j=i+1; j N; j+) *found* if(strlen(psk) strlen (【 2】 )k=j; *found* tp=psi; psi=psk; psk=【 3】 ; printf(“ nThe string after sorting by length: n n“); for(i=0; i N; i+)puts(psi); main() char chNM=“red“, “green“,
3、 “blue“, “yellow“, “black“); int i; printf(“ nThe original string n n“); for(i=0; i N; i+) puts(chi); printf(“ n); fun(ch); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:求出 s所指字符串中最后一次出现的 t所指字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为 NULL。 例如,当字符串中的内容为 “abcdabfabcdx”, t中内容为 “ab”时,输出结果应是“abedx”。 当字符串中的内容为 “abcdabfa
4、bcdx”, t中内容为 “abd”时,则程序输出未找到信息“not be found!”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include stdio h #include conio h #include string h char *fun(char*s, char*t) char*p, *r, *a; *found* a=Null; while(*s) p=s; r=t; while(*r) *found* if(r=P) r+, P+, else br
5、eak; if(*r= 0)a=s; s+; return a; void main() char s100, t100, *P; system(“CLS“); printf(“ nPlease enter string s: “); scanf(“ s“, s); printf(“ nPlease enter substring t: “); scanf(“ s“, t); p=fun(s, t); if(p) printf(“ nThe result is: s n“, p); else printf(“ nNot found! n“); 三、程序设计题 3 请编写函数 fun,该函数的功
6、能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出 “YES“,否则返回 0,主函数中输出 “NO“。回文是指顺读和倒读都一样的字符串。 例如,字符串 LEVEL是回文,而字符串 123312就不是回文。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #define N 80 int fun(char*str) main() char sN; FILE*out; char*test=“1234321“, “123421“, “123321“,
7、“abcdCBA“; int i; printf(“Enter a string: “); gets(s), printf(“ n n“); puts(s); if(fun(S) printf(“YES n“); else printf(“NO n“); * out=fopen(“out dat“, “w“); for(i=0; i 4; i+) if(fun(testi) fprintf(out, “YES n“); else fprintf(out, “NO n“); fclose(out); * 国家二级 C语言机试(操作题)模拟试卷 316答案与解析 一、程序填空题 1 【正确答案】
8、(1)i (2)psj (3)tp 【试题解析】 本题是按字符串的 长短进行排序。 填空 1:外循环每循环一次, k应保存当前的 i值,所以应填 i。 填空 2:使用内循环对 i+1后面的字符串长度进行比较,所以应填 psj。 填空 3:此处的作用是交换两个变量的值,所以应填 tp。 二、程序修改题 2 【正确答案】 (1)a=NULL; (2)if(*r=*p) 【试题解析】 (1)a=Null;是个明显的语法错误,指针指向空值的关键字应为NULL。 (2)r和 p均为指针变量,分别指向两个字符串中的字符变量,循环条件是当 r和 p所指向的字符相同时,进行指针后移操作,故此处应 为 if(*
9、r=*p)。 三、程序设计题 3 【正确答案】 int fun(char*str) int i, n=0, fg=1; char*p=str; while(*p) *将指针 p置位到字符串末尾,并统计字符数 * n+; p+; for(i=0; i n 2; i+) *循环比较字符 * if(stri=strn一 1一 i); *相同,什么都不作 * else *不同,直接跳出循环 * fg=0; break; return fg; 【试题解析】 判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。