手抄代碼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

相關文章
相關標籤/搜索