1、二级 C 语言笔试操作题-7 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中查找与形参 t 所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss 所指字符串数组中共有 N 个内容不同的字符串,且串长小于 M。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#includestring.h#defineN 5#d
2、efineM 8int fun(char(*ss)M,char*t)int i;/*found*/for(i=0;i_;i+)/*found*/if(strcmp(ssi,t)=0)return _;return(-1);main()char chNM=“if“,“while“,“switch“,“int“,“for“,tM;int n,i;pfintf(“/nThe original string/n/n“);for(i=0;iN;i+)puts(chi);printf(“/n“);wintf(“/nEnter a string for search:“);gets(t);n=fun(ch,
3、t);/*found*/if(n=_)printf(“/nDont found!/n“);elseprintf(“/nThe position is%d./n“,n);(分数:30.00)填空项 1:_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:从整数 1055,查找能被 3 整除且有一位上的数值是 5 的数,把这些数放在 b 所指的数组中,这些数的个数作为函数值返回。规定函数中 a1 放个位数,a2 放十位数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includes
4、tdio.hintfun(int*b)int k,a1,a2,i=0;for(k=10;k=55;k+)/*found*/a2=k/10;a1=k-a2*10;if(k%3=0a2=5)|(k%3=0a1=5)bi=k;i+;/*found*/return k;main()int a100,k,m;m=fun(a);printf(“The result is:/n“);for(k=0;km;k+)printf(“%4d“,ak);printf(“/n“);(分数:30.00)填空项 1:_三、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,
5、其功能是:将字符串尾部的*号全部删除,前面和中间的*号不动。例如,字符串中的内容为“*A*BC*DEF*G*”,删除后,字符串中的内容应当是“*A*BC*DEF*G”。在编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.h#includeconio.hvoidfun(char*a)void main()char s81;printf(“Enter a string:/n“);gets(s);fun(s);printf(“The stri
6、ng after deleted:/n“);puts(s);(分数:40.00)_二级 C 语言笔试操作题-7 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun 的功能是:在形参 ss 所指字符串数组中查找与形参 t 所指字符串相同的串,找到后返回该串在字符串数组中的位置(即下标值),若未找到则返回-1。ss 所指字符串数组中共有 N 个内容不同的字符串,且串长小于 M。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#in
7、cludestdio.h#includestring.h#defineN 5#defineM 8int fun(char(*ss)M,char*t)int i;/*found*/for(i=0;i_;i+)/*found*/if(strcmp(ssi,t)=0)return _;return(-1);main()char chNM=“if“,“while“,“switch“,“int“,“for“,tM;int n,i;pfintf(“/nThe original string/n/n“);for(i=0;iN;i+)puts(chi);printf(“/n“);wintf(“/nEnter
8、a string for search:“);gets(t);n=fun(ch,t);/*found*/if(n=_)printf(“/nDont found!/n“);elseprintf(“/nThe position is%d./n“,n);(分数:30.00)填空项 1:_ (正确答案:N i -1)解析:解析 填空 1:变量 i 是循环变量,它的取值范围是在 0 到 N 之间。填空 2:如果 ss 所指字符串数组中的字符串和 t 所指字符串相同的话,则返回其下标值,即 return i;否则返回-1,即 return-1;。填空 3:在 main 函数中输出最后结果,判断函数返回值
9、n,如果 n=-1,说明没有找到,否则输出 n。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:从整数 1055,查找能被 3 整除且有一位上的数值是 5 的数,把这些数放在 b 所指的数组中,这些数的个数作为函数值返回。规定函数中 a1 放个位数,a2 放十位数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.hintfun(int*b)int k,a1,a2,i=0;for(k=10;k=55;k+)/*found*/a2=k/10;a1=k-a2*
10、10;if(k%3=0a2=5)|(k%3=0a1=5)bi=k;i+;/*found*/return k;main()int a100,k,m;m=fun(a);printf(“The result is:/n“);for(k=0;km;k+)printf(“%4d“,ak);printf(“/n“);(分数:30.00)填空项 1:_ (正确答案:(1)a2=k/10; (2)return i;)解析:解析 (1) a2 存放十位数,所以是 a2=k/10,此处是一个书写错误。(2)根据题意,要返回能被 3 整除的数的个数,从循环体中可以知道其个数是由 i 来计算的,所以返回的是 i。三、
11、程序设计题(总题数:1,分数:40.00)3.规定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:将字符串尾部的*号全部删除,前面和中间的*号不动。例如,字符串中的内容为“*A*BC*DEF*G*”,删除后,字符串中的内容应当是“*A*BC*DEF*G”。在编写函数时,不得使用 C 语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序:#includestdio.h#includeconio.hvoidfun(char*a)void main()char s81;printf(“
12、Enter a string:/n“);gets(s);fun(s);printf(“The string after deleted:/n“);puts(s);(分数:40.00)_正确答案:(void fun(char*a)while(*a!=/0)a+;a-; /*指针 a 指向字符串的尾部*/while(*a=*)a-; /*指针 a 指向最后一个字母*/*(a+1)=/0; /*在字符串最后加上结束标志符*/)解析:解析 对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号/0。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非*号字符为止,最后在该字符后面加上结束符号/0。