1.填空题 请补充函数fun(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。 例如,输入aeiouAOUpqrt,结果为A:2 E:1 I:1 O:2 U:2 other:4。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #define N 100 void fun(char *str,int bb[]) { char *p=str; int i=0; for(i=0;i<6;i++) 【1】; while(*p) { switch(*p) { case ’A’: case ’a’:bb[0]++;break; case ’E’: case ’e’:bb[1]++;break; case ’I’: case ’i’:bb[2]++;break; case ’O’: case ’o’:bb[3]++;break; case ’U’: case ’u’:bb[4]++;break; default:【2】; } 【3】 } } main() { char str[N],ss[6]="AEIOU"; int i; int bb[6]; clrscr(); printf("Input a string:
"); gets(str); printf("the string is:
"); puts(str); fun(str,bb); for(i=0;i<5;i++) printf("
%c:%d",ss[i],bb[i]); printf("
other:%d",bb[i]); } 答案及评析: 【1】bb[i]=0 【2】bb[5]++ 【3】p++; 【解析】填空1:数组bb[6] 用来存放5个元音字母和其他字符的个数,在使用之前需要清零。 填空2:数组元素bb[5] 用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。 2. 改错题 下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include int fun(int k) { int m=0,mc=0, j; /**********************found***********************/ while(k>=2)&&(mc<6) { /**********************found***********************/ if((k%7=0)||(k=0)) { /**********************found***********************/ m=k; mc++; } k--; } return m; } main() { clrscr(); printf("%d
",fun(500)); } 答案及评析: (1)错误:while(k>=2)&&(mc<6) 正确:while((k>=2)&&(mc<6)) (2)错误:if((k%7=0)||(k=0)) 正确:if((k%7==0)||(k= =0)) (3)错误:m=k; 正确:m=m+k; 【解析】错误1:C语言规定while语句后的表达式两侧必须要有圆括号。 错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。 错误3:根据题意,将满足条件的数求累加和。 3. 编程题 请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。 例如,若输入ABC4efG,则应输出aBc4efg。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include void fun(char *ss) { } main() { char tt[81]; clrscr(); printf("
Please enter an string within 80 characters:
"); gets(tt); printf("
After changing, the string
%s",tt); fun(tt); printf("
becomes
%s
",tt); } 答案及评析: void fun(char *ss) { int i; for(i=0;ss[i]!=’ ’;i++) /*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/ if(i%2==0&&ss[i]>=’A’&&ss[i]<=’Z’) ss[i]=ss[i]+32; } 【解析】从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。该程序是用if语句实现该功能转化的。
相关资料
|