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

来源:互联网 发布:eplan软件大小 编辑:程序博客网 时间:2024/05/17 07:05

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

#include <stdio.h>#define MAXHIST 15  //直方图的最大长度#define MAXWORD 12  //输入单词的最大长度#define IN  1#define OUT 0int 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数量的"*”。

0 0