1、二级 C语言机试-54 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:33.00)1.请补充函数 fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str中。例如:当 n=13572468时,str=-“86427531”。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#include conio.h#define N 80char strN;void fun(long int n)int i=0;while(
2、 【1】 )stri= 【2】 ;n/=10;i+;【3】 ;main()long int n=13572468;clrscr();printf(“* the origial data */n“);printf(“n=%ld“,n);fun(n);printf(“/n%s“,str);(分数:33.00)填空项 1:_二、改错题(总题数:1,分数:33.00)2.下列给定程序中,函数 fun的功能是按以下递归公式求函数值。(分数:33.00)填空项 1:_三、编程题(总题数:1,分数:34.00)3.请编写函数 fun(),对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASC
3、II码值升序排列。例如:原来的字符串为 BdsihAd,则排序后输出为 BAdhisd。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:#include stdio.h#include ctype.h#include conio.hint fun(char*s,int num)main()char s10;clrscr();printf(“输入 7个字符的字符串:“);gets(s);fun(s,7);printf(“/n%s“,s);(分数:34.00)_二级 C语言机试-54 答案解析(总分:100.00,
4、做题时间:90 分钟)一、填空题(总题数:1,分数:33.00)1.请补充函数 fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组 str中。例如:当 n=13572468时,str=-“86427531”。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题程序:#include stdio.h#include conio.h#define N 80char strN;void fun(long int n)int i=0;while( 【1】 )stri= 【2】 ;n/=10;i+;【3
5、】 ;main()long int n=13572468;clrscr();printf(“* the origial data */n“);printf(“n=%ld“,n);fun(n);printf(“/n%s“,str);(分数:33.00)填空项 1:_ (正确答案:【1】n0 【2】n%10+0 【3】stri=0)解析:解析填空 1:while 循环的执行条件是 n0,当 n等于 0时,说明已经将整数的各位数字都转换为数字字符并存入字符串中了。填空 2:n 对 10求余,得到整数 n的个位数字,在加上字符乃,的 ASCII码,得到对应的数字字符,并存入字符串 str 中。填空 3
6、:将整数转换为字符串并倒序存放入字符数组str中后,还要在 str最后加上字符串结束标记符/0。二、改错题(总题数:1,分数:33.00)2.下列给定程序中,函数 fun的功能是按以下递归公式求函数值。(分数:33.00)填空项 1:_ (正确答案:(1)错误:fun(int n); 正确:fun(int n)(2)错误:if(n=1) 正确:if(n=1))解析:解析错误 1:该行是函数的首部,不是一条语句,因此不能以分号结束。错误 2:if 垢面应该紧跟一个条件判断表达式,若写成“if(n=1)”,则说明该表达式的值永远为真,也就是说这个条件永远成立,没有递归执行。三、编程题(总题数:1,
7、分数:34.00)3.请编写函数 fun(),对长度为 7个字符的字符串,除首、尾字符外,将其余 5个字符按 ASCII码值升序排列。例如:原来的字符串为 BdsihAd,则排序后输出为 BAdhisd。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:#include stdio.h#include ctype.h#include conio.hint fun(char*s,int num)main()char s10;clrscr();printf(“输入 7个字符的字符串:“);gets(s);fun(s,
8、7);printf(“/n%s“,s);(分数:34.00)_正确答案:(int fun(char*s,int num)char t;int i,j;for(i=1;inum-2;i+) /*下标值从 1开始,用循环依次取得字符串中的字符*/for(j=i+1;jnum-1;j+) /*将字符与其后的每个字符比较*/if(sisj) /*如果后面字符的 ASCII码值小于该字符的 ASCII码值*/ t=si; /*则交换这两个字符*si=sj;sj=t;)解析:解析本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从 1开始,用循环变量 i来依次取得数组中的元素,用数组中的元素 si和 sj进行比较,如果后一个元素的ASCII码值小于前一个元素的 ASCII码值,则交换这两个数组元素的值。