You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建PrintGraph无返回值函数实现指定尺寸笛卡尔图打印?

实现PrintGraph函数的思路与代码示例

嘿,这个问题挺有意思的!我来一步步拆解怎么实现这个能适配任意尺寸(≤7)的笛卡尔图打印函数~

首先得明确咱们要画的标准笛卡尔图的定义:输入的size参数代表坐标轴的最大绝对值(比如传3的话,x、y的取值范围是-3到3),整个图是一个(2*size+1)×(2*size+1)的网格,原点在中心,x轴水平向右,y轴垂直向上。

核心实现步骤

1. 确定遍历顺序

笛卡尔图的y轴数值是从上到下递减的(最上面是y=size,最下面是y=-size),所以咱们要从最高的y值开始,循环到最低的y值,逐行生成内容。

2. 逐列判断字符类型

对于每一行的每个x值(从x=-size到x=size),咱们要判断当前位置属于图里的哪个元素:

  • 如果是原点(0,0):打印+
  • 如果是y轴(x=0,非原点):打印|
  • 如果是x轴(y=0,非原点):打印-
  • 其他空白位置:打印空格(或者.,看你想要的视觉效果)

3. 处理负数坐标的映射

因为循环变量没法用负数,所以咱们可以把负数坐标转换成循环的索引:比如x=-size对应索引0,x=size对应索引2*size,转换公式就是索引 = 坐标 + size。

C语言代码示例

#include <stdio.h>

void PrintGraph(int size) {
    // 从最高y值遍历到最低y值
    for (int y = size; y >= -size; y--) {
        // 遍历当前行的所有x值
        for (int x = -size; x <= size; x++) {
            if (x == 0 && y == 0) {
                printf("+"); // 原点
            } else if (x == 0) {
                printf("|"); // y轴
            } else if (y == 0) {
                printf("-"); // x轴
            } else {
                printf(" "); // 空白区域
            }
        }
        printf("\n"); // 每行结束换行
    }
}

// 测试用例
int main() {
    PrintGraph(3); // 打印尺寸为3的笛卡尔图
    return 0;
}

测试效果(size=3)

运行上面的代码,会输出:

|   
   |   
   |   
---+---
   |   
   |   
   |   

如果想让空白区域更明显,可以把printf(" ")改成printf("."),输出会变成:

...|...
...|...
...|...
---+---
...|...
...|...
...|...

额外优化:添加坐标轴刻度

要是想让图更贴近真实的笛卡尔坐标系,可以给坐标轴加上刻度数字。修改后的代码如下:

#include <stdio.h>

void PrintGraph(int size) {
    for (int y = size; y >= -size; y--) {
        // 打印y轴刻度
        if (y == size || y == -size) {
            printf("%2d", y); // 上下端点标注数值
        } else {
            printf("  "); // 其他行留空
        }

        for (int x = -size; x <= size; x++) {
            if (x == 0 && y == 0) {
                printf("+");
            } else if (x == 0) {
                printf("|");
            } else if (y == 0) {
                printf("-");
            } else {
                printf(" ");
            }
        }

        // 打印x轴刻度
        if (y == 0) {
            printf(" %2d", size);
        } else if (y == size) {
            printf(" %2d", -size);
        }
        printf("\n");
    }
}

size=3的输出会变成:

3   |       
    |       
    |       
 0---+---    3
    |       
    |       
-3   |       -3

这个方案完全适配size≤7的场景,哪怕size=1也能正常输出:

| 
-+-
 | 

内容的提问来源于stack exchange,提问作者JACKERHAIDAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:54:00