【问题标题】:array visualization in c with function带有函数的c中的数组可视化
【发布时间】:2022-01-17 04:07:00
【问题描述】:

有人知道我如何通过 c 中的函数来绘制像 {5, 0, 2, 6} 之类的数组吗?如下图所示?

我是 C 新手,所以我真的可以在这里寻求帮助 :)

这就是我现在所拥有的:

#include <stdio.h>

int Diagram(int i, int x, int y, int v[])
{
    printf("y+\n");

    for(i = 0; i <= y; i++){
        printf(" |\n");
    }
    printf(" ");
    for(i = 0; i <= x; i++){
        printf("+---");
    }
    printf("+x");

    return 0;
}

int main()
{
    int i;
    int y = 10;
    int x = 5;
    int v[4] = {5, 0, 2, 6};

    Diagram(i, 5, 10, v);

    return 0;
}

【问题讨论】:

  • 我的建议 - 不要马上打印。首先创建代表您的“显示”的二维数组。然后在内存中“绘制”它。绘制完成后,逐行刷新到屏幕上。
  • @TedLyngmo 我的错,我的意思是放 v[4]。
  • @Barmar 有一个“API”可以在显示器的任意点“绘制”而不用担心首先要绘制什么,通过抽象出来肯定会简化事情。这是一个一般性建议。
  • 为什么在调用Diagram() 时不使用xy 变量?
  • @TedLyngmo 我编辑了,谢谢。

标签: arrays c function visualization diagram


【解决方案1】:

正如@Eugene 在 cmets 中所说,解决此问题的最简单方法是创建一个临时数组,“绘制”到该数组中,然后将其打印到屏幕上。例如:

void Diagram(int w, int h, int v[]) {
    char a[h][w+1];

    // initialize with blank lines
    for(int y = 0; y < h; ++y) {
        memset(a[y], ' ', w);
        a[y][w] = 0;
    }

    // draw the bars
    for(int x = 0; x < w; ++x)
        for(int y = 0; y < v[x] && y < h; ++y)
            a[y][x] = '|';

    // print the array onto the screen (in reverse order)
    for(int y = h; y --> 0; )
        puts(a[y]);
}

int main() {
    int v[4] = {5, 0, 2, 6};
    Diagram(4, 10, v);
}

打印出来:

    
    
    
    
   |
|  |
|  |
|  |
| ||
| ||

我将把它留给你作为练习来绘制轴并增加条形之间的间距。您需要为此增加数组的大小(注意数学)。

【讨论】:

    【解决方案2】:

    我建议将参数稍微更改为Diagram

    #include <stdio.h>
    
    void Diagram(int graph_height, int v[], size_t cols) {
       // graph_height  the height you want the graph to be
       // v[]           the values
       // cols          number of columns in v
    }
    

    你会这样称呼它:

    int main() {
        int graph_height = 10;
    
        int v[] = {8, 5, 0, 2, 6};
    
        Diagram(graph_height, v, sizeof v / sizeof *v);
    }
    

    现在,在Diagram

    • 首先循环遍历v[] 中的所有值并找到最大值。这将在稍后用于缩放图表。
    • hgraph_height 循环到1(包括)。
      • col0循环到cols - 1(含)
        • graph_height * v[col] / max &gt;= h,则打印!,否则打印
        • 打印三个空格
      • 打印换行符
    • 最后打印+---+ 行。

    仔细看graph_height * v[col] / max &gt;= h

    • graph_height * v[col] / max 中,当v[col] == max 时,结果将为graph_height。较小的值将相应地缩放。如果一个值为max / 2,它将缩放为graph_height / 2。如果结果为&gt;= h,则应打印!,否则应打印

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多