【真题1】 下列给定程序中,函数fun()的作用是:将字符串tt 中的大写字母都改 为对应的小写字母,其他字符不变。例如,若输入"Ab,cD",则输出"ab,cd"。 试题程序: #include < stdio.h >#include < string.h >#include < conio.h >char ____1__fun(char tt[]) {int i; for(i=0;tt[i];i++) { if((tt[i] >='A')&&(tt[i]< = ____2___)) tt[i]+=32; } return(tt); } main() { char tt[81]; printf("\nPlease enter a string: "); gets(tt); printf("\nThe result string is: \n%s",fun(___3___)); } (2011年2月) 解析: 填空1:由return语句可以看出,该函数的返回值类型是指向字符串的 指针,所以应该使用符号"*"。 填空2:从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的 ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准 是ASCII码值是否介于A和Z之间。 填空3:根据题目的意思这里应该调用函数fun 对字符串tt进行转换,所以应 该使用tt作为函数的参数。 答案:【1】* 【2】'Z' 【3】tt 【真题2】 文件MODI.C 中程序的功能是:统计一个英文句子中各小写的元音字母 出现的次数。 例如,若输入字符串: "I am glad when playing games",则应输 出: a 4 e 2 i 1 o 0 u 0 注意: 请改正程序中的错误,使它能计算出正确的结果。 #include < conio.h >#include < stdio.h >int vv[26]; void Vs( char* s ) { for( ; *s; s++ ) /************found**********/ switch( s ); { case( 'a' ): case( 'e' ): case( 'i' ): case( 'o' ): case( 'u' ): vv[ *s - 'a' ]++; } } main() { char str[81], ww[6] = { "aeiou" }; int i; clrscr(); printf( "\nPlease enter a string:\n" ); gets( str ); Vs( str ); /************found**********/ for( i = 0; i < 6; i++ ) printf( "\n%c == > %2d", ww[i], vv[ ww[i] - ww[0] ] ); getch(); } (2011年2月) 解析: (1):错误:switch(s); 正确:switch(*s) (2):错误:for(i=0;i< 6;i++) 正确:for(i=0;i< 5;i++) 【真题3】 编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数 值返回;n 通过形参传入。 1 1 1 S = 1 + ── + ─── + …… + ────── 1+2 1+2+3 1+2+3+…+n 例如:若n 的值为11 时,则函数值为:1.833333 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >#include < string.h >float fun(int n) {……} main() { int n;float s; clrscr(); printf("\nPlease enter N:");scanf("%d",&n); s=fun(n); printf("the result is:%f\n",s); } (2011年2月) 解析: 解题思路:通过一变量来累计1 至n 的和值,再通过另一变量再累计分 式的和值。 本评析仅供参考。 float fun(int n) { int i; float s=1.0,h=1; for (i=2;i< =n;i++) { h=h+i;/*h 为每一分式的除数,i为前后相邻除数之间的增量*/ s=s+1.0/h; } return(s); } |