1-14:打印各个字符出现频率的(垂直方向)直方图

C程序设计语言(第2版·新版)-The_C_Programming_Language
练习1-14 编写一个程序,打印输入中各个字符出现频率的直方图。

#include <stdio.h>

main()
{
    int i, j;
    int ch;
    int last_char;
    int askii[95];//askii[95]存储字符出现次数最大值

	printf(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n");
    printf(":Enter \" :q\" to confirm end of input;\n");
    printf("`````````````````````````````````````\n");
    for (i = 0; i <= 95; i++)
        askii[i] = 0;
    /*储存符号出现的次数与最大次数*/
    while ((ch = getchar()) != EOF && !(ch == 'q' && last_char == ':')){//:q退出循环
        if (ch >= ' ' && ch <= '~'){//统计字符数量
            ++askii[ch - 32];
            if (askii[ch - 32] > askii[95])//求字符出现次数最大值
                askii[95] = askii[ch - 32];
            last_char = ch;//记上一个字符为 :
        }
        else
            continue;
    }
    askii[':' - 32] -= 1;//去除符号 : 多加的次数
    /*绘制直方图*/
    printf("\n%*cxx直方图\n", 95/2-5, ' ');
    printf("%*cA\n", 6, ' ');//6
    printf("%*c|\n", 6, ' ');
    for (j = askii[95]; j > 0; j--){
        printf("%5d |", j);
        for (i = 0; i < 95; i++){
            if (askii[i] == j){
                printf("#");
                --askii[i];
            }
            else
                printf(" ");
        }
        printf("\n");
    }
    printf("%*c+", 6, ' ');
    for (i = 0; i < 96; i++)
        printf("-");
    printf(">\n%5d |", 0);
    for (i = 0; i < 95; i++)
        printf("%c", i+32);
}

(输入 :q 退出输入并打印计算结果)
运行后的结果:
withyzu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值