| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4343 人关注过本帖
标题:编写一个程序,打印输入中单词长度的直方图
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:20 回复次数:9 
编写一个程序,打印输入中单词长度的直方图
k&r里面的打印单词的长度直方图。尼玛在第一个while循环就是死循环,在网上一搜索全是这样的代码。难道是我的问题。。。

程序代码:
#include <stdio.h>

#define MAXHIST 15
#define MAXWORD 11
#define IN      1
#define OUT     0

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;
    while((c=getchar())!=EOF){
        if(c==' '||c=='\n'||c=='\t'){
            state=OUT;
            if(nc>0){
                if(nc<MAXWORD)
                    ++wl[nc];
                else
                    ++ovflow;
            }
            //printf("%d,%d\n",nc,wl[nc]);
        }
        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){
            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);
}
搜索更多相关主题的帖子: 直方图 单词 尼玛 网上 
2017-04-28 21:14
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:20 
直方图?这个简单,我写过垂直和水平,翻翻给你。


程序代码:
/*

 * 统计字母出现频率垂直直方图    *

 * 简易版本            *

 */

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int
main( void )
{
    int alphabet[ 26 ];
    int ch;
    int max;
    int count;
    int i, j;

    count = 0;
    memset( alphabet, 0, 26 * sizeof( int ) );

    while( EOF != ( ch = getchar() ) )
        if( isalpha( ch ) )
        {
            ++count;
            if( isupper( ch ) )
                ch = tolower( ch );
            ++alphabet[ ch - 'a' ];
        }
    for( i = 0; i < 26; ++i )
        alphabet[ i ] = ( float )alphabet[ i ] / ( float )count * 100; 

    for( i = 0, max = alphabet[ i ]; i < 26; ++i )
        max = max > alphabet[ i ]? max : alphabet[ i ];

    for( i = 0; i < 26; ++i )
    {
        putchar( 'a' + i );
        putchar( ' ' );
    }
    putchar( '\n' );

    for( i = 0; i < max; ++i )
    {
        for( j = 0; j < 26; ++j )
        {
            alphabet[ j ]-- > 0? putchar('_') : putchar( ' ');
            putchar(' ');
        }

        putchar( '\n' );
    }


    return 0;
}

程序代码:
/*

 * 编写一个程序,打印输入中各个字符出现频率的直方图    *

 */

#include <stdio.h>

int
main( void )
{
    int character[ 95 ];
    long count;
    int ch;

    count = 0;
    for( int i = 0; i < 95; i++ )
        character[ i ] &= 0;

    while( EOF != ( ch = getchar() ) )
    {
        ++count;
        ++character[ ch - ' '];
    }

    for( int i = 0; i < 95; i++ )
    {
        putchar( i + 32 );
        putchar( ':' );
        for( double c = (double)character[ i ] / (double)count * 100; 0 < c; --c )
            putchar( '|');
        putchar( '\n');
    }

    return 0;
}


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 21:15
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 renkejun1942
练习1-13到1-14的3个例子全是这样的死循环。我想搞明白谁的错。。。。。
2017-04-28 21:17
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 3楼 Emotiona
死循环?我看了下你贴的代码,你不懂怎么输入EOF,就直接说,别怪别人的代码。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 21:20
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 3楼 Emotiona
    while( EOF != ( ch = getchar() ) )
        if( isalpha( ch ) )
        {
            ++count;
            if( isupper( ch ) )
                ch = tolower( ch );
            ++alphabet[ ch - 'a' ];
        }

你这个也是死循环啊。怎么打印的 求教
2017-04-28 21:20
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
啊哈哈~~~怎么输入的!!!
2017-04-28 21:21
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
在标准输入中,用ctrl+z 可以模拟EOF

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 21:21
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 7楼 renkejun1942
试了下就是ctrl + z; 我把书上的例子改成‘#’结束。醉了~~~~真不要脸。
2017-04-28 21:27
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 8楼 Emotiona
多研究这本书吧。这本书将给以你最重要的东西——思路。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 21:34
qq2521782646
Rank: 2
等 级:论坛游民
帖 子:3
专家分:14
注 册:2017-4-19
收藏
得分:0 
无语了...
2017-04-28 21:44
快速回复:编写一个程序,打印输入中单词长度的直方图
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036240 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved