首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C程序设计语言一书上的有关问题

2012-02-16 
C程序设计语言一书上的问题#include stdio.h#defineMAXHIST15/*maxlengthofhistogram*/#defineMAXWORD11

C程序设计语言一书上的问题
#include <stdio.h>
#define   MAXHIST   15   /*   max   length   of   histogram         */
#define   MAXWORD   11   /*   max   length   of   a   word               */
#define   IN             1     /*   inside   a   word                             */
#define   OUT           0     /*   outside   a   word                           */

/*   print   horizontal   histogram                                         */
main()
{
      int   c,i,nc,state;
      int   len;                 /*   length   of   each   bar                   */
      int   maxvalue;       /*   maximum   value   for   wl[]           */
      int   ovflow;           /*   number   of   overflow   words       */
      int   wl[MAXWORD];/*   word   length   counters               */

      state=OUT;
      nc=0;                       /*   number   of   chars   in   a   word     */
      ovflow=0;               /*   number   of   words   > =MAXWORD     */
      for(i=0;i <MAXWORD;++i)
              wl[i]=0;
      while((c=getchar())!=EOF)
      {
            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;                         /*   beginning   of   a   new   word   */
                }


              else
                    ++nc;                         /*   inside   a   word                       */
        }
        maxvalue=0;
        for(i=1;i <MAXWORD;++i)
                if(wl[i]> maxvalue)
                        maxvalue=wl[i];
        for(i=1;i <MAXWORD;++i)
        {
                printf( "%5d-%5d: ",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( "There   are   %d   words> =%d\n ",ovflow,MAXWORD);
              getchar();
}
其中,   if(wl[i]> 0)
                {
                      if((len=wl[i]*MAXHIST/maxvalue) <=0)
                              len=1;
                  }有必要吗?如果wl[i]> 0,len怎么会小于0?

[解决办法]
我认为,ASSERT是用于软件调试过程中的,目的是让你程序的BUG显现出来,谁能保证进入循环了哪个地方的BUG不会让你的变量突然发生变化呢?

热点排行