1、二级 C 语言机试 25 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),函数 fun()的功能是求 7 的阶乘。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h long fun(int n) if(U 【1】 /U) return(n*fun(U 【2】 /U);else if(U 【3】 /U) return 1; main() int k=7; printf(“%d!=%ld
2、/n“, k, fun(k); (分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的作用是,将字符串 tt 中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Ab,cD“,则输出“ab, cd“。 请改正函数 fun()中的错误,使它能得出正确的结果。注童:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdio.h #include string.h #include conio.h char *fun (char tt) int i; for(i=0; tti;
3、 i+) /*found*/ if(A =tti|(tti=z ) tti+=32; return(tt); main() int i; char tt81; clrscr(); printf(“/nPlease enter a string:“); gets(tt); printf(“/nThe result string is:/n %s“, fun(tt); (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)3.请编写一个函数 fun(),它的功能是:将 ss 所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。 例如,若输入
4、abc4Efg,则应输出 aBc4EFg。 注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include conio.h #include stdio.h #include string.h void fun(char *ss) main() char tt81; clrscr(); printf(“/nPlease enter an string within 80 characters:/n“); gets(tt); printf(“/n/nAfter changing, the string/
5、n /%s“, tt); fun(tt); printf(“/nbecomes/n/%s/n“,tt); (分数:40.00)_二级 C 语言机试 25 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.请补充函数 fun(),函数 fun()的功能是求 7 的阶乘。 注意:部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h long fun(int n) if(U 【1】 /U) return(n*fun(U 【2】
6、/U);else if(U 【3】 /U) return 1; main() int k=7; printf(“%d!=%ld/n“, k, fun(k); (分数:30.00)填空项 1:_ (正确答案:1n1 2n-1 3n=1)解析:解析 填空 1:求阶乘时采用递归的算法,n1 和 n=1 这两种情况的处理方法不同,需要分开考虑。填空 2:阶乘的算法是,当 n1 时,n!=n*(n-1)!,即 fun(n)=n*fun(n-1)。填空 3:n=1 是递归的终止条件,因为 1!=1,所以当 n=1 时,返回 1。二、B改错题/B(总题数:1,分数:30.00)2.下列给定程序中,函数 fu
7、n()的作用是,将字符串 tt 中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Ab,cD“,则输出“ab, cd“。 请改正函数 fun()中的错误,使它能得出正确的结果。注童:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include stdio.h #include string.h #include conio.h char *fun (char tt) int i; for(i=0; tti; i+) /*found*/ if(A =tti|(tti=z ) tti+=32; return(tt); main() int i; cha
8、r tt81; clrscr(); printf(“/nPlease enter a string:“); gets(tt); printf(“/nThe result string is:/n %s“, fun(tt); (分数:30.00)填空项 1:_ (正确答案:错误:if(A =tti|(tti=Z) 正确:if(tti=A) printf(“/n/nAfter changing, the string/n /%s“, tt); fun(tt); printf(“/nbecomes/n/%s/n“,tt); (分数:40.00)_正确答案:()解析:void fun(char *ss) int i; for(i=0;ssi!=/0;i+) /*将 ss 所指字符串中所有下标为奇数位置的字母转换为大写*/ if(i%2=1&ssi=a &SSi=z) ssi=ssi-32; 解析 从 C 语言的学习中我们知道,只要将小写字母减去 32 则转成大写字母,将大写字母加上 32 则转成小写字母。该程序是用 if 语句实现该功能转化的。