🔐 图形绘制工厂 · 详细解析
题目讲解 · 解题思路 · 完整参考答案 · 常见错误 · 拓展思考
一、题目概述
难度等级 ★★☆☆☆(函数入门级应用)|趣味性 ★★★★★|推荐度 ★★★★★
用函数画各种图形,写三个函数:drawLine(n) 画一条横线(n个星号)、drawRect(width,height) 画矩形、drawTriangle(n) 画直角三角形;主程序调用它们画出 5×3 矩形和 4 层直角三角形。
二、知识点分析
知识点 在本题中的应用
函数定义语法 定义 drawLine / drawRect / drawTriangle 三个函数
带参函数 传入 n、width、height 控制图形大小
void 返回值 只画图,不需要返回结果
函数调用 main 中调用 drawRect/drawTriangle,drawRect 调用 drawLine
改变参数 同一个 drawLine 传不同 n,画出不同长度的横线
for 循环 / 嵌套思路 drawLine 单层循环,drawRect/drawTriangle 嵌套调用
三、解题思路详解
第1步 写 drawLine(n): 返回值 void,参数 int n;用 for 循环输出 n 个星号,最后 cout << endl; 换行。
第2步 写 drawRect(width,height): 外层循环 height 次(控制行数),每次调用 drawLine(width) 画一行。不需要自己写内层循环画星号,这就是"代码复用"!
第3步 写 drawTriangle(n): 外层循环 i 从 1 到 n (注意不是从0开始),每次调用 drawLine(i) 画 i 个星号。
第4步 在 main 中调用: drawRect(5,3) 画 5 列 3 行矩形,drawTriangle(4) 画 4 层三角形。
四、完整参考答案(填空已补全,带中文注释)
五、运行结果
=== 矩形 5x3 ===
*****
*****
*****
=== 三角形 4层 ===
*
**
***
****
六、常见错误及解决方法
常见错误 错误表现 解决方法
函数写在 main 后面 编译报错"函数未定义" 函数写在 main 前面,或先声明函数原型
drawLine 忘记 endl 所有星号挤在同一行 画完 n 个星号后必须 cout << endl;
三角形循环从 0 开始 第1层画0个星号(空行) i 从 1 开始:for(i=1;i<=n;i++)
调用参数顺序错 drawRect(3,5) 画成 3列5行 参数顺序与定义一致:drawRect(width,height)
定义时忘写 void 编译报错"缺少返回值类型" 即使没有返回值也要写 void
七、拓展思考(学有余力)
拓展1:怎么修改 drawRect 画"空心矩形"(只有边框)?
拓展2:怎么写 drawDiamond(n) 画菱形?(先画空格再画星号)
拓展3:怎么修改 drawTriangle 画"倒三角形"?
拓展4:用一个 drawShape(type,size),type=1 画矩形、type=2 画三角形,怎么实现?(用 if-else)
关闭解析