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