1、二级 C 语言机试 98 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充 main 函数,改函数的功能是,把一个二维字符数组每行字符串最大的字符拷贝到字符数组 s 中。例如,如果 str3=“efjh“,“cfimls“,“owys“,则 s;“hsy“。 注意:部分源程序给出如下 请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。 试题程序: #inc ludestdio, h main() int i=0; char *str 3 = “efjh“, “efknls“
2、, “owys“ ;char *p; char s 8; clrscr 0; U【1】/U; for (i=O; i3; i+) s i =*p i; while (*p i ) if (S i *p i ) s i =*pi; U【2】/U; U【3】/U; printf(“ new string /n“); puts (s); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:判断一个整数 m 是否是素数,若是返回 l,否则返回 0。在main()函数中,若 fun()返回 1 则输出 YES,若 fun()返回
3、 0 则输出 NO! 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构 试题程序: #include conio.h #include stdio.h int fun(int m) int k=2; while (k=m(m%k) /*found*/ k+ /*found*/ if(m=k) return 1; else return O; main ( ) iht n; clrscr (); printf(“/nPlease enter n: “); scanf (“%d“, if (fun (n) printf (“YES/n
4、“); else printf (“NO! /n“); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:将 s 所指字符串中 ASCII 值为偶数的字符删除,串中剩余字符形成一个新串放在 t 所指的数组中。 例如,若 s 所指字符串中的内容为 ABCDEFGl2345,其中字符 B 的ASC码值为偶数、字符 2 的 ASC码值为偶数、,都应当删除,其他依次类推。最后 t 所指的数组中的内容应是 ACEGl35。 注定:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中
5、填入所编写的若干语句。 试题程序; #include stdio. h #includestring.h #includeconio. h void fun(char *s, char t) main ( ) char s100,t 100; clrscr (); printf (,/nPlease enter string S: “); scanf (“%s“, s); fun(s,t); printf (“/nThe result is :%s/n“,t); (分数:40.00)_二级 C 语言机试 98 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分
6、数:30.00)1.请补充 main 函数,改函数的功能是,把一个二维字符数组每行字符串最大的字符拷贝到字符数组 s 中。例如,如果 str3=“efjh“,“cfimls“,“owys“,则 s;“hsy“。 注意:部分源程序给出如下 请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。 试题程序: #inc ludestdio, h main() int i=0; char *str 3 = “efjh“, “efknls“, “owys“ ;char *p; char s 8; clrscr 0; U【1】/U; for (i=O;
7、 i3; i+) s i =*p i; while (*p i ) if (S i *p i ) s i =*pi; U【2】/U; U【3】/U; printf(“ new string /n“); puts (s); (分数:30.00)填空项 1:_ (正确答案:1 p=str 2pi+ 3si=/0)解析:解析 填空 1:sb 是一个大小为 3 的指针数组,每个指针指向一个字符串,p 是指向指针的指针,首先要使指针 p 指向数组 sb 的首地址。填空 2:通过 pi+使 pi指向第 i 个字符串的下一个字符。填空 3:将每行字符串的最大字符都拷贝到字符数组 s 中后,不要忘了在数组 s
8、 最后加上字符串结束标记符/0。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:判断一个整数 m 是否是素数,若是返回 l,否则返回 0。在main()函数中,若 fun()返回 1 则输出 YES,若 fun()返回 0 则输出 NO! 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构 试题程序: #include conio.h #include stdio.h int fun(int m) int k=2; while (k=m(m%k) /*found*/ k+ /*found
9、*/ if(m=k) return 1; else return O; main ( ) iht n; clrscr (); printf(“/nPlease enter n: “); scanf (“%d“, if (fun (n) printf (“YES/n“); else printf (“NO! /n“); (分数:30.00)填空项 1:_ (正确答案:(1)错误:k+ 正确:k+)解析:(2)错误:if(m=k) 正确:if(m=k) 解析 函数 fun()的功能是判断 m 是否为素数:m 从 2 开始作为除数,并对 m 取余,若不存在一个数使得余数为 0,则 m 为素数,程序的
10、错误在于 if(m=k)语句中的逻辑表达式写成了赋值表达式。三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:将 s 所指字符串中 ASCII 值为偶数的字符删除,串中剩余字符形成一个新串放在 t 所指的数组中。 例如,若 s 所指字符串中的内容为 ABCDEFGl2345,其中字符 B 的ASC码值为偶数、字符 2 的 ASC码值为偶数、,都应当删除,其他依次类推。最后 t 所指的数组中的内容应是 ACEGl35。 注定:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程
11、序; #include stdio. h #includestring.h #includeconio. h void fun(char *s, char t) main ( ) char s100,t 100; clrscr (); printf (,/nPlease enter string S: “); scanf (“%s“, s); fun(s,t); printf (“/nThe result is :%s/n“,t); (分数:40.00)_正确答案:()解析:void fun(char *s, char t) int i=0; for (;*s!=/0 ;s+) /*找出 AS
12、CII 值为奇数的字符依次存入数组 t 中*/ if (*s%2=1) t i+ =*s; ti=/0; /*在字符串的末尾口上串结束符*/ 解析 要删除 ASCH 值为偶数的字符,也就是要留下 ASCH 值为奇数的字符,由于最终是要求求出剩余字符(BPASC值为奇数)形成的新串,所以本题程序的算法是从原字符串的头到尾扫描并找出 ASC值为奇数的字符依次存入数组冲。此外,还要注意数组 t 的下标变化和下标的初值(初值必须为 0,即 i=0),ti+州的作用是先使用 ti然后再使自增 1。任何字符串的末尾都要有串结束符。这种算法在很多题中都要用到,学习者可以举一反三地找一些其他相关习题练习一下。