1、二级 C 语言机试 26 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是;删除字符数组中小于等于指定字符的字符,指定字符从键盘输入,结果仍保存 例如,输入“abcdefghij”,指定字符为d,则结果输出“defghij”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio. h #define N 80 void fun (char s, char ch) int i
2、=0, j=0; while (s i ) if (s Iiich) U【1】 /U; else U【2】 /U i+; U【3】 /U main () char str N, ch; clrscr (); printf(“/n Input a string:/n“); gets (str); printf(“/n* original string */n“); puts (str); printf(“/n Input a character:/n“); scanf (“%c“, fun(str, ch); printf(“/n* new string */n“); puts (str); (
3、分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中 fun()函数的功能是:将 n 个无序整数从小到大排序。 请改正程序中的错误,使它能得出正确的结果。 注意;不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include conio.h #include stdio.h #include stdlib.h fun(int n, int *a) int i,j,p,t; for (j=0;jn-1;j+) P=j; /*found*/ for(i=j+l;in-1;i+) if (apai) /*found*/ t
4、=i; if (p!=j) t=aj;aj=ap;ap=t; putarr( iht n,int *z) int i; for (i=l;i=n;i+,z+) printf(“%4d“,*z); if (!(i%10) printf(“/n“); printf (“/n“); main () int aa20=9,3,0,4,1,2,5,6,8,10,7,n=11; clrscr(); printf(“/n/nBefore sorting %d numbers:/n“,n); putarr(n,aa); fun(n,aa); printf(“/nAfter sorting %d numbers
5、:/n“,n);putarr(n,aa); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),它的功能是:求出 ss 所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串 123412132,输入字符 1,则输出 3。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includecoio.h #includestdio.h #define M 81 int fun(char *ss,char c) main() char aM,c
6、h; clrscr(); 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); (分数:40.00)_二级 C 语言机试 26 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是;删除字符数组中小于等于指定字符的字符,指定字符从键盘输入,结果仍保存 例如,输入“abcd
7、efghij”,指定字符为d,则结果输出“defghij”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio. h #define N 80 void fun (char s, char ch) int i=0, j=0; while (s i ) if (s Iiich) U【1】 /U; else U【2】 /U i+; U【3】 /U main () char str N, ch; clrscr (); printf(“/n Input a string:/
8、n“); gets (str); printf(“/n* original string */n“); puts (str); printf(“/n Input a character:/n“); scanf (“%c“, fun(str, ch); printf(“/n* new string */n“); puts (str); (分数:30.00)填空项 1:_ (正确答案:1i+ 2sj+=si 3sj=/0)解析:解析 填空 1:如果当前字符比指定字符小,则什么都不做,通过 i+访问下一个字符。填空 2,如果当前字符大于等于指定字符,则将它保存在字符数组 s 中。填空 3:通过保存比
9、指定字符大或相等的字符,来实现删除比指定字符小的字符。处理结束后,在字符串 s 最后要加上结束标记符/0。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中 fun()函数的功能是:将 n 个无序整数从小到大排序。 请改正程序中的错误,使它能得出正确的结果。 注意;不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include conio.h #include stdio.h #include stdlib.h fun(int n, int *a) int i,j,p,t; for (j=0;jn-1;j+) P=j; /*found*/ for
10、(i=j+l;in-1;i+) if (apai) /*found*/ t=i; if (p!=j) t=aj;aj=ap;ap=t; putarr( iht n,int *z) int i; for (i=l;i=n;i+,z+) printf(“%4d“,*z); if (!(i%10) printf(“/n“); printf (“/n“); main () int aa20=9,3,0,4,1,2,5,6,8,10,7,n=11; clrscr(); printf(“/n/nBefore sorting %d numbers:/n“,n); putarr(n,aa); fun(n,aa
11、); printf(“/nAfter sorting %d numbers:/n“,n);putarr(n,aa); (分数:30.00)填空项 1:_ (正确答案:错误:for(i=j+1;in-1;i+) 正确:for(i=j+1;in;i+))解析:(2)错误:t=i; 正确:p=i; 解析 该程序是对 n 个数实现从小到大的排序,该题中先是找小输入整数的最小项,置于指针第 1 个元素的位置:再找出第 2 个元素至尾元素的最小项,置于第 2 个元素的位置;之后顺次处理后读元素。三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),它的功能是:求出 ss 所指字符串中
12、指定字符的个数,并返回此值。 例如,若输入字符串 123412132,输入字符 1,则输出 3。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includecoio.h #includestdio.h #define M 81 int fun(char *ss,char c) main() char aM,ch; clrscr(); printf(“/nPlease enter a string:“); gets(a); printf(“/nPlease enter a char:“);ch=g
13、etchar(); printf(“/nThe number of the char is:%d /n“,fun(a,ch); (分数:40.00)_正确答案:()解析:int fun(char *ss,char c) int i=0; for (;*ss!=/0;ss+) if(*ss=c) i+; /*求出 ss所指字符串中指定字符的个数*/ return i; 解析 从字符串 ss 中找出子字符串的方法是:从第 1 个字符开始,对字符串进行遍历:若 ss 串的当前字符等于 t 串的第 1 个字符,两字符串的指针自动加 1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若“串的字符和 c 串的字符不对应相同,则继续对,s 串的下一个字符进行处理。本程序是采用逐一比较的方式找出出现的次数。循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与 c 相同则表示又出现一次,