第五课 for循环(1)—循环次数控制
【循环引入】
例题5.1:画下面形状的5级梯形。
分析:
研究问题的方法之一是“从简单到复杂”。
步骤 | 说明 | 图形 |
步骤1 | 先分析简单的1级梯形基本问题。 | |
步骤2 | 代码为: pen.fd(30); pen.rt(90); pen.fd(30); pen.lt(90); | 注意开始和结束的pen方向。 |
步骤3 | 重复用前面的代码5次,画出5个1级梯形。 |
怎样编程完成步骤3?用“ctrl-C、ctrl-V”这种“复制、粘贴”大法?要画100级梯形怎么办?进一步的问题是画N级梯形怎么办?这个问题值得大家发散思维进行研究!
程序设计语言对重复操作提供了一种专门的方法:循环结构。
C++语言有3种实现循环结构的语句,其中比较简的叫for语句,本节课就利用for语句来实现上面的重复功能。下面先用画5级梯形的样例程序5.1来学习for语句的使用。
样例程序5.1 | 图形 |
int main() { for(int i=0; i<5; i++) { pen.fd(30); pen.rt(90); pen.fd(30); pen.lt(90); } return0; } |
新知识:
程序5.1中的有2个新知识点要说明。
(1) 复合语句—把几条语句合成为一个功能块。
语句 | 说明 |
pen.fd(30); pen.rt(90); pen.fd(30); pen.lt(90); | 步骤2有4个语句。 |
{ pen.fd(30); pen.rt(90); pen.fd(30); pen.lt(90); } | 合成为1个复合语句。 |
“pen.fd(30); pen.rt(90); pen.fd(30); pen.lt(90);”无论写成1行还是4行只是排版格式不同,都是4个语句。程序要重复的“步骤2”有4个语句,要把这4个语句当成整体,需要用花括号”{}”组合在一起,这个整体就叫复合语句。
(2) for循环语句。
语句 | 说明 |
for(int i=0; i<5; i++) 步骤2;
功能:执行5次步骤2。步骤2可以一个简单语句,也可以是一个复合语句。 | (1) for在这里可以看成是“从…到…”的意思。本句可读成:i从0到4循环。 (2)for后面是用圆括号”()”括起来的3部分,用2个分号” ; ”隔开。 (3)中间的”i<5”读作:i小于5,这里5就是控制循环执行步骤2次数的。
|
for循环语句格式的进一步的说明参见下一课。
例题5.2:使用变量N,画下面形状的N齿梳子形。
分析:
简单化的基本问题是1个齿的形状:。
程序定义一个整型变量N,用变量N作为控制循环次数的值( i < N )。
样例程序5.2 | 图形 |
int main() { int N=6; for(int i=0; i <N; i++) { pen.fd(30); pen.rt(90); pen.fd(30); pen.rt(90); pen.fd(30); pen.lt(180); } return0; } |
|
新知识:
程序5.2的第一句“int N=6;”用到C++语言特有的缩写功能:定义+赋值,这句定义了整型变量N,并且赋N初始值为6,即把“int N;N=6;”两句简便缩写成一句。
在C++语言中类似的缩写功能还有很多,比如:“i++”是“i= i+1”的简写。
甚至在GoC软件新版中,“pen.fd(30); pen.rt(90); pen.fd(30);”三句可以缩写为“pen.fd(30).rt(90).fd(30);”一句。
【画正多边形】
前面的课程里我们学习了编程画正三角形和四边形(矩形)。这课我们研究一下怎样画正五边形、六边形、七边形…等等。
研究问题的方法之一是“从简单到复杂,从已知到未知”。
首先回顾一下正三角形和四边形的画法:
正三角形 | 正四边形 |
程序片段: pen.fd(100); pen.rt(120); pen.fd(100); pen.rt(120); pen.fd(100); pen.rt(120); | 程序片段: pen.fd(100); pen.rt(90); pen.fd(100); pen.rt(90); pen.fd(100); pen.rt(90); pen.fd(100); pen.rt(90); |
画法的基本步骤:
(1) pen前进,画一边长:pen.fd(100);。
(2) pen转弯一个角度a。三角形:pen.rt(120);,四边形:pen.rt(90);。
三角形重复基本步骤3次,四边形重复基本步骤4次。
显然的是五边形要重复基本步骤5次,六边形要重复基本步骤6次…,N边形要重复基本步骤N次。剩下的问题是转弯度数a怎么算?
观察pen的方向,pen开始向上,转动一圈最后又向上,总共转动一周360°。显然,对三角形每次要转动360÷3(=120度);对四边形每次要转动360÷4(=90度);对五边形每次要转动360÷5(=72度);…对N边形,每次转动360÷N(度);
因此,得到画正N边形的方法(程序设计中称为算法)。
重复N次下面的基本步骤:
(1)pen前进,画一边长。
(2)pen转弯一个角度a=360÷N。
例题5.3:画正N边形。
样例程序5.3 | 图形 |
int main() { pen.speed(4); pen.show(); int N=6; for(int i=0; i< N; i++) { pen.fd(100); pen.rt(360/N); } return0; } |
|
提示:
l 把程序5.3中的N=6分别换成3,4,5,6,7,8,9,10,11运行试试。
l 程序5.3是有瑕疵的,N=7或N=11时,画出的图形不精确,原因是“pen.rt(360/N);”这句中的“360/N”运算表达式有问题。在C++语言中规定2个整型数相除结果也是整数,称为“整除”。N=11时,360/N的结果是商32,而不是比较精确值32.7273。修正的方法是至少让其中一个数变为“小数”,比如把这句改为:pen.rt(360.0/N);程序就正确了。
【练习】
(1)观察图形,完善程序。程序5.5中只要修改3个赋值语句,给N、fdLen、bkLen适当的值,就会画出左边的三种或更多种图形。程序有2个空,请填空完善右边的程序段。
图形 | 要完善的程序5.5 |
N=5,fdLen=100,bkLen=100时 |
int main() { pen.show().speed(4); int N; //N是循环次数 int fdLen; //fdLen是前进的长度 int bkLen; //bkLen是后退的长度 N=5; fdLen=100; bkLen=100; for(int i=0; i<N; i++) { pen.fd( fdLen ); pen.bk( ① ); pen.rt( ② ); } return0; } |
N=10,fdLen=100,bkLen=50时 | |
N=6,fdLen=100,bkLen=0时 |
(2)研究下面图形,创作自己的作品。
【学习目标】
(1) 初步理解程序设计的循环结构。
(2) 了解for循环语句、复合语句的简单语法格式。
(3) 学会用for语句实现重复次数控制。
(4) 掌握绘制正多边形、旋转图形的角度计算方法。
【拓展学习】
怎样方便地把自己的程序和绘制的图形保存在word文档里,如同上面课程中出现的表格?
l 在word里插入2列多行的表格。
l 把程序复制粘贴到第1列;
l 截取程序运行的图像,复制粘贴到第2列。
l 截取图像最简单的方法是:运行程序后,点击“工具”菜单再选择“保存图形”项:
会出现十字形光标,点击拖拽截取图像
选择“复制到剪贴板”,就可以粘贴到word中。