1、二级 C 语言-59 及答案解析(总分:61.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 , int
2、n) int i, j; char ch; for (i=0; in; i+) for(j=U U /U/U;jn;j+) if (sis j) ch=s j; U U /U/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); (分数:30
3、.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:求两个非零正整数的最大公约数,并作为函数值返回。 例如,若num1 和 num2 分别为 49 和 21,则输出的最大公约数为 7;若 num1 和 num2 分别为 27 和 81,则输出的最大公约数为 27。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int fun(int a,int b) int r,t: if(ab) /*found*/ t=a;b=a;a=t
4、; r=a%b; while(r!=0) a=b;b=r;r=a%b; /*found*/ return(a); void main() int num1,hum2,a; printf(“Input num1 num2:“); scanf(“%d%d“, clrscr(); fun(aa, for(k=0;k_二级 C 语言-59 答案解析(总分:61.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),该函数的功能是:把字符串 str 中的字符按字符的 ASC码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。 例如
5、,如果输入“cdefgh”,则输出为“hgfedc”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include stdio.h #define N 80 void fun (char s , int n) int i, j; char ch; for (i=0; in; i+) for(j=U U /U/U;jn;j+) if (sis j) ch=s j; U U /U/U; s i =ch; main ( ) int i=0, strlen=0; char str N; clrsc
6、r (); 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 个数则从头到倒数的第 2 个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即
7、交换)。理解了选择法的思路,则此空就非常简单了,应该填i。填空 2:借助第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:求两个非零正整数的最大公约数,并作为函数值返回。 例如,若num1 和 num2 分别为 49 和 21,则输出的最大公约数为 7;若 num1 和 num2 分别为 27 和 81,则输出的最大公约数为 27。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h int
8、 fun(int a,int b) int r,t: if(ab) /*found*/ t=a;b=a;a=t; r=a%b; while(r!=0) a=b;b=r;r=a%b; /*found*/ return(a); void main() int num1,hum2,a; printf(“Input num1 num2:“); scanf(“%d%d“, clrscr(); fun(aa, for(k=0;k_正确答案:(void fun(int *a, int *n) int i,j=0; for(i=1;i=1000;i+) /*求 1 到 1000 之内能被7 或 11 整除、但不能同时被 7 和 11 整除的所有整数,并放入数组 a 中*/ if(i%7=0|i%11=0)*n=j; /*传回满足条件的数的个数*/ )解析:解析 注意本题题目应是找出能被 7 或 11 整除但不能同时被 7 和 11 整除的所有整数。能同时被7 和 11 整除的整数一定能被 77 整除,且不能被 77 整除的数不一定就是能被 7 或 11 整除的数。所以可得出程序中的 if()。按运算优先级可知 (i%7=0|i%11=0),注意,两边必须要有小括号。