| 
 | 
 
 
发表于 2013-2-8 19:58:38
|
显示全部楼层
 
 
 
- #include<stdio.h>
 
 - #define MAXHIST 15
 
 - #define MAXWORD 11
 
 - #define IN 1
 
 - #define OUT 0
 
 - void main()
 
 - {        
 
 -         int c, i, nc, state;        
 
 -         int len;        
 
 -         int maxvalue;        
 
 -         int ovflow;        
 
 -         int wl[MAXWORD];                
 
 -         state = OUT;        
 
 -         nc = 0;        
 
 -         ovflow = 0;        
 
 -         for(i = 0; i < MAXWORD; ++i)                
 
 -         {                
 
 -                 wl[i] = 0;                
 
 -         }        
 
 -         //输入遇到字母k的时候退出
 
 -         //依次扫描每个输入字符开始的时候置state为IN,
 
 -         //扫描到单词结尾的时候置state为OUT,此时nc为刚扫描完单词的长度
 
 -         while((c = getchar()) != 'k')                
 
 -         {
 
 -                 //出现以下三个字母的时候说明遇到新的单词了
 
 -                 if(c == ' ' || c == '\n' || c == '\t')                        
 
 -                 {
 
 -                         //改变state状态兵根据nc保存必要的结果
 
 -                         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("%5d - %5d :", i, wl[i]);                
 
 -                 if(wl[i] > 0)                        
 
 -                 {                        
 
 -                         //这里利用了一个简单的数学公式,最长行len总是MAXHIST
 
 -                         //原因是最长行的wl[i]==maxvalue
 
 -                         //这样按比例缩放出来的直方图好看些
 
 -                         if((len = wl[i] * MAXHIST / maxvalue) <=0)   //这条代码什么意思                                
 
 -                                 len = 1;                        
 
 -                 }                
 
 -                 else                        
 
 -                 {                        
 
 -                         len = 0;                        
 
 -                 }                
 
 -                 //假设前面if((len=...)<=0)中计算的len=10那么执行到这里,len的值还是10
 
 -                 while(len > 0)    //这里的len不是都只可以打印0或1吗                        
 
 -                 {                        
 
 -                         putchar('*');                        
 
 -                         --len;                        
 
 -                 }                
 
 -                 putchar('\n');        
 
 -         }        
 
 -         if(ovflow > 0)                
 
 -                 printf("There are %d words >= %d\n", ovflow , MAXWORD);        
 
 - }
 
  复制代码 |   
 
 
 
 |