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