您的位置:首页 > 编程语言 > C语言/C++

IOS之C语言打印直方图

2015-06-04 20:26 148 查看


统计文本单词长度出现频率并打印直方图。

#include<stdio.h>
#define MAXHIST 15
#define MAXWORD 11  //统计最长单词的长度
#define IN      1   //状态标示
#define OUT     0
int 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=='\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]);
        printf("%d ",len);
        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);
}

下面是竖状直方图,文本输入一样,关键利用二层循环嵌套输出*

#include<stdio.h>
#define MAXHIT  15
#define MAXWORD 11
#define IN      1
#define OUT     0
int main(){
    int c,i,j,nc,state;
    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++;
                }
            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=MAXHIT;i>0;--i){
        for(j=1;j<MAXWORD;j++){
            if(wl[j]*MAXHIT/maxvalue>=i)
                printf("   *");
            else
                printf("    ");
        }
        putchar('\n');
        
    }
    for(i=1;i<MAXWORD;i++)
        printf("%4d",i);
        putchar('\n');
    for(i=1;i<MAXWORD;i++)
        printf("%4d",wl[i]);
        putchar('\n');
    if(ovflow>0)
        printf("There are %d words >=%d\n",ovflow
               ,MAXWORD);
    
    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: