如何创建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
相关产品推荐
相关产品推荐

