CC++ & Algorithm

用循环嵌套在控制台“画画”:从矩形到字母塔的奇妙之旅

你有没有想过,在屏幕上一个字符一个字符地“画”出图形,其实就像是用积木搭一座塔?每一行放几块积木,放什么颜色,全凭你的指令。而循环嵌套,就是那个帮你自动搭塔的机器人——外层循环告诉你“搭多少层”,内层循环决定“每层放几块砖”。

第一类图形:规整的矩形

先从最简单的正方形开始。如果我想画一个 4×4 的星号正方形,直觉的反应是写四行 print('****')——但这样写死了,如果改成 10×10 呢?你需要循环帮忙。

for i in range(4):
    for j in range(4):
        print('*', end='')
    print()

外层循环跑了 4 次,每次代表一行;内层循环也跑 4 次,每次打印一个星号。end='' 把默认换行去掉,等内层循环结束后再手动换行。这就是嵌套循环最经典的模式:外层管行,内层管列。

如果你见过这道题:“使用循环嵌套打印一个4行4列的正方形(每个星号之间有一个空格)”,你马上就能反应过来——只需要在 print('*', end=' ') 里加个空格就行。没错,内层控制的细节决定了最终图形的样子。

第二类图形:三角形与动态边界

正方形每行都一样,但三角形就有意思了:第 1 行 1 个星,第 2 行 2 个……第 N 行 N 个。这意味着内层循环的边界不再固定,而是依赖于外层循环的变量。

rows = 5
for i in range(1, rows + 1):
    for j in range(i):
        print('*', end='')
    print()

range(i) 意味着内层循环的次数每次递增 1。这就像设计师告诉你:“第 i 层给我放 i 块砖。” 外层循环的 i 不仅控制行数,还充当了内层的参数。这就是嵌套循环中最灵活的部分:内层条件可以依赖外层变量

很多入门题目都在考察这个关键点。比如一道“字符图形10-字母三角”:输入一个整数,打印对应的字母图形。字母怎么处理?很简单,用 chr(ord('A') + j) 就能按顺序输出字母。外层循环 i 从 1 到 N,内层循环 j 从 0 到 i-1,每次输出对应的字母。你看,换成字母之后,循环结构一点没变,只是打印内容从星号变成了字母。

还有一道“打印字母塔”:输入行数 N,输出 N 行,每一行字母按某种规律排列。核心思路依然是外层控制行,内层控制该行的字母个数(或排列方式)。比如第一行一个 A,第二行两个 B……但注意字母不一定从 A 开始递增,也可能是从 A 开始每行多个相同字母。调整 chr(ord('A') + i - 1) 就能实现。嵌套循环的边界条件一变,图形就千变万化。

图形设计的核心:理解“谁控制谁”

想画出奇形怪状的图案,你只需要搞清楚三件事:

  1. 行数由谁定? —— 外层循环的范围。
  2. 每行几个符号? —— 内层循环的范围(可能是固定值,也可能是外层变量的函数)。
  3. 每个符号是什么? —— 打印的内容,可以是星号、字母、数字,甚至是空格(用来制造缩进,从而画出菱形、等腰三角形)。

比如要画一个倒三角形,内层循环次数从 N 递减到 1,只需把 range(i) 改成 range(N - i + 1) 或其他递减写法。你甚至可以用两个内层循环:一个打印空格,一个打印星号,这样就得到了居中的等腰三角形。

从模仿到创造

嵌套循环是编程里最基础的“控制结构套娃”,但它能玩出的花样远超你的想象。当你熟练掌握了“外层定行、内层定列”的心法后,可以尝试:

  • 打印菱形:先打印上半部分(递增),再打印下半部分(递减)。
  • 打印空心图形:内层循环里加一个条件判断,只在边界位置打印符号。
  • 打印数字矩阵:根据行号和列号计算要输出的数字。

这些练习会逼你不断调整内层循环的边界和条件,而每一次调整都让你对循环的理解更深一层。

关于图形打印的题目,互联网上成千上万,但万变不离其宗:找到行与列之间的数学关系,然后用嵌套循环去实现它。当你能闭着眼睛写出任意图形的循环代码时,你对变量、循环、条件判断的驾驭能力就已经上了一个台阶。


关于作者

我是赵老师,持有 NOI 信息学奥赛教练证书,拥有 15 年以上的软件开发经验,从事信息学少儿编程教学已有 8 年时间。

这些年累计帮助 多名 学生通过编程特长升入自己心仪的目标学校。

如果你在编程学习上有任何疑问,欢迎联系我:18620372957(微信同号)

这篇文章对你有帮助吗?

成为第一个评价的人

想系统学习这个知识点?查看完整知识点 →