程序题目描述:

输入一段文字(以回车结束),统计其中每个字母出现的频率。

【输入格式】

一段文字(以回车结束)

【输出格式】

统计结果(包括次数和百分比,并显示条状图,参见输出样例)

【输入样例】

This is a pen. That is a pencil.

【输出样例】

A: 3 13.0% *************

C: 1 4.3% ****

E: 2 8.7% *********

H: 2 8.7% *********

I: 4 17.4% *****************

L: 1 4.3% ****

N: 2 8.7% *********

P: 2 8.7% *********

S: 3 13.0% *************

T: 3 13.0% *************


总体设计思想:依题意观察,百分比=单个字母数/总字母数,在百分比显示中先将数据四舍五入,再显示条状图,1%对应一个”*”.要求输出次序与字母字典顺序相同,不出现则不输出.鉴于每一项数据重复度高,不妨设置结构体来实现.

代码:

#includeint main(){//依题意观察,百分比=单个字母数/总字母数,在百分比显示中先将数据四舍五入,再显示条状图,1%对应一个"*".//要求输出次序与字母字典顺序相同,不出现则不输出.//鉴于每一项数据重复度高,不妨设置结构体来实现.struct alpha{char name;//字母名称int num;//字母计数double rate;//字母比例int star;//星星数}a[26];//26个字母单元inti;for(i=0;i='A'&&ch='a'&&ch<='z'){sum++;//总数++x=ch-'a';//小写字母序号a[x].num++;//字母出现频数}}for(i=0;iint(a[i].rate))y=int(a[i].rate+0.5);//四舍五入elsey=int(a[i].rate);//化整后的星星数给za[i].star=y;//星星数}//输出部分for(i=0;i0;j--)//补充输出星星printf("*");printf("\n");}}return 0;}

运行结果: