打印输入中单词长度的直方图

这是《C程序设计语言》中的一题,是书中1-13题:

#include <stdio.h>

#define MAXHIST 15  //直方图的最大长度
#define MAXWORD 12  //输入单词的最大长度
#define IN  1
#define OUT 0

int main()
{
    int c, i, nc, len, state;
    int wl[MAXWORD];  //按照单词的长度,统计单词中字母数为1~11的单词出现的次数
    int ovflow;
    int maxvalue;   //出现最多次的某长度单词出现的次数

    state = OUT;
    ovflow = 0;
    nc = 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];
                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)
        {
            if((len = wl[i] * MAXHIST / maxvalue) <= 0) //len为直方图中直方条的长度
                len = 1;
        }
        else
            len = 0;
        while(len > 0)
        {
            putchar('*');  //直方图用“*”来表示
            --len;
        }
        putchar('\n');
    }
    if(ovflow > 0)
        printf("There are %d words >= %d\n", ovflow, MAXWORD);
    return 0;
}


这里对于题目可能会出现误解,可能会理解成对于输入中的每个单词,用直方图表示其长度然后打印出来。实际上题目的意思是输入的单词中各个单词长度不一样,统计每种长度的单词数,然后用直方图表示出各长度单词数的多少。下面是运行结果:

其中程序语句len = wl[i] * MAXHIST / maxvalue 表示长度为i的单词数占maxvalue的比例,直方图最大长度为MAXHIST数量的"*”。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值