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