您的位置:首页 > 编程语言 > C语言/C++

第7周 C语言程序设计(新2版) 练习1-14 打印输出各个字符出现频度的直方图(输出结果有问题)

2016-05-11 17:51 309 查看
问题及代码:

/*打印输入中各个字符出现频度的直方图*/
#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;
}
运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: