1、二级 C 语言机试 44 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把字符串 str 中的字符按字符的 ASC码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。 例如,如果输入“cdefgh”,则输出为“hgfedc”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #define N 80 void fun (char s , i
2、nt n) int i, j; char ch; for (i=0; in; i+) for(j=U 【1】 /U;jn;j+) if (sis j) ch=s j; U 【2】 /U; s i =ch; main ( ) int i=0, strlen=0; char str N; clrscr (); printf (“/nInput a string: /n“); gets (str); while (str i != /0) strlen+; i+; fun (str, strlen); printf (“/n*display string */n“); puts (str); (分数
3、:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:应用递归算法求某数 a 的平方根。求平方根的迭代公式如下: (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:将放在字符串数组中的 M 个字符串(每串的长度不超过 N),按 J顷序合并组成一个新的字符串。 例如,若字符串数组中的 M 个字符串为 AAAA BBBBBBB CC 则合并后的字符串内容应该是 AAAABBBBBBBCC 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的
4、任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include conio. h #define M 3 #define N 20 void fun (char a M N, char *b) main ( ) char w M N =“AAAA“, “BBBBBBB“, “CC“, i; char a100=“ #“; printf (“The string: /n “); for (i=0; iM; i+) puts (wi); printf (“ /n “); fun (w, a); printf (“The A string: /n “); printf(“
5、%s “,a); printf(“/n/n “); (分数:40.00)_二级 C 语言机试 44 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把字符串 str 中的字符按字符的 ASC码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。 例如,如果输入“cdefgh”,则输出为“hgfedc”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio
6、.h #define N 80 void fun (char s , int n) int i, j; char ch; for (i=0; in; i+) for(j=U 【1】 /U;jn;j+) if (sis j) ch=s j; U 【2】 /U; s i =ch; main ( ) int i=0, strlen=0; char str N; clrscr (); printf (“/nInput a string: /n“); gets (str); while (str i != /0) strlen+; i+; fun (str, strlen); printf (“/n*d
7、isplay string */n“); puts (str); (分数:30.00)填空项 1:_ (正确答案:1i 2 sj=si)解析:解析 填空 1:本题采用选择法进行排序。选择法的算法思路是:如果有 n 个数则从头到倒数的第 2 个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。理解了选择法的思路,则此空就非常简单了,应该填i。填空 2:借助第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:应用递
8、归算法求某数 a 的平方根。求平方根的迭代公式如下: (分数:30.00)填空项 1:_ (正确答案:错误:fun(double a,double x0) 正确:double fun(double a,double x0))解析:(2)错误:if(fabs(x1-x0)0.00001) 正确:if(fabs(x1-x0)=0.00001) 解析 用 C 语言求平方根的方法一般有两种经典的算法,它们分别是迭代法和递归法,本题要求用递归法。该程序采用了 if语句,错误在于 if 语句的判断条件,程序的含义是当迭代结果差小于误差时进行循环,故正确的应该是 if(fabs(x1-x0)=0.00001
9、)。三、B编程题/B(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:将放在字符串数组中的 M 个字符串(每串的长度不超过 N),按 J顷序合并组成一个新的字符串。 例如,若字符串数组中的 M 个字符串为 AAAA BBBBBBB CC 则合并后的字符串内容应该是 AAAABBBBBBBCC 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include conio. h #define M 3 #define N 20 void fun (char a M N, char
10、 *b) main ( ) char w M N =“AAAA“, “BBBBBBB“, “CC“, i; char a100=“ #“; printf (“The string: /n “); for (i=0; iM; i+) puts (wi); printf (“ /n “); fun (w, a); printf (“The A string: /n “); printf(“%s “,a); printf(“/n/n “); (分数:40.00)_正确答案:()解析:void fun (char a M N ,char *b) int i, j, k=0; for (i=0; iM; i + ) /*将字符串数组中的 M 个字符串,按顺序存入一个新的字符串*/ for(j=0;ai j !=/0;j+) b k+=ai j; bk=/0; /*在字符串最后加上结束标志符*/ 解析 本程序中 for(i=0;iM;i+)循环的作用是用于对二维数组行的控制,第 2 个循环的作用是从同一行中取出字符并存放到一维数组 b 中,语句是bk+=aij;。