1、二级 C 语言机试-200 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s 所指字符串为:asdl23fgh5#43df,处理后新字符串为:123543asdfgh#df。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的行线上填入所编写的若干表达式或语句。试题源程序 #includestdio.h#includestring.h#includest
2、dlib.h#includectype.hchar*fun(Char*s)int i,j,k,n;char *p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char);p=(char*)malloc(n*sizeof(char);j=0;k=0;for(i=0;in;i+)if(isdigit(si)/*found*/p (1) =si;j+;elsetk=si;k+;A*found*/for(i=0;i (2) ;i+)pj+i=ti;pj+k=0;/*found*/return (3) ;main()char s80;printf(“Please
3、input:“);scanf(“%s“,s);printf(“/nThe result is: %s/n“,fun(s);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、程序修改题(总题数:1,分数:30.00)1.函数 fun 的功能是:读入一个字符串(长度20),将该字符串中的所有字符按 ASCII 码升序排序后输出。例如,若输入:edcba,则应输出:abcde。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题源程序 #includestdio.hvoid fun(char t)Char c;int i,
4、j;/*found*/for(i=strlen(t);i;i-)for(j=0;ji;j+)/*found*/if(tjtj+1)c=j;tj=tj+1;tj+1=c;main()char s81;printf(“/nPlease enter a character string:“);gets(s);printf(“/n/nBefore sorting:n/“%s/“,s);fun(s);printf(“/nAfter sorting decendingly:/n/“%s/“,s);(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)2.编写函数 fun,它的功能是:利用以下
5、所示的简单迭代方法求方程:cos(x)-x=0 的一个实根。迭代步骤如下:(1)取 x1 初值为 0.0;(2)x0=x1,把 x1 的值赋给 x0;(3)x1=cos(x0),求出一个新的 x1;(4)若 x0-x1 的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);(5)所求 x1 就是方程 cos(x)-x=0 的一个实根,作为函数值返回。程序将输出结果 Root=0.739085。注意:部分原程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序 #includemath.h#includestdi
6、o.hfloat fun()main()printf(“Root=%f/n“,fun();(分数:40.00)_二级 C 语言机试-200 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)给定程序中,函数 fun 的功能是:将形参 s 所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s 所指字符串为:asdl23fgh5#43df,处理后新字符串为:123543asdfgh#df。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的行线上填入所编写的若
7、干表达式或语句。试题源程序 #includestdio.h#includestring.h#includestdlib.h#includectype.hchar*fun(Char*s)int i,j,k,n;char *p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char);p=(char*)malloc(n*sizeof(char);j=0;k=0;for(i=0;in;i+)if(isdigit(si)/*found*/p (1) =si;j+;elsetk=si;k+;A*found*/for(i=0;i (2) ;i+)pj+i=ti;pj+
8、k=0;/*found*/return (3) ;main()char s80;printf(“Please input:“);scanf(“%s“,s);printf(“/nThe result is: %s/n“,fun(s);(分数:30.00)填空项 1:_ (正确答案:j)解析:填空项 1:_ (正确答案:k)解析:填空项 1:_ (正确答案:p)解析:解析 填空 1:函数中申请了两个内存空间,其 p 是存放数字字符串,t 是存放非数字字符串,根据条件可知,p 依次存放数字字符串,其位置由 j 来控制所以应填:j。填空 2:利用 for 循环再把 t 中的内容依次追加到 p 中,其中
9、 t 的长度为 k,所以应填:k。填空 3:最后返回 p 的首地址即可,所以应填:p。二、程序修改题(总题数:1,分数:30.00)1.函数 fun 的功能是:读入一个字符串(长度20),将该字符串中的所有字符按 ASCII 码升序排序后输出。例如,若输入:edcba,则应输出:abcde。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题源程序 #includestdio.hvoid fun(char t)Char c;int i,j;/*found*/for(i=strlen(t);i;i-)for(j=0;ji;j+)/*f
10、ound*/if(tjtj+1)c=j;tj=tj+1;tj+1=c;main()char s81;printf(“/nPlease enter a character string:“);gets(s);printf(“/n/nBefore sorting:n/“%s/“,s);fun(s);printf(“/nAfter sorting decendingly:/n/“%s/“,s);(分数:30.00)_正确答案:(1)错误:for(i=strlen(t);i;i-)正确:for(i=strlen(t)-1;i;i-);(2)错误:if(tjtj+1)正确:if(tjtj+1)解析:解析
11、 错误 1:根据题意,有外 for 循环的初始值应是 strlen(t)-1。错误 2:由于是按升序排序,所以应 if(tjtj+1)。三、程序设计题(总题数:1,分数:40.00)2.编写函数 fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0 的一个实根。迭代步骤如下:(1)取 x1 初值为 0.0;(2)x0=x1,把 x1 的值赋给 x0;(3)x1=cos(x0),求出一个新的 x1;(4)若 x0-x1 的绝对值小于 0.000001,执行步骤(5),否则执行步骤(2);(5)所求 x1 就是方程 cos(x)-x=0 的一个实根,作为函数值返回。程序将输出
12、结果 Root=0.739085。注意:部分原程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序 #includemath.h#includestdio.hfloat fun()main()printf(“Root=%f/n“,fun();(分数:40.00)_正确答案:(float fun()float x0,x1=0.0;dox0=x1;x1=cos(x0);while(fabs(x0-x1)0.000001);return x1;)解析:解析 本题是根据给定的公式及条件来计算方程的一个实根。函数 fun 实现思路已经说得很清楚了,只需把算法用合适语句表达出来就可以完成求解。注意 do-while 语句中的循环中止条件。