1、二级 C 语言机试 42 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把 ASC码为偶数的字符从字符串 s 打中删除,结果仍然保存在字符串 srt 中,字符串 str 从键盘输入,其长度作为参数传入函数 fun()。 例如,输入“abcdef”,输出“ace”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #inc lude stdio, h #define N 80 U 【1】 /U in
2、t i, j; U 【2】 /U for (i=0;in;i+) if (s i %2!=0) s j+=s i; U 【3】 /U; main ( ) int i=0, strlen=0; char strN; clrscr (); printf (“/nInput a string:/n“); gets (str); while (str i != /0 ) strlen+; i+; fun (str, strlen); printf(“/n* display string */n“); puts (str); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.0
3、0)2.给定程序中,函数 fun()的功能是:求输入的两个数中较小的数。 例如:输入 5 10,结果为 min is 5。 请改正 fun()程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序、 #include stdio. h #includeconio. h /*found*/ int fun(int x, y) int z; z=xy?x: y; return (z); main ( ) int a,b,c; scanf (“%d, %d/n“, c=fun (a, b); printf (“min is %d“, c
4、); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参 p 已指向字符串中最后一个字母。在编写函数时,不得使用 C 语言的字符串函数。 例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容应当是ABCDEFG*。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includeconio. h #includestdio
5、. h void fun(char *a, char *p) main ( ) char s81,*t; printf (“Enter a string: /n “); gets (s); t=s; while (*t) t+; t-; /*指针 t 指向字符串尾部* / while (*t= * ) t-; /*指针 t 指向最后一个字母*/ fun (s, t); printf (“The string after deleted: /n“); puts (s); (分数:40.00)_二级 C 语言机试 42 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:
6、1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把 ASC码为偶数的字符从字符串 s 打中删除,结果仍然保存在字符串 srt 中,字符串 str 从键盘输入,其长度作为参数传入函数 fun()。 例如,输入“abcdef”,输出“ace”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #inc lude stdio, h #define N 80 U 【1】 /U int i, j; U 【2】 /U for (i=0;in;i+) if (s i %2!=0) s j+=
7、s i; U 【3】 /U; main ( ) int i=0, strlen=0; char strN; clrscr (); printf (“/nInput a string:/n“); gets (str); while (str i != /0 ) strlen+; i+; fun (str, strlen); printf(“/n* display string */n“); puts (str); (分数:30.00)填空项 1:_ (正确答案:1void fun(char s,int n))解析:2j=0 3 sj=/0 解析 填空 1:由主函数 main()调用 fun()函
8、数的格式可以知道,fun()函数没有返回值,第二个参数是字符数组,第二个参数是整型变量。填空 2:变量 j 声明时没有初始化,所以在使用 j 之前要将它初始化为 0。填空 3:当把所有 ASC码为 偶数的字符都存入字符串 s 中后,要在最后加上/0,表示字符串的结束。二、B改错题/B(总题数:1,分数:30.00)2.给定程序中,函数 fun()的功能是:求输入的两个数中较小的数。 例如:输入 5 10,结果为 min is 5。 请改正 fun()程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序、 #include std
9、io. h #includeconio. h /*found*/ int fun(int x, y) int z; z=xy?x: y; return (z); main ( ) int a,b,c; scanf (“%d, %d/n“, c=fun (a, b); printf (“min is %d“, c); (分数:30.00)填空项 1:_ (正确答案:错误:int fun(int x,y) 正确:int fun(int x,int y))解析:解析 C 语言中规定,在函数的形参中不允许出现 int x,y 之类的语句,必须指定每一个参数的类型,所以在做类似题目时一定要谨慎。三、B编
10、程题/B(总题数:1,分数:40.00)3.假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参 p 已指向字符串中最后一个字母。在编写函数时,不得使用 C 语言的字符串函数。 例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容应当是ABCDEFG*。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includeconio. h #includestdio. h void fun(char *a, ch
11、ar *p) main ( ) char s81,*t; printf (“Enter a string: /n “); gets (s); t=s; while (*t) t+; t-; /*指针 t 指向字符串尾部* / while (*t= * ) t-; /*指针 t 指向最后一个字母*/ fun (s, t); printf (“The string after deleted: /n“); puts (s); (分数:40.00)_正确答案:()解析:void fun(char *a, char *p) char *t=a; for (; t=p; t+) if(*t!=*) * (a+)=*t; /*将 p 以前所有不是*号的字符保留下来*/ for (;*t!=/0 ;t+) * (a+) =.t; / * 将 p 以后的所有*号保留下来*/ *a=/0; / *在字符串最后加上结束标记位*/ 解析 本题曾在历年上机考试及模拟试题中多次出现,一般用两个循环语句来实现。第 1 个循环的作用是将 p 以前所有不是*号的字符保留下来,即删除所有的*号。第 2 个循环的作用是将 p 以后的所有*号保留下来。