第7周 C语言程序设计(新2版) 练习1-13 打印输入单词长度的直方图(水平与垂直)

1、水平直方图

问题及代码:

/*打印输入单词长度的直方图*/
#include<stdio.h>
#define MAXHIST 15  //最大直方图
#define MAXWORD 11  //单词最大长度
#define IN 1   //单词内
#define OUT 0  //单词外

int main()
{
  int c,i,nc,state;  
  int len;   
  int maxvalue;      //数组wl[]的最大值
  int ovflow;        //溢出的单词数量
  int wl[MAXWORD];   // 单词长度的数组

  state=OUT;
  nc=0;              //单词的字符数
  ovflow=0;
  for(i=0;i<MAXWORD;i++)
     wl[i]=0;        //数组的所有元素赋初值为0
  while((c=getchar())!=EOF)
    {
      if(c==' '||c=='\t'||c=='\n')
        {
          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=1;i<MAXWORD;i++)
       {
         printf("5%d-5%d:",i,wl[i]);
         if(wl[i]>0)
           {
              if((len=wl[i]*MAXHIST/maxvalue)<=0)
                    len=1;
            }
          else
              len=0;
          while(len>0)
            {
               putchar('*');
                --len;
            }
               putchar('\n');
      }
          if(ovflow>0)
             printf("他们有%d个单词>=%d\n",ovflow,MAXWORD);
 }
运行结果:

学习心得:

知识总结:


2、垂直直方图

问题及代码:

/*打印输入单词长度的垂直直方图*/
#include<stdio.h>
#define MAXHIST 15  //最大直方图
#define MAXWORD 11  //单词最大长度
#define IN 1   //单词内
#define OUT 0  //单词外

int main()
{
  int c,i,j,nc,state;   
  int maxvalue;      //数组wl[]的最大值
  int ovflow;        //溢出的单词数量
  int wl[MAXWORD];   // 单词长度的数组

  state=OUT;
  nc=0;              //单词的字符数
  ovflow=0;
  for(i=0;i<MAXWORD;i++)
     wl[i]=0;        //数组的所有元素赋初值为0
  while((c=getchar())!=EOF)
    {
      if(c==' '||c=='\t'||c=='\n')
        {
          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[j]*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("他们有%d个单词>=%d\n",ovflow,MAXWORD);
 }
运行结果:

学习心得:

知识总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值