下列给定函数中,函数fun()的功能是:统计字符串中各元音字母(即A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIs is a boot,则应输出是1 0 2 2 0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <conio.h>
#include <stdio.h>
/*************found**************/
fun(char *s, int num[5])
int k, i=5;
for(k=0;k<i;k++)
/*************found**************/
num [i]=0;
for(;*s;s++)
i=-l;
/*************found**************/
switch(s)
case ’a’: case ’A’:i=0;break;
case ’e’: case ’E’:i=1;break;
case ’i’: case ’I’:i=2;break;
case ’o’: case ’O’:i=3;break;
case ’u’: case ’U’:i=4;break;
if(i>=0)
num[i]++;
main ( )
char s1[81]; int num1[5], i;
clrscr ();
printf("\nPlease enter a string: ");
gets (s1);
fun(s1, num1);
for(i=0;i<5;i++) printf("%d",num1[i]);
printf ("\n");
参考答案:错误: fun(char *s, int num[E]) 正确: void fun(char *s, int num[E])
(B) 错误: num[i]=0; 正确: num[k]=0;
(C) 错误: switch(s) 正确: switch(*s)
解析: switch语句说明:
(1)switch后的表达式,可以是整型或字符型,也可以是枚举类型的。在新的ANSIC标准中允许表达式的类型为任何类型。
(2)每个case后的常量表达式只能是常量组成的表达式,当switch后的表达式的值与某一个常量表达式的值一致时,程序就转到此case后的语句开始执行。如果没有一个常量表达式的值与swish后的值一致,就执行default后的语句。
(3)各个case后的常量表达式的值必须互不相同,不然的话程序就不知该跳到何处开始执行。
(4)各个case的次序不影响执行结果,一般情况下,尽量使用出现机率大的case放在前面(为什么,等学到《数据结构》就知道了)。
(5)在执行完一个case后面的语句后,程序流程转到下一个case后的语句开始执行。千万不要理解成行完一个case后程序就转到switch后的语句去执行了。
在本例中,其他错误都比较简单,而且我们在前面已经介绍过了。