1、二级 C语言机试-282 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指的变量中。ss 所指字符串数组中共有 M个字符串,且串长小于N。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includescdio.h#includestring.h#define M 5#define N 20int funIchar(
2、*ss)N.int*n)int i.k=0,len=N;/*found*/for(i=0;i小于 (1) ;i+len=strlen(ssi);if(i=O)*n=len;/*found*/if(len (2) *n)*n=len;k=i;/*fOund*/return( (3) );main()char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianjin“,“chongqing“);int n,k,i;printff“/nThe original strings are:/n“);for(i=0;iM;i+)puts(ssi);k=fun(ss,pr
3、intf(“/nThe length of shortest string is:%d/n“,n);printf(“/nThe shortest string is:%s/n“,ssk);(分数:30.00)_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun的功能是:将 tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。例如,若输入“Ab,CD”,则输出“AB,CD”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#lncludeconio.h#includestdio.h#i
4、ncludestring.hchar*fun(char tt)(int i;for(i=O;tt1;i+)/*found*/if(tti=a)|(tti=z)/*found*/tti+=32;return(tt);main()char tt81;printf(“/nPlease enter a string:“);gets(tt);printf(/nThe result string is/n%s“fun(tt);(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.编写函数 fun,其功能是:将所有大于 1小于整数 m的非素数存入 xx所指数组中,非素数的个数通过k返回。例
5、如,若输入 17,则应输出:4 6 8 9 1012 14 15 16。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdlib.h#includeconio.h#includesfdio.hvoid fun(int m,int*k,int xx)void main()(int m,n,zz100;system(“CLS“);printf(“/nPlease enter an integer number between 10 and 100:“);scanf(“%d“,fun(n,prin
6、tf(“/n/nThere are%d non-prime numbers less than%d:“,m,n);for(n=O;nm;n+)printf(“/n%4d“,zzn);(分数:40.00)_二级 C语言机试-282 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指的变量中。ss 所指字符串数组中共有 M个字符串,且串长小于N。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:
7、部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includescdio.h#includestring.h#define M 5#define N 20int funIchar(*ss)N.int*n)int i.k=0,len=N;/*found*/for(i=0;i小于 (1) ;i+len=strlen(ssi);if(i=O)*n=len;/*found*/if(len (2) *n)*n=len;k=i;/*fOund*/return( (3) );main()char ssMN=“shanghai“,“guangzhou“,“beijing“,“tianji
8、n“,“chongqing“);int n,k,i;printff“/nThe original strings are:/n“);for(i=0;iM;i+)puts(ssi);k=fun(ss,printf(“/nThe length of shortest string is:%d/n“,n);printf(“/nThe shortest string is:%s/n“,ssk);(分数:30.00)_正确答案:(M (2) (3)k)解析:解析 本题关键字有:for 循环语句;if 语句;recum 语句。微分析填空 1:ss所指字符串数组中共有 M个字符串,所以循环条件是 iM。填空
9、 2:指针 n中存放下标小于 i的字符串中长度最短的字符串的长度,如果当前下标为 i的字符串长度小于*n,则将该长度值赋给*n,所以条件表达式为 len*n。填空 3:函数返回最短字符串的行下标,变量 k存储行下标的值,所以返回 k值。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun的功能是:将 tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。例如,若输入“Ab,CD”,则输出“AB,CD”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#lncludeconio.h#inc
10、ludestdio.h#includestring.hchar*fun(char tt)(int i;for(i=O;tt1;i+)/*found*/if(tti=a)|(tti=z)/*found*/tti+=32;return(tt);main()char tt81;printf(“/nPlease enter a string:“);gets(tt);printf(/nThe result string is/n%s“fun(tt);(分数:30.00)_正确答案:(if(tti=a)解析:解析 本题关键字有:if 语句;小写字母转换为大写字母的方法;逻辑运算符。微分析(1)要判断字符是
11、否在az之间,需要进行连续的比较,所以用system(“CLS“);printf(“/nPlease enter an integer number between 10 and 100:“);scanf(“%d“,fun(n,printf(“/n/nThere are%d non-prime numbers less than%d:“,m,n);for(n=O;nm;n+)printf(“/n%4d“,zzn);(分数:40.00)_正确答案:(void fun(inf m,int*k,int xx)inf i,j,n=O;for(j=4;im;i+) /*找出大于 1小于 m的非素数*/( for(j=2;ji;j+)if(i%j=O)break;if(ji)xxn+=i;*k=n; /*返回非素数的个数*/)解析:解析 本题关键字有:非素数的判断;循环判断结构;数组的引用。只能被 1和它本身整除的数为素数,判断是否为素数常用如下代码实现:for(j=2;ji;j+)if(i%j=0)微分析将 1m 之间的非素数存入数组中,可以用循环判断结构。循环语句遍历 1m 之间的每个数,判断语句判断该数是否为素数,将非素数存入数组中。