#include
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
main()
{
int c,i,nc,state,j;
int len;
int maxvalue;
int ovflow;
int wl[MAXWORD];
state=OUT;
nc=0; //每个单词中的字母个数
ovflow=0; //单词数大于最大能包括的数目 即(maxword)
for(i=0;i<MAXWORD;++i)
wl[i]=0;
while((c=getchar())!='0')
{
if(c==' '||c=='\n'||c=='\t')
{
state=OUT;
if(nc>0)
if(nc<MAXWORD)
++wl[nc];
else
++ovflow;
nc=0;
}
else if(state==OUT){
state=IN;
nc=1;
}
else
++nc;
}
maxvalue=0;
for(i=1;i<MAXWORD;++i)
if(wl[i]>maxvalue)
maxvalue=wl[i];
for(j=MAXHIST;j>0;j--)
{
for(i=1;i<MAXWORD;i++)
{if((len=wl[i]*MAXHIST/maxvalue)>=j)
putchar('*');
else
putchar(' ');
}
putchar('\n');
}
for(i=1;i<MAXWORD;i++)
printf("%d",wl[i]);
putchar('\n');
for(i=1;i<MAXWORD;i++)
printf("%d",i);
if(ovflow>0){
printf("There are %d words >= %d\n",ovflow,MAXWORD);
}
}
这个是垂直输出直方图的,我的想法是先一行行输出*,然后倒数第二行输出该长度单词的数量,最后一行输出各个长度的单词。为什么在输出倒数第二行的数字后面有时候会多一个0啊,特别是单词输入数量多的时候