第8中环 本章的学习要点 掌握D0循环结构 ◆掌握For循环控制结构 循环的嵌套 常用算法
第8章 循环结构 本章的学习要点 ❖掌握DO循环结构 ❖掌握For循环控制结构 ❖循环的嵌套 ❖常用算法
概述 单击窗体,要求在窗体上显示6行星号_6星号二口x 分析: 要求显示的信息是每行是由16个星号所 水*本水本水木水冰* 构成的字符串,所以可以通过连续6次 调用窗体的Prin方法实现图形的显示 Private Sub Form Click ?若要求显示10行或更多行这 Print"********** 样的信息 Print"********”?若打印信息的行数要求是由 Print"*****冰**水* 用户决定 Print“*****专门用于进行重复操作的语 Print”***冰水**水**水* 句结构 Print”*米冰冰冰冰*冰冰冰冰冰冰冰 End sub
概 述 ❖ 单击窗体,要求在窗体上显示6行星号 分析: ▪ 要求显示的信息是每行是由16个星号所 构成的字符串,所以可以通过连续6次 调用窗体的Print方法实现图形的显示 Private Sub Form_Click() Print "****************" Print "****************" Print "****************" Print "****************" Print "****************" Print "****************" End Sub 若要求显示10行或更多行这 样的信息 若打印信息的行数要求是由 用户决定 ☺专门用于进行重复操作的语 句结构
概述 令所谓循环结构,表示在执行语句时,需要对其中的某个 或某部分语句重复执行多次。对于此类情况可以利用各 种循环结构来实现。 ◆循环结构可以分为For循环、Do循环和 While循环语句 结构。 For. Next For循环 For Each. Next 当型循环 前测型循环 循环 直到型循环 Do循环 当型循环 后测型循环 直到型循环 While循环
概 述 ❖所谓循环结构,表示在执行语句时,需要对其中的某个 或某部分语句重复执行多次。对于此类情况可以利用各 种循环结构来实现。 ❖循环结构可以分为For循环、 Do 循环和While循环语句 结构。 循 环 For循环 Do 循环 While循环 For…Next For Each…Next 前测型循环 后测型循环 当型循环 直到型循环 当型循环 直到型循环
81Do循环 Do循环可以分为前测型循环和后测型循环两种结构。 前测型循环结构 格式1(当型) 格式2(直到型) Do W 绸型循环是当循环条件为TRUE时进入循下条件 环;直到型则是为 FALSE进入循环 Loo 循环条住 False True 循环条 True False 循环体 循环体
8.1 Do 循环 ❖ Do 循环可以分为前测型循环和后测型循环两种结构。 ▪ 前测型循环结构 • 语法格式: True 循环条件 循环体 False ▪ 格式1 (当型) Do While 循环条件 循环体 Loop False 循环条件 循环体 True ▪ 格式2(直到型) Do Until 循环条件 循环体 Loop 当型循环是当循环条件为TRUE时进入循 环;直到型则是为FALSE进入循环
81Do循环 Do循环可以分为前测型循环和后测型循环两种结构。 后测型循环结构 格式1当刑) Do 前测型循环是先判断循环条件,循环体执 循行次数0:后测型循环是先执行循环,循 LoQp(环体执行次数1 环条件 循环体 循环体 False rue <循环条件 <循环条住 rue False
8.1 Do 循环 ❖ Do 循环可以分为前测型循环和后测型循环两种结构。 ▪ 后测型循环结构 ▪•格式语法格式: 1 (当型) Do 循环体 Loop While 循环条件 ▪ 格式2 (直到型) Do 循环体 Loop Until 循环条件 循环条件 循环体 True False 循环条件 循环体 False True 前测型循环是先判断循环条件,循环体执 行次数≥0;后测型循环是先执行循环体,循 环体执行次数≥1
81Do循环 单击窗体,要求在窗体上显示6行星号 前测型当型循环: Dim i As Integer’定义计数器变量i来记录目前已输出的行数 Do Print”***冰水**水***水 i=i+1 Loop Until i>val( InputBox("请输入行数:") End sub 注意: 在循环体中,至少要有一条语句使得循环趋结束,使 循环语句在有限的时间内执行完毕,否则将会出现 “死循环
8.1 Do 循环 ❖单击窗体,要求在窗体上显示6行星号 ▪ 前测型当型循环: ▪ 将上面的代码改为前测型直到型循环、后测型当 型循环和后测型直到型循环。 Dim i As Integer '定义计数器变量i来记录目前已输出的行数 i = 0 Do While i 5 Print "****************" i = i + 1 Loop Do Loop while Loop Until i > 5<6 Val(InputBox("请输入行数:")) 注意: ▪ 在循环体中,至少要有一条语句使得循环趋结束,使 循环语句在有限的时间内执行完毕,否则将会出现 “死循环
81Do循环 例:求S=1+(1+2)+…+(1+2+3+…+100)的值。 编写代码: Private Sub Command1 Click Dim s As long, n As Integer, k As integer Labe. Caption="s=1+(1+2)+(1+2+3)+..(1+2+3+...100)=? 0:k=1 Do n+k 求“小和”,即求s中的每一项的和。 s=stn 求“大和”,即求s的累加和。 k=k+1 “大和”的项数(亦即“小和”中的末项值) Loop Until >100 Labe12. Caption="s=1+(1+2)+(1+2+3).+(1+2+3+.+100)="&s End sub
例:求S=1+(1+2)+ …+(1+2+3+…+100)的值。 ▪ 编写代码: Private Sub Command1_Click() Dim s As Long, n As Integer, k As Integer Label1.Caption = "s=1+(1+2)+(1+2+3)+...(1+2+3+...100)=?" s = 0: n = 0: k = 1 Do n = n + k ’ 求“小和”,即求s中的每一项的和。 s = s + n ’ 求“大和”,即求s的累加和。 k = k + 1 ’ “大和”的项数(亦即“小和”中的末项值)。 Loop While k 100
81Do循环 设计采用欧几里德算法求解两个 开始 自然数的最大公约数的程序 算法分析: 输入两个自然数m2n “欧几里德算法” r=m mod n ①输入两个自然数m、n ②求m除以n的余数r mn ③m←n nr ④n←r ⑤若r≠0,则重复执行②③ r<>0 False ④(循环),否则转⑥ rue ⑥输出m和n的最大公约数m 输出最大公约数m (结束
8.1 Do 循环 ❖ 设计采用欧几里德算法求解两个 自然数的最大公约数的程序 算法分析: ▪ “欧几里德算法” ①输入两个自然数m、n ②求m除以n的余数r ③m←n ④n←r ⑤若r≠0,则重复执行②③ ④(循环),否则转⑥ ⑥输出m和n的最大公约数m 输入两个自然数m,n r=m Mod n m=n n=r r<>0 输出最大公约数m 开始 结束 False True
81Do循环 Private Sub Command1 Click 开始 Dim m as integer n as integer r as integer m=Ⅴal(Text1.Text) 输入两个自然数mn n=Val(Text2 Text) Do r=m Mod n r=m od n = n n=r En Loop whiles o Text3 text=m nEr End Sub Private Sub Command2 Click False TextI Text rue Text2 Text= Text3 text End Sub 输出最大公约数m Private Sub Command3 Click End 结束 End sub
8.1 Do 循环 ❖ 设计采用欧几里德算法求解两个 自然数的最大公约数的程序 界面设计: ▪ 利用文本框来接收数据和显示 结果,利用命令按钮的单击事 件完成最大公约数的计算。 False 输入两个自然数m,n r=m Mod n m=n n=r r<>0 输出最大公约数m 开始 结束 True Private Sub Command1_Click() Dim m As Integer, n As Integer, r As Integer m = Val(Text1.Text) n = Val(Text2.Text) End Sub Private Sub Command2_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub Private Sub Command3_Click() End End Sub Private Sub Command1_Click() Dim m As Integer, n As Integer, r As Integer m = Val(Text1.Text) n = Val(Text2.Text) Do r = m Mod n m = n n = r Loop While r <> 0 Text3.Text = m End Sub Private Sub Command2_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub Private Sub Command3_Click() End End Sub
81Do循环 心设计一个小程序,能够实现 开始 接收若干的专家的考评打分,[总考评分清零ota10 输入-1表示打分结束,最后考评分个数清零Nm0 的丶八 Private Sub Form Click o Dim Total As Single, mark As Single, average As Single Dim Num as integer Total= 0: num=0 mark=Val( inpuTbox("'请输入第"&Num+1&"个专家评分(1表示结束输入):") Do While mark Total= Total+ mark Num= Num+ 1 mark=Val( InputBox("请输入第"&Num+1&"个专家评分(-表示结束输入):") Loop average= Total/Num MSgB0xNm&"个专家的平均分为:"& average End Sub (结束
8.1 Do 循环 ❖ 设计一个小程序,能够实现 接收若干的专家的考评打分, 输入-1表示打分结束,最后 计算出平均考评分 界面设计 : ▪ 由于要接收的数据无 法预知其个数,所以 不适合利用文本框来 接收数据,所以采用 输入函数InputBox, 结合循环实现 ▪ 利用窗体的单击事件 完成最大公约数的计 算,并在窗体上而显 示结果 输入一个专家打分Mark 总分累加Total = Total + Mark 输出平均考评分Average 开始 结束 False True 总考评分清零Total=0 Mark<>-1 输入下一个专家打分Mark Average= Total / Num 考评分个数清零Num=0 考评分个数累加Num = Num + 1 Private Sub Form_Click () Dim Total As Single, mark As Single, average As Single Dim Num As Integer Total = 0: Num = 0 mark = Val(InputBox("请输入第" & Num + 1 & "个专家评分(-1表示结束输入):")) Do While mark <> -1 Total = Total + mark Num = Num + 1 mark = Val(InputBox("请输入第" & Num+1 & "个专家评分(-1表示结束输入):")) Loop average = Total / Num MsgBox Num & "个专家的平均分为:" & average End Sub