编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易

来源:互联网 发布:自媒体发展的数据 编辑:程序博客网 时间:2024/05/16 12:25

#include <stdio.h>
#define OUT 0//单词的外部
#define IN 1//单词的内部
#define MAXHIST 15//直方图的最大长度
#define MAXWORD 11//单词的最大长度
void main()
{
    int c,i,j,nc,state;
    int len;//直方图的长度
    int maxvalue;//相同字符单词的个数的最大值
    int ovflow;//超过最大长度单词的数目
    int wl[MAXWORD];//每个长度单词计数

    state = OUT;
    nc = 0;//单词字符长度的初始化
    ovflow = 0;//超过最大长度单词的数目的初始化
    for (i = 0 ; i < MAXWORD; ++i)//记录相同字符单词的个数wl[]和ovflow
       wl[i] = 0;
    while ((c = getchar()) != EOF)//输入ctrl+z结束输入
 {
        if(c == ' '|| c == '/n' || c == '/t')//word输入结束
  {
          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(i = MAXHIST; i >0; --i)
  {
    for(j=1;j<MAXWORD;++j)
    {
         if(wl[i] * MAXHIST / maxvalue>=i)
   printf("*");
   else
   printf(" ") ;
   putchar('/n');
    }
    for (i = 1; i < MAXWORD; ++i)
          printf("%4d",i);
          putchar('/n');
 for (i = 1; i < MAXWORD; ++i)
          printf("%4d",wl[i]);
          putchar('/n');
        if (ovflow > 0)
        printf("There are %d words >= %d/n",ovflow,MAXWORD);
  }

}

原创粉丝点击