回 帖 发 新 帖 刷新版面

主题:这段代码看不懂,高手指教啊,主要是蓝色那段不懂

#include<stdio.h>
#define MAXHIST 15       //max length of histogram
#define MAXWORD 11       //一个单词的最大长度
#define IN 1             //当前字符处于单词中
#define OUT 0            //当前字符不在单词中
void main()
{
    int c,i,j,nc,state;
    int maxvalue;          //数组w1中的最大值
    int over;         //长度大于或等于maxword的单词个数
    int wl[MAXWORD];     //单词长度计数器
    state=OUT;
    nc=0;            //单词中字符的数目
    over=0;      
    for(i=0;i<MAXWORD;++i)
        wl[i]=0;
    while ((c=getchar())!=EOF)
    {
        if(c==' '||c=='\t'||c=='\n')
        {
            state=OUT;
            if(nc>0)
              if(nc<MAXWORD)
                  ++wl[nc];      //长度为nc的单词数目加1
              else
                  ++over;        //长度超出范围的单词数目加1
            nc=0;                //刷新nc的值,使下个单词的初始长度为0
        }
        else if(state==OUT)
        {
            state=IN; 
            nc=1;              //新单词开始了,并使其初始长度为1
        } 
        else  ++nc;
    }
    [color=000080]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');[/color]    if(over>0)
        printf("有%d个单词长度超过给定范围\n\n",over);
}

回复列表 (共4个回复)

沙发

第一个循环是找到出现词长频率的最大值,第二个循环是打印长度统计柱状图
第三个循环是打印出每个长度的单词各出现了多少次……

板凳

恩,谢谢,可还是有点不懂,就是第二个循环。 MAXHIST是指什么?

(wl[j]*MAXHIST/maxvalue)>=i  又是什么意思?[em2]

3 楼

自己代码里的注释自己不去看么?
MAXHIST是柱状图的最大长度。那一行的判断的意思是计算该行wl的百分比,如果高于i/MAXHIST就打印一个星号。柱状图,横向设计的还是比较有趣的,一开始我也有点晕,直到把MAXHIST两边除了一下才想通

4 楼


呵呵呵呵。。。懂了,,,谢谢。。。[em1]

我来回复

您尚未登录,请登录后再回复。点此登录或注册