学习《C 程序设计语言》时,练习1-13需要我们绘制单词统计的直方图,作为C语言学习的初学者,看到绘制直方图的时候,脑子里是没有概念的,在参考了一些人的程序后,编写了以下代码:
#include<stdio.h>
#define OUT 0
#define IN 1
#define NUM 200 //可输入的单词的最大数
void main()
{
int i,j,k,c,nw,nl,state; //nw代表单词的个数,nl代表单词的长度,state检测单词的状态
i=nl=nw=j=k=0;
state=OUT;
int m[NUM]={0};
int maxvalue=0; //绘制直方图的时候的纵轴对比
printf("请输入字符串\n");
while((c=getchar())!=EOF)
{
m[i]++;
if(c=='\n'||c==' '||c=='\t')
{
m[i]--;
i++;
state=OUT;
}
else if(state==OUT)
{
state=IN;
nw++;
}
}
printf("一共有%d个单词\n",nw);
for(i=0;i<nw;i++)
printf("第%d个单词的长度为%d\n",i+1,m[i]);
maxvalue=m[0];
for(i=0;i<nw;i++)
{
if(m[i]>maxvalue)
maxvalue=m[i];
}
printf("单词的最大长度为%d\n",maxvalue);
printf(" y↑\n");
for(i=maxvalue+1;i>=0;i--)
{
printf("%8d|_ ",i);
for(j=0;j<nw;j++)
{
if(i==m[j]+1)
printf(" %d ",m[j]);
else if(i==m[j])
printf(" ___ "); //打印顶部
else if(i<m[j])
{
printf("| | ");
}
else
printf(" ");
}
printf("\n");
}
printf(" ");
for(i=0;i<nw;i++)
{
printf(" 单词%d ",i+1);
}
}
运行结果如下: