我做了所有的K&R练习,终于可以打印出一个水平直方图。看起来也很糟糕,但我让你来判断。我还不能打印一个直方图的文字长度在其输入垂直。
如何修改程序来执行此操作?
问题:编写一个程序打印长度直方图
在它的输入中。用条形图很容易画出直方图
水平方向;垂直方向更具挑战性。
直方图.c

#include <stdio.h>
#define MAX 10
#define IN 1
#define OUT 0

int main()
{
    int c, len, state;
    int nlength[MAX];
    c = len = 0;
    state = 1;

    for(int i = 0; i < 10; ++i)
        nlength[i] = 0;

    while ((c = getchar()) != EOF) {
        ++len;
        if (c == ' ' || c == '\n' || c == '\t') {
            --len;
            state = OUT;
        }
            if(state == OUT) {
                if(len != 0 && len <= MAX)
                    ++nlength[len];

            len = 0;
            state = IN;
        }
    }
    for (int i = 0; i <= MAX; ++i) {
        printf("%d ", i);
        for (int a = 0; a < nlength[i]; ++a)
            printf("*");

        printf("\n");
        }
    return 0;
}



OUTPUT:
./histogram < histogram.c
0
1 *************************************
2 *************************
3 **************
4 ************
5 *****
6 ******
7 ****
8 **
9 *
10 ***

最佳答案

首先,你需要知道直方图的高度,这是最大值。然后打印每一行,并决定根据值放置*

int h_max = 0;
for (int a = 0; a < MAX; a++) {
  if (h_max <= nlength[a]) h_max = nlength[a];
}

for (int i = h_max; i >= 0; i--) {
    for (int a = 0; a < MAX; ++a) {
      if (nlength[a] > i) {
        printf("*");
      } else {
        printf(" ");
      }
    }
    printf("\n");
}

另一种解决方案是水平打印到数组中,并按所需方向打印数组。

10-06 02:25