手抄代码1-13

1-13

打印统计结果的图形,c++

#include<stdio.h>
#define MAXHIST 15//nc 转 len 常量
#define MAXWORD 11//有效单词长度
#define IN 1//单词内
#define OUT 0//单词外
main()
{
    int c, i, nc, state;//字符,for,单词当前长,单词内外,
    int len;//处理过的nc,
    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 && nc < MAXWORD)//单词长度属于这个范围则统计
                wl[nc]++;
            else
                ovflow++;//超出范围统计
            nc = 0;//输入词长清理
        }
        else if(state == OUT)//输入是非空字符时,且以前在单词外
        {
             state = IN;//更改成单词内,
             nc = 1;//基数单词字符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("超出范围的单词数%d 不能够大于%d\n", ovflow, MAXWORD);
}

输入多个单词, 每种长度输出一行,即长度, 个数, 个数的直方图。数组

1-4

统计输入每一个字符出现的频率ascii码的字符个数是128个,能够用arr[0 - 127],累加code

#include<stdio.h>
#include <ctype.h>//isprint 判断是否为字符
#define MAXHIST 15//nc 转 len 常量
#define MAXCHAR 128//有效字符集
main()
{
    int c, i;//输入字符,for
    int len;//处理过的个数,
    int maxvalue;//输入的最长单词
    int cc[MAXCHAR];//每种字符的个数,
    for(i=0; i<MAXCHAR; i++)
    cc[i] = 0;//初始化字符个数
    while((c=getchar()) != EOF) //输入字符
        if(c < MAXCHAR)//属于字符集
            cc[c]++;//累加
    maxvalue = 0;
    for(i=1; i<MAXCHAR; i++)
        if(cc[i]>maxvalue)//最大的字符,
            maxvalue = cc[i];
    for(i=1;i<MAXCHAR; i++)//0‘\0’是没法输入的
    {
        if(isprint(i))//是否字符
            printf("%-5d - %c - %5d :", i, i, cc[i]);//第几个,字符,字符频率
        else
            printf("%-5d - %5d:", i, cc[i]);//非字符
        if(cc[i]>0)
        {
             if((len=cc[i]*MAXHIST/maxvalue) <= 0)//处理字符输入的次数,
                 len = 1;
        }
        else
            len = 0;
        while(len>0)
        {
             putchar('*');//次数直方图,
             len--;
        }
        putchar('\n');
    }
}

巧用数组,a[32]++, 这样就统计数空格的个数了,ci

相关文章
相关标签/搜索