1、二级 C语言分类模拟题 255及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:对形参 ss所指字符串数组中的 M个字符串按长度由短到长进行排序。ss所指字符串数组中共有 M个字符串,且串长N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #includestdio.h #includestring.h #define M 5 #define N 20 void fun(char(*ss)N)
2、 int i, j, k, nM; char tN; for(i=0; iM; i+) ni=strlen(ssi); for(i=0; iM-1; i+) k=i; /*found*/ for(j=_; jM; j+) /*found*/ if(nknj)_; if(k!=i) strcpy(t, ssi); strcpy(ssi, ssk); /*found*/ strcpy(ssk, _); nk=ni; main() char ssMN=“shanghai“, “guangzhou“, “beijing“, “tianjing“, “cchongqing“); int i; print
3、f(“/nThe original strings are:/n“); for(i=0; iM, i+)printf(“%s/n“, ssi); printf(“/n“); fun(ss); printf(“/nThe result:/n“); for(i=0; iM; i+)printf(“%s/n“, ssi); (分数:30.00)_二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1.C中函数 fun的功能是:判断 ch中的字符是否与 str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 请改正程序中的错误,使它能进行正确的操作。 注意:不要
4、改动 main函数,不得增行或删行,也不得更改程序的结构! #includestdio.h #includestring.h /*found*/ void fun(char str, char ch) while(*str /*found*/ if(*str=ch) str0=ch; /*found*/ str1=“0“; main() char s81, c; printf(“/nPlease enter a string:/n“); gets(s); printf(“/n Please enter the character to search:“); c=getchar(); fun(s
5、, c); printf(“/nThe result is%s/n“, s); (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.请编一个函数 fun(char*s),函数的功能是把 s所指字符串中的内容逆置。 例如:字符串中原有的字符串为:abcdefg,则调用该函数后,串中的内容为:gfedcba。 注意:部分源程序存在文件 PROG1.C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includestring.h #includestdio.h #define N 81 fun(char *s) NONO(
6、) /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ int i; char aN; FILE *rf, *wf; rf=fopen(“in.dat“, “r“); wf=fopen(“out.dat“, “w“); for(i=0; i10; i+) fscanf(rf, “%s“, a); fun(a); fprintf(wf, “%s/n“, a); fclose(rf); fclose(wf); main() char aN; printf(“Enter a string:“); gets(a); printf(“The original strin
7、g is:“); puts(a); fun(a); printf(“/n“); printf(“The string after modified:“); puts(a); NONO(); (分数:40.00)_二级 C语言分类模拟题 255答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:对形参 ss所指字符串数组中的 M个字符串按长度由短到长进行排序。ss所指字符串数组中共有 M个字符串,且串长N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在 下的 BLAN
8、K1.C中。 不得增行或删行,也不得更改程序的结构! #includestdio.h #includestring.h #define M 5 #define N 20 void fun(char(*ss)N) int i, j, k, nM; char tN; for(i=0; iM; i+) ni=strlen(ssi); for(i=0; iM-1; i+) k=i; /*found*/ for(j=_; jM; j+) /*found*/ if(nknj)_; if(k!=i) strcpy(t, ssi); strcpy(ssi, ssk); /*found*/ strcpy(ssk
9、, _); nk=ni; main() char ssMN=“shanghai“, “guangzhou“, “beijing“, “tianjing“, “cchongqing“); int i; printf(“/nThe original strings are:/n“); for(i=0; iM, i+)printf(“%s/n“, ssi); printf(“/n“); fun(ss); printf(“/nThe result:/n“); for(i=0; iM; i+)printf(“%s/n“, ssi); (分数:30.00)_正确答案:()解析:(1)i+1 (2)k=j
10、(3)t 答案考生文件夹 解析 函数 fun的功能是用是选择排序对 M个字符串由短到长进行排序。 第一空:由审题分析可知,外循环 i=0时,内循环变量从 i+1到 M-1(下标从 0开始),从 M-1个字符串中再挑出一个最短的字符串,故第一空处应为“i+1”。 第二空:k 记录最短字符串的下标,内循环开始前 k赋初值 i,内循环从剩下的 M-i个字符串里面找最短的,比较 k字符串和 j字符串的长度大小,如果 nknj,则把 j赋给 k,即第二空处应为“k=j”。 第三空:if(k!=i)说明找到了新的更短的字符串,那么把它和第 i个字符串交换,因此第三空处应为“t”。 考点 指向一维数组的指针
11、以及指针数组、for 循环结构。二、程序修改题(总题数:1,分数:30.00)2.给定程序 MODI1.C中函数 fun的功能是:判断 ch中的字符是否与 str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。 请改正程序中的错误,使它能进行正确的操作。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #includestdio.h #includestring.h /*found*/ void fun(char str, char ch) while(*str /*found*/ if(*str=ch) str0=ch; /*found*/ st
12、r1=“0“; main() char s81, c; printf(“/nPlease enter a string:/n“); gets(s); printf(“/n Please enter the character to search:“); c=getchar(); fun(s, c); printf(“/nThe result is%s/n“, s); (分数:30.00)_正确答案:()解析:(1)void fun(char *str, char ch) (2)if(*str !=ch) (3)str1=“/0“; 答案考生文件夹 解析 函数功能首先是查找子串再判断。 (1)第
13、一个标识下,“void fun(char str, char ch)”根据主函数中的 fun函数的调用“fun(s, c)”,知道 s为数组名,所以传的应该是数组地址,所以应改为“void fun(char *str, char ch)”。 (2)while循环中对 ch与 str进行匹配检查,第二个标识下,是当不同时执行连接操作,那么判断*str与 ch是否不同的表达式应该是“if(*str!=ch)”。 (3)第三个标识下,连接后的新串要添加结尾符,所以正确的表达是将“str1=“0“; ”改为“str1=“/0“; ”。 考点 字符数组和字符串、if 语句及其构成的选择。三、程序设计题(
14、总题数:1,分数:40.00)3.请编一个函数 fun(char*s),函数的功能是把 s所指字符串中的内容逆置。 例如:字符串中原有的字符串为:abcdefg,则调用该函数后,串中的内容为:gfedcba。 注意:部分源程序存在文件 PROG1.C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #includestring.h #includestdio.h #define N 81 fun(char *s) NONO() /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ int i; char aN
15、; FILE *rf, *wf; rf=fopen(“in.dat“, “r“); wf=fopen(“out.dat“, “w“); for(i=0; i10; i+) fscanf(rf, “%s“, a); fun(a); fprintf(wf, “%s/n“, a); fclose(rf); fclose(wf); main() char aN; printf(“Enter a string:“); gets(a); printf(“The original string is:“); puts(a); fun(a); printf(“/n“); printf(“The string after modified:“); puts(a); NONO(); (分数:40.00)_正确答案:()解析:char b N; int i=0, j; memset(b, 0, N); for(j=strlen(s)-1; j=0; j-)bi+=sj; strcpy(s, b); 答案考生文件夹 解析 该程序功能是字符串中的内容逆置。把字符串中字符逆置,就是把字符串中的第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,直到所有元素交换完成为止。 考点 字符数组和字符串、for 循环结构。