问题及代码:
/*打印输入中各个字符出现频度的直方图*/
#include<stdio.h>
#include<ctype.h>
#define MAXHIST 15 //最大直方图长度
#define MAXCHAR 128 //最大的不同字符
#define IN 1 //单词内
#define OUT 0 //单词外
int main()
{
int c,i;
int len;
int maxvalue; //数组wl[]的最大值
int cc[MAXCHAR]; // 字符数组
for(i=0;i<MAXCHAR;i++)
cc[i]=0; //数组的所有元素赋初值为0
while((c=getchar())!=EOF)
if(c<MAXCHAR)
cc[c]++;
maxvalue=0;
for(i=1;i<MAXCHAR;i++)
{
if(isprint(i)) //调用这个函数,是何功能 ?
printf("%5-%c%-5d:",i,i,cc[i]);
else
printf("%5- -5d:",i,cc[i]);
if(cc[i>0])
{
if((len=cc[i]*MAXHIST/maxvalue)<=0)
len=1;
}
else
len=0;
while(len>0)
{
putchar('*');
--len;
}
putchar('\n');
}
}
运行结果:
学习心得:
知识总结:
参考源代码(更直观):
# include <stdio.h>
int main(void){
int a[26];
int c;
int i;
int j;
for(i = 0; i <26; i++){
a[i] = 0;
}
while((c =getchar()) != EOF){
for(i = 'a'; i <= 'z'; i++){
if(c == i){
a[i - 97]++;
}
}
}
for(i = 0; i < 26; i++){
if(a[i] != 0){
printf("%c ", i + 97);
for(j = 0; j < a[i]; j++){
putchar('*');
}
putchar('\n');
}
}
return 0;
}
运行结果: