垂直直方图

本文介绍了一个使用C语言编写的程序,该程序能够读取输入文本并统计其中单词的最大长度,然后以直方图的形式展示每个长度的单词出现的频次。此外,程序还记录了超出预设长度(10个字符)的单词数量。
#include<stdio.h>

#define MAXHIST 15
#define MAXWORD 11    //一个单词最大的长度
#define IN      1
#define OUT     0

main()
{
    int c, i, j, 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;  //长度超过10的单词的个数
            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 = MAXHIST; i > 0; --i){  //注意这里的水平直方图转化为垂直直方图  两个for循环嵌套
        for(j = 1; j < MAXWORD; ++j){   
            if((wl[j] * MAXHIST / maxvalue) >= i)
                              printf("  *  ");

            else
                printf("     ");
        }     
        putchar('\n');
           
    }
    for(i = 1; i < MAXWORD; ++i) //调节空格可以改变下面数字与上面*之间的对应
        printf("%3d  ",i);
    putchar('\n');
    for(i = 1; i < MAXWORD; ++i)
        printf("%3d  ",wl[i]);
    putchar('\n');
    if(ovflow > 0)
        printf("there are %d words >= %d\n",ovflow,MAXWORD);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值