练习1-14 编写一个程序,打印输入中各个字符出现频度的直方图。
#include <stdio.h>
#include <string.h>
#define IN 1 /* 在单词内 */
#define OUT 0 /* 在单词外 */
#define MAX_LEN 11
#define dimof(array) (int)(sizeof(array)/sizeof(array[0]))
void print_horizontal(int *data, int size)
{
printf("---------水平-----------\n");
for (int i = 0; i < size; i++) {
printf("%02d ", i);
for (int j = 0; j < data[i]; j++){
putchar('*');
}
putchar('\n');
}
}
void print_vertical(int *data, int size)
{
int len_max = 0;
for (int i = 0; i < size; i++){
if (data[i] > len_max) {
len_max = data[i];
}
}
printf("---------垂直-----------\n");
for (int i = len_max; i > 0; i--) {
for (int j = 0; j < size; j++) {
if (data[j] >= i) {
printf(" %s ", "*");
}
else {
printf(" %s ", " ");
}
}
putchar('\n');
}
for (int i = 0; i < size; i++) {
printf("%02d ", i);
}
}
int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
int c;
int ndigit[MAX_LEN];
memset(ndigit, 0x00, sizeof(ndigit));
while((c = getchar()) != EOF) {
if ('0' <= c && c <= '9') {
ndigit[c - '0']++;
}
else {
ndigit[MAX_LEN - 1]++;
}
}
/*打印水平直方图*/
print_horizontal(ndigit, dimof(ndigit));
/*打印垂直直方图*/
print_vertical(ndigit, dimof(ndigit));
return 0;
}
运行结果: