1、二级 C 语言机试-199 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:返回字符数组中指定子符的个数,指定字符从键盘输入。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#define N 80int fun (char s,char ch)int i=0, n=0;while( 【1】 )if( 【2】 )n+;i+;【3】 ;main ( )int n;char str
2、N, ch;clrscr ();printf (“/nInput a string: /n“);gets (str);printf (“/nInput a charactor: /n“ ;scanf (“%c“, n=fun (str, ch);printf(“/nnumber of %c:%d“, ch, n);(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中函数 fun()的功能是;先将在字符串 s 中的字符按逆序存放到 t 串中,然后把 s 中的字符按正序连接到 t 串的后面。例如:当 s 中的字符串为 ABCDE 时,则 t 中的字符串应为
3、 EDCBAABCDE。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h#include string.hvoid fun (char *s, char *t )int i,sl;sl=strlen(s);for (i=0;isl;i+)ti=ssl-1;for (i=0; isl; i+)/*found*t sl+i=s i;t 2*sl-/0;main ( )char s100, t100;clrscr();printf(“/nPlease enter
4、string s: “);scanf (“%s“, s);fun (s,t);printf (“The result is: %s/n“,t);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.编写一个函数,该函数可以统计一个长度为 2 的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为 asd asasdfg asd as zx67 asd mklo,子字符串为 as,则应当输出 6。注意:部分源程序给出如下。请勿改动主函数 main 和具他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#include conio.h#
5、include stdio.h#include string.hint fun(char *str, char *substr)main ( )char str81,substr3;int n;clrscr ();printf (“输入主字符串 “);gets (str);printf (“输入子字符串“);gets (substr);puts (str);puts (substr);n=fun (shr, substr);printf(“n=%d/n “,n);(分数:40.00)_二级 C 语言机试-199 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:
6、30.00)1.请补充函数 fun(),该函数的功能是:返回字符数组中指定子符的个数,指定字符从键盘输入。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#define N 80int fun (char s,char ch)int i=0, n=0;while( 【1】 )if( 【2】 )n+;i+;【3】 ;main ( )int n;char strN, ch;clrscr ();printf (“/nInput a string: /n“);gets (st
7、r);printf (“/nInput a charactor: /n“ ;scanf (“%c“, n=fun (str, ch);printf(“/nnumber of %c:%d“, ch, n);(分数:30.00)填空项 1:_ (正确答案:1 si或者 si!= /0 2 si=ch 3 return n)解析:解析 填空 1:while 循环的条件是当前参加比较的字符不为/0,即还没有到字符串的最后一个字符。填空 2:如果当前字符等于指定字符,则统计个数的变量 n 加 1。填空 3:函数要求返回字符数组中指定字符的个数,所以函数要返回 n。二、改错题(总题数:1,分数:30.00
8、)2.下列给定程序中函数 fun()的功能是;先将在字符串 s 中的字符按逆序存放到 t 串中,然后把 s 中的字符按正序连接到 t 串的后面。例如:当 s 中的字符串为 ABCDE 时,则 t 中的字符串应为 EDCBAABCDE。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h#include string.hvoid fun (char *s, char *t )int i,sl;sl=strlen(s);for (i=0;isl;i+)ti=ssl-
9、1;for (i=0; isl; i+)/*found*t sl+i=s i;t 2*sl-/0;main ( )char s100, t100;clrscr();printf(“/nPlease enter string s: “);scanf (“%s“, s);fun (s,t);printf (“The result is: %s/n“,t);(分数:30.00)填空项 1:_ (正确答案:错误: ti=ss1-1; 正确: ti=ss1-1-i;)解析:解析 该题也是几个循环语句的嵌套使用,难度并不大,重要的足要读懂程序,题目中赋值语句ti=ss1-1;并不能完成累计循环,所以正确的
10、应该是 ti=ss1-1-i;。三、编程题(总题数:1,分数:40.00)3.编写一个函数,该函数可以统计一个长度为 2 的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为 asd asasdfg asd as zx67 asd mklo,子字符串为 as,则应当输出 6。注意:部分源程序给出如下。请勿改动主函数 main 和具他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#include conio.h#include stdio.h#include string.hint fun(char *str, char *substr)main ( )c
11、har str81,substr3;int n;clrscr ();printf (“输入主字符串 “);gets (str);printf (“输入子字符串“);gets (substr);puts (str);puts (substr);n=fun (shr, substr);printf(“n=%d/n “,n);(分数:40.00)_正确答案:(int fun(char *str, char *substr)int i, j=0;for(i=0;stri+1!=/0;i+) /*如果一个长度为 2 的子字符串在主字符串中出现一次,则 j+1, 如此循环*/if (str i=substr 0 return j; /*返回子字符串在主字符串中出现的次数*/)解析:解析 该题中 subsu 只有两个字符,所以可以用 if 语句来直接进行判断。要注意 if()中 str 组的下标为 i 和 i+1,即比较当前字符及其以后的一个字符是否分别与 substr 中的字符对应相同,若都相同则表示出现了一次。