# 第5课:嵌套循环与图形打印 ## 教学目标 - 理解嵌套循环的执行流程(外层管行、内层管列) - 能分析图形规律,写出对应的行列公式 - 掌握矩形、直角三角形、等腰三角形、菱形的打印方法 - 掌握多层循环以及分支与循环相互嵌套 ## 核心考点:嵌套循环中的行列关系 ### 考什么 根据图形推导每一行的________数和________数,再使用嵌套循环输出。 ### 必须理解 ________循环负责行数,________循环负责当前行中的字符数量。等腰三角形第 i 行有________个前导空格、________个星号。 ### 核心写法 ```cpp for (int i = 1; i <= n; i++) { for (int j = 1; j <= ________; j++) cout << ' '; for (int j = 1; j <= ________; j++) cout << '*'; ____________________; } ``` ### 常见错误 - 换行应写在内层循环里面还是外面?________________ - 为什么内层循环的次数常常与 i 有关?________________ - 行号从0开始时,能否直接使用从1开始的公式?________ ### 判断是否掌握 - [ ] 我能列出每行空格数和符号数。 - [ ] 我能由行号推导数量公式。 - [ ] 我能正确安排内外层循环与换行。 --- ## 课堂编程题 ### 课堂1:实心与空心矩形【适中】 **题目描述:** 输入行数 `n`、列数 `m` 和模式 `type`。当 `type=1` 时打印实心矩形;当 `type=2` 时打印空心矩形。 **输入格式:** 依次输入行数、列数和图形模式。 **输出格式:** 用星号打印指定矩形。 **数据范围:** `1≤n,m≤30`,`type` 为 1 或 2。 **输入样例:** ```text 3 5 2 ``` **输出样例:** ```text ***** * * ***** ``` **解题思路:** 双层循环枚举行列。实心模式总输出星号;空心模式只在首尾行或首尾列输出星号。 **易错提醒:** 每打印完一行才换行;`n=1` 或 `m=1` 时所有位置都在边界上。 ### 课堂2:四种直角三角形【适中】 **题目描述:** 输入 `n` 和类型 `type`,打印边长为 `n` 的直角三角形:1 左下、2 右下、3 左上、4 右上。 **输入格式:** 输入三角形边长和图形类型。 **输出格式:** 指定方向的星号三角形。 **数据范围:** `1≤n≤30`,`1≤type≤4`。 **输入样例:** ```text 4 2 ``` **输出样例:** ```text * ** *** **** ``` **解题思路:** 第 `i` 行星号数量为 `i` 或 `n-i+1`;右对齐时先输出相应数量空格。 **易错提醒:** 右对齐不是改变星号数量,而是在星号前补空格。 ### 课堂3:等腰三角形与菱形【适中】 **题目描述:** 输入 `n` 和模式 `type`。模式 1 打印高为 `n` 的实心等腰三角形;模式 2 打印上下高度均为 `n`、中间行不重复的菱形。 **输入格式:** 输入图形高度和图形模式。 **输出格式:** 指定图形。 **数据范围:** `1≤n≤20`。 **输入样例:** ```text 3 2 ``` **输出样例:** ```text * *** ***** *** * ``` **解题思路:** 上半部分第 `i` 行有 `n-i` 个空格和 `2i-1` 个星号;菱形下半部分按相反规律输出。 **易错提醒:** 菱形下半部分从 `n-1` 开始,避免中间最长行重复。 ### 课堂4:九九乘法表【适中】 **题目描述:** 输入 `n`,打印 `1~n` 的下三角乘法表。第 `i` 行输出 `1×i` 到 `i×i`。 **输入格式:** 输入乘法表的最大因数。 **输出格式:** 下三角乘法表,每项格式为 `j*i=积`,项之间一个空格。 **数据范围:** `1≤n≤9`。 **输入样例:** ```text 3 ``` **输出样例:** ```text 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 ``` **解题思路:** 外层 `i` 控制行和第二个因数,内层 `j` 从 1 走到 `i`。 **易错提醒:** 内层上界是当前行号 `i`,不是固定的 `n`。 --- ## 课后作业 > 请完成本课对应的课后作业,见编程题文件。