1、二级 C语言机试-293 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),函数 fun()的功能是求 7的阶乘。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.hlong fun(int n)if( 【1】 )return(n*fun( 【2】 );else if( 【3】 )return 1;main()int k=7;printf(“%d!=%ld/n“, k, fun(k);(分数:30.00
2、)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的作用是,将字符串 tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Ab,cD“,则输出“ab, cd“。请改正函数 fun()中的错误,使它能得出正确的结果。注童:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.h#include string.h#include conio.hchar *fun (char tt)int i;for(i=0; tti; i+)/*found*/if(A =tti|(tti=z )tti+=32
3、; 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,分数:40.00)3.请编写一个函数 fun(),它的功能是:将 ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入 abc4Efg,则应输出 aBc4EFg。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函
4、数 fun的花括号中填入所编写的若干语句。试题程序:#include conio.h#include stdio.h#include string.hvoid fun(char *ss)main()char tt81;clrscr();printf(“/nPlease enter an string within80 characters:/n“);gets(tt);printf(“/n/nAfter changing, the string/n/%s“, tt);fun(tt);printf(“/nbecomes/n/%s/n“,tt);(分数:40.00)_二级 C语言机试-293 答案解
5、析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun(),函数 fun()的功能是求 7的阶乘。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.hlong fun(int n)if( 【1】 )return(n*fun( 【2】 );else if( 【3】 )return 1;main()int k=7;printf(“%d!=%ld/n“, k, fun(k);(分数:30.00)填空项 1:_ (正确答案:1n
6、1 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。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的作用是,将字符串 tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Ab,cD“,则输出“ab, cd“。请改正函数 fun()中的错误,使它能得出正确的结果。注童:不要改动 main函数,不得增
7、行或删行,也不得更改程序的结构。试题程序:#include stdio.h#include string.h#include conio.hchar *fun (char tt)int i;for(i=0; tti; 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)_正确答案:(错误:
8、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语句实现该功能转化的。