1、国家二级 C语言机试(操作题)模拟试卷 595及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:将 s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的次序。 例如, s所指的字符串为 “def35adh3kjsdf7”,执行后结果为 “defadhkjsdf3537”。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h VOid fun(char*s) int i, j=0, k=0; char t
2、180, t280; for(i=0; si!= 0; i+) if(si =0 & si =9) t2j=si; 【 1】 ; else t1k+=si; t2j=0; t1k=0; for(i=0 ; i k; i+) 【 2】 ; for(i=0; i 【 3】 ; i+) sk+i=t2i; main() char s80=“ba54j7sd567sdffs“; printf(“ nThe original string is: s n“, s); fun(s); printf(“ nThe result is: s n“, s); 二、程序修改题 2 下列给定程序中函数 fun的功能
3、是: 用冒泡法对 6个字符串按 由小到大的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include string h #include conio h #include stdio h #define MAXLINE 20 fun(char*pstr6) int i, j; char*p; for(i=0; i 5; i+) *found* for(j=i+1, j 6, j+) if(strcrnp(*(pstr+i), (pstr+j) 0) P=*(
4、pstr+i); *found* *(pstr+i)= pstr+j; *(pstr+j)=p; void main() int i; char*pstr6, str6MAx-LINE; system(“CLS“); for(i=0; i 6; i+) pstri=stri; printf(“ nEnter 6 string(1 string at each line): n“); for(i=0 ; i 6; i+) scanf(“ s“, pstri); fun(pstr); printf(“The strings after sorting: n“); for(i=0; i 6; i+)
5、 printf(“ s n“, pstr i); 三、程序设计题 3 编写函数 fun,其功能是:求 ss所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串 “123412132”,输入字符为 “1”,则输出 3。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include conio h #include stdio h #define M 81 int fun(char*ss, char c) void main() char aM, ch; sys
6、tem(“CLS“); printf(“ nPlease enter a string: “); gets(a); printf(“ nPlease enter a char: “); ch=getchar(); printf(“ nThe number of the char is: d n“, fun(a, ch); 国家二级 C语言机试( 操作题)模拟试卷 595答案与解析 一、程序填空题 1 【正确答案】 (1)j+或 j+=1或 +j或 j=j+1 (2)si=t1i (3)j 【试题解析】 本题考查:指针型变量;数组变量赋值; for循环语句。 填空 1:根据函数 fun中的内容可
7、知,数组 t1存储了 s中的非数字字符,数组 t2存储了 s中的数字字符,为了存储下一个数字字符,下标 j要进行加 1操作。 填空 2:将 s串中的数字与非数字字符分开后,要先将非数字字符放入字符串 s中,因此填入 si=t1i。 填空 3:再将数字字符加到 s串之后 ,并且 i要小于数字的个数 j。 二、程序修改题 2 【正确答案】 (1)for(j=i+1; j 6; j+) (2)*(pstr+i)=*(pstr+j); 【试题解析】 本题考查:冒泡排序算法; for循环语句格式;指针数组。 (1)此处考查 for语句的格式,各表达式之间应用 “; ”隔开。 (2)此处考查用指针表示数组
8、元素的方法, * (pstr+i)表示 pstr所指向数组的第 i个元素,同理 * (pstr+j)表示 pstr所指向数组的第 j个元素。 冒泡排序算法,其基本思想是:将待排序的元素看做是竖着排 列的 “气泡 ”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中要对 “气泡 ”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即 “轻 ”的元素在下面,就交换它们的位置。显然,处理一遍之后, “最轻 ”的元素就浮到了最高位置;处理两遍之后, “次轻 ”的元素就浮到了次高位置。依此类推,完成排序。 实现数组 sN的升
9、序排列代码如下: for(i=0; i N; i+) for(j=i+1; j N; j+) if(si sj) t=si; si=sj; sj=t; 三、程序设计题 3 【正确答案】 int fun(char*ss, char c) int i=0; for(; * ss!= 0; ss+) if(*ss=c) i+; *求出 ss所指字符串中指定字符的个数 * return i; 【试题解析】 本题考查: for循环语句遍历字符串,并通过 if条件语句判断字符串是否结束。 从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是 0,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。