给定程序中函数 fun 的功能是: 统计字符串中各元音字母(即: A、 E、 I、 O、 U)的个数。 注意: 字母不分大、 小写。
例如: 若输入: THIs is a boot, 则输出应该是: 1、 0、 2、 2、 0。
请改正程序中的错误, 使它能得出正确的结果。
注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include<stdio.h>
void fun(char *s, int num[5])
{ int k, i=5;
for(k=0; k<i; k++)
/**********found**********/
num[i]=0;
for(; *s; s++)
{ i=-1;
/**********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[j]++;
}
}
main()
{ char s1[81]; int num1[5], i;
printf("\nPlease enter a string:"); gets(s1);
fun(s1, num1);
for(i=0; i<5; i++)printf("%d", num1[i]);
printf("\n");
}
(1)num[k]=0;
(2)switch(*s)
循环变量是 k, 所以是 num[k]=0;。
switch 语句说明如下:
(1)switch 后的表达式, 可以是整型或字符型, 也可以是枚举类型。 在新的 ANSIC 标准中允许表达式的类型为任何类型。
(2)每个 case 后的常量表达式只能是由常量组成的表达式, 当 switch 后的表达式的值与某一个常量表达式的值一致时, 程序就转到此 case 后的语句开始执行。 如果没有一个常量表达式的值与 switch 后的值一致, 就执行 default 后的语句。
(3)各个 case 后的常量表达式的值必须互不相同。
(4)各个 case 的次序不影响执行结果, 一般情况下, 尽量将出现概率大的 case 放在前面。
(5)在执行完一个 case 后面的语句后, 程序会转到下一个 case 后的语句开始执行, 因而必须使用 break 语句才能跳出。