求问一道C语言题

统计一段英文单词或句子中的各元音字母(a,e,i,o,u)出现的次数,根据它们出现的次数和总字母数,算出元音字母出现的比率。
计算元音字母和总字母数时,不区分大小写字母。非英文字母不计算在总字母数之中。

Input
输入为多行,至EOF结束。每行最多不超过100,000个字符(喔!你不用担心开不出数组来,100,000个字节而已)。
每行是一个测试样例,每个样例可能是一个英文单词,也可能是一个英文句子,也可能是多个英文句子,也有可能什么都不是。
但不管怎样,一个测试样例只有一行,且不会是空行,也不会存在一个字母都没有的测试样例。
幸运的是,最少会有一个测试样例,也不会以空行结束。

Output
输出格式如下:
每个测试样例,先输出一个“case i :”,i为样例编号。然后按照如下格式输出:
A : x.yyyy%
E : x.yyyy%
I : x.yyyy%
O : x.yyyy%
U : x.yyyy%
其中,每个元音字母比率保留4位小数,右对齐输出。冒号前后各有一个空格。
两个测试样例的输出之间空一行。

Sample Input
abcde
a e i o u
Shandong University of Science & Technolgy
Statistics vowel ratio
The number of occurrences of each of the vowels (a, e, i, o, u) in the Statistical some English words or sentences, according to their number of occurrences and the total number of letters, the calculated ratio of the vowels. Does not distinguish between uppercase and lowercase letters when calculating the vowels and the total number of letters. Non-English letters are not being counted in the total number of letters.
The input is a multi-line, to EOF the end. Each line does not exceed a maximum of 100,000 characters (Oh you do not have to worry about, to open no array, 100,000 ten thousand bytes).Each row is a test case, each sample may be a word of English, it may be an English sentence, it may be more than one English sentence, there may be nothing. In any case, a test sample is only one line, and will not be empty row, a letter sample test will not exist. Fortunately, at least there will be a test sample.
Gets (line input) processing will be very convenient. Getchar () in alphabetical input, processing carriage return is likely in the format will be a little problem, do not blame I did not remind you oh!
Above three sections translate.google.cn translation.
Sample Output
case 1 :
A : 20.0000%
E : 20.0000%
I : 0.0000%
O : 0.0000%
U : 0.0000%

case 2 :
A : 20.0000%
E : 20.0000%
I : 20.0000%
O : 20.0000%
U : 20.0000%

case 3 :
A : 2.7778%
E : 11.1111%
I : 8.3333%
O : 8.3333%
U : 2.7778%

case 4 :
A : 10.0000%
E : 5.0000%
I : 15.0000%
O : 10.0000%
U : 0.0000%

case 5 :
A : 5.5882%
E : 15.5882%
I : 4.4118%
O : 8.5294%
U : 3.8235%

case 6 :
A : 9.4595%
E : 15.4054%
I : 5.4054%
O : 7.5676%
U : 1.8919%

case 7 :
A : 5.6250%
E : 11.8750%
I : 11.2500%
O : 6.2500%
U : 2.5000%

case 8 :
A : 10.8696%
E : 13.0435%
I : 4.3478%
O : 10.8696%
U : 0.0000%
HINT
printf()的格式串里用%%可以输出%。

#include<stdio.h>

void main()

{ int i,s,r[5],n,k;

    char buffer[100001],*p;

    float f[5];

    n=0;

    while ( gets(buffer) )

    {    n++; p=buffer;

        for ( i=0;i<5;i++ ) r[i]=0;

        s=0;

        while ( *p )

        { if ( ((*p)>='a' && (*p)<='z') || ((*p)>='A' && (*p)<='Z') )

            { s++;

            switch ( *p )

                { case 'a':

                    case 'A': r[0]++; break;

                    case 'e':

                    case 'E': r[1]++; break;

                    case 'i':

                    case 'I': r[2]++; break;

                    case 'o':

                    case 'O': r[3]++; break;

                    case 'u':

                    case 'U': r[4]++; break;

                }

            }

            p++;

        }

        for ( i=0;i<5;i++ ) { f[i]=r[i]; f[i]/=s; }

        printf("case %d :\n",n);

        i=0; printf("A : %.4f%%\n",f[i]*100);

        i++; printf("E : %.4f%%\n",f[i]*100);

        i++; printf("I : %.4f%%\n",f[i]*100);

        i++; printf("O : %.4f%%\n",f[i]*100);

        i++; printf("U : %.4f%%\n",f[i]*100);

        printf("\n");

    }

    system("pause");

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-26
int i=0,cnta=0,cnte=0,cnti=0,cnto=0,cntu=0,cntother=0;
char s[1000000]="abcdefghijklmn";
while(s[i]!=NULL)
{
switch(s[i++])
case 'a':cnta++;break;
case 'e':cnte++;break;
case 'i':cnti++;break;
case 'o':cnto++;break;
case 'u':cntu++;break;
default:cntother++;break;
}

会写了吗?追问

不太对啊

c语言题目求解
1 开始p=1,1%3为真,执行p++后p=2,执行++p后p=3,然后输出3。接着执行for循环中的p++,结果是p=4。因p=4,p<=10为真,继续循环。2 p=4,4%3为真,执行p++后p=5,执行++p后p=6,然后输出6。接着执行for循环中的p++,结果是p=7。因p=7,p<=10为真,继续循环。3 p=7,7...

C语言问题 求助各位,这道题的答案是10,为什么?是不是答案给错了啊_百度...
结果的确等于10 原因是: k=10*MIN(i,j)被替换成了 k= 10* (i)>(j)?(i):(j);10*(i)的值始终大于j的值,因此返回了i的值,也就是10。

问一道计算机等级考试(C语言)问题,求详解
答案是c正确 A是错误的,因为虽然是“abcde”5,但是还有字符串结束标识‘\\0’,所以是6个,正确应该是char s[6] = "abcde";B 错误的,因为定义了一个指针变量s的话,这个指针s指向的内存不明确,也就是野指针,操作野指针很危险,所以错误 C,正确,标识定义了一个指针s,s指向了字符串“abcd...

C语言入门题目,求详细易懂的解答过程。
答案为第一行:Tony。解答:for循环共循环2次,然后strcpy(a,b)比较两串字符大小,如果strcpy值大于0,则a大于b。具体的比较是看字符串的字母的ASCII码的大小,如果相同,再继续比较第二个,这个不赘述。主要看一下name[],对于一维数组来讲,它是元素,对于二维数组来讲,它不是具体的元素,而是代...

一道C语言问题求解答
这道题考的是动态规划的思想。代码思路如下:假设我们要铺长度为10,那么怎么铺呢?有两种铺法。长度为9,再加一块长度为1的。长度为8,再加一块长度为2的。由此我们可以得知铺n的情况等于铺n-1的情况+铺n-2的情况。公式 :f(n)=f(n-1)+f(n-2)。

求问个c语言问题,请问这题应该用怎样的算法
用递归算法。分析如下:第一天:1 第二天:1 第三天:2 = 1+1 第四天:4 = 2+2 第五天:7 = 4+3 第六天:11 = 7+4 第七天:16 = 11+5 ...从第三天起,数量是前一天的数量再加上(天数-2)由此可写出递归算法如下:int getNumber(int day) \/\/day代表第几天 { if (day < ...

C语言题目,求大神解答
p=aa;\/\/p指向数组aa首地址,即a的位置 当i=0时,会执行 if ( i==0 ) aa[i][i+1]=**(p++); \/\/这时p=p+1,p指向了aa数组的第二行首地址,即d所在位置,所以,printf("%c\\n", **p ); 输出d 答案为C

求大神C语言编程,题目要求在下面
下面是我的代码,三个函数分别对应三个问题。include<stdio.h> define MLEN 20\/\/字符串最大长度 char fun1();void fun2();void fun3();int main(void){ fun1();fun2();fun3();return 0;} char fun1(){ int nI;float nF;char c;char str[MLEN];printf("请分别输入1个整数,1个...

c语言问题 若int x=6;则x+=x-=x*x表达式最后x的值是( )。 要详细的解 ...
求给分 追问 哦,明白了,我忘了把值赋给x了,太感谢了,一语惊醒梦中人啊! 本回答由提问者推荐 举报| 答案纠错 | 评论(1) 37 2 graveljun 采纳率:34% 擅长: 电脑\/网络 游戏 C\/C++ 互联网 为您推荐: c语言入门自学 c语言‖ c语言\/= c语言fun函数 c语言中%= c语言x%2 c语言“|”输出...

c语言问题
您好,c语言经典100题:【程序1】题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列.2.程序源代码:main(){ int i,j,k;printf("\\n");for(i1;i<5;i++) \/*...

相似回答