版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程序设计
第十讲
第四章程序流程
(二)
2011-7-101
4.4循环结构
44
For...Next循环Do...Loop循环
2011-7-102
4.4循环结构
循环结构是算法语言中一种重要的
结构,它的应用非常广泛,把要重复执行
的语句放在循环结构中,就可避免多次重
复输入。在使用循环结构时,有些循环的
次数事先可以确定,这种循环称为确定性
循环。有些循环的循环次数是不能事先确
定,需要根据条件来决定是否继续循环,
我们称这种循环为不确定循环。
2011-7-103
在VB程序设计语句中有二种形
式的循环结构。
其中For循环结构用来设计循环次
数可以事先确定的循环结构。即循
环次数已知循环结构。
而Do.・・Loop循环结构一般用来设计
循环次数无法事先确定的循环结构。
2011-7-104
4.4.1For循环结构
•For循环结构的一般形式:
For循环控制变量=初值To终值[Step步长]
[语句组1]]
[ExitFor]卜循环体
[语句组2]
Next[循环控制变量]
205
For循环结构一格式
说明:
For循环以For语句开始,以Next语句结束。
循环变量用来控制循环次数;
初值代表循环变量的初始被赋的值;
终值代表循环变量最终能继续进行循环的值;
步长代表每循环一次循环变量增长的值。
For循环结构
・一循环次数的计算
循环的次数可以从循环初值、终值、和步
长计算出来:
R=INT((终值-初值+步长)/步长)
例如:For1=1To10Step2
循环次数R=INT((10-1+2)/2)=INT(5.5)=5
For1=5.0To25.Step0.5
R=INT((25.-5.0+0.5)/0.5)=INT(41.0)=41
2011-7-107
◄A►1
For循环结构-循环结构的一些规定
1、循环变量初值、终值和步长分别可以是常数、
变量和表达式。如果是变量,则它应是预先被赋
值。如果是表达式,则应先计算表达式的值。
2、初值、终值和步长的值可以为正或负,初值、
终值可以为零。但步长不能为零。
例如:For1=-1To-3Step-1的循环次数为:
R=INT((-3-(-l)+(-l))/-l)=3o
2011-7-108
For循环结构
一循环结构的一些规定
即当I的值为T,-2,-3时,执行正常
循环,当I的值变成-4时不再执行循环时。
3、脱离循环的条件是:
循环变量沿变化的方向超过终值。如
果步长的值为正,则“超过”意味着“大
于",如果步长为负,则“超过”意味着
“小于”。
2011-7-109
For循环结构
一循环结构的一些规定
4、如果计算出循环次数R〈0,按R=0处理,
即一次也不执行循环体。
5、如果循环变量的初值、终值和步长类
型和循环变量的类型不一致,则按赋值的
规则处理,即先将其类型化成循环变量的
类型,然后进行处理,即先将初值、终
值和步长的类型化成循环变量的类型,然
后进行处理。
For循环结构
一一循环结构的执行过程
1、执行For循环语句时先将初值赋给循环控制
变量。
2、再利用公式计算循环次数。
计算循环次数的公式:
R=Int((终值-初值+步长)/步长)
2011-7JHII
For循环结构
—循环结构的执行过程
3、检查循环次数,若R=0(或RvO),则跳
出循环体,执行Next语句的下一个语句,若
R>0,则执行循环体。
4、执行Next语句时,循环变量增值步长。
循环次数R・L
5、返回前面步骤3,重复执行步骤3,4o
2011-7-1012
For循环结构
一一循环结构的执行过程
6、其中ExitFor为在满足一定条件下退出
For循环结构。
若For循环的语句为:
For循环变量=©1Toe2Stepe3
循环体
Next循环变量
则其执行过程可用下页的流程图表示:
2011-7JH13
计算el,e2,e3的值
©1=>循环变量/当Rv=0时\
则循环变量
图4-15计算应循环次数R/的值就超过A
<1终值,若步
For循广飞长为负值时,、
环执行超过终值则U
过程流\表示小于终!
程图.执行循环体
循环次数R减1
循环变量增值e3
2011-7JH执行Next语句的下一个语句14
【例4・7】输入一个正整数,利用For循环来判
断是否为素数。
分析:所谓素数是指除了1和它本身之外,不
能被其他的数整除的数。判断一个自然数n
(>3)是否为素数的方法是:依次用2〜<
数作除数去除,如果余数都不为0,则为素
数。
工程设计步骤如下:
(1)启动VB,选“新建工程”中“标准EXE”
工程。在出现的窗体上添加1个文本框、两
个标签和两个命令按钮。如图4・16左图所示。
2011-7-10)15
(2)设置窗体和控件的属性如图4・16右图所示。
其中标签Label2的Caption属性开始设置
为“输出判断结果:”在工程运行后应输出具
体的判断结果。
•判断素数程序0]X
请输入一个大于等于3的自然数N
判断
输出判断结果!
退出
图446判断素数工程设计界面和属性设置
2011-7-1016
在文本框中输入一个自然数n
j=",i=2
图417
判断自然数n
是否为素数的
程序流程
2011-7-107
(3)编写代码
编写单击Commandl命令按钮“判断”所
执行的代码
PrivateSubCommandl_Click()
DimiAsLong,jAsLong,nAsLong
n=Val(Textl.Text)
j=Clng(Sqr(n))
Debug.Printj
2011-7-10>118
rFori=2Toj
,IfnModi=0ThenExitFor
Nexti
Debug.Printi
rIfi>jThen
Labell.Caption=Textl.Text&"为素数"
YElse
Labell.Caption=Textl.Text&"为非素数”
^EndIf
EndSub
2011-7-1019
编写单击Command2命令按钮“退出”所
执行的代码
PrivateSubCommand2_Click()
UnloadMe
EndSub
编写Form_Activate()事件发生时所执行的
代码一
PrivateSubForm_Activate()
Textl.SetFocus
EndSub
2011-7-1020
(4)运行结果。按F5键运行工程,当出
现运行画面时在提示的文本框中输入1个
自然数例如137,然后单击“判断”按钮,
就会在标签2中显示“137为非素数”的
信息。如图4-16所示。
图4・16判断素数工程运行结果
2011-7-1021
442多重循环
通常把循环体内不含有循环语句的
循环称为单层循环,而把循环体内含有
循环语句的循环称为多重环。例如在一
个循环体内含有一个循环语句的称为二
重循环。多重循环又称为多层循环和循
环的嵌套。下面通过例题来讲解多重循
环的应用。
2011-7-1022
【例4・8】我国古代数学家张丘建在“算经”
里提出一个世界数学史上有名的百鸡问
题:鸡翁一、值钱五、鸡母一、值钱三,
鸡雏三、值钱一,百钱买百鸡,问鸡翁、
母、雏各几何?
分析:若公鸡x只,母鸡y只,小鸡z只,
依题意可以列出以下方程组:
x+y+z=100
<x
5x+3y——=100
3
2011-7-1023
在上面的两个方程中,有3个未知
数,属于不定方程,无法直接求解。下
面我们用“穷举法”求解。穷举法是将
各种可能的组合全部一一测试,将符合
条件的组合输出。这里使用二层循环结
构。即将公鸡数从1变化到100,母鸡数
也从1变化到100,对于每一组公鸡和母
鸡数,从100中减去公鸡和母鸡数就得到
小鸡的个数,然后再计算买三种鸡的总
钱数是否为100元。若是就得到一组解,
然后再继续。
2011-7-1024
再仔细分析一下,若100元钱全部都买公鸡
最多买20只,如果全部买母鸡最多买33只,
所以穷举法外循环中公鸡数可从1变到19,
内循环中母鸡数可从1变化到33,小鸡个数
应100中减去公鸡数和母鸡数得到。
工程设计步骤如下:
(1)新建“标准EXE”工程,在出现的窗体
上添加四个标签、一个列表框、一个框架和
两个命令按钮。其中标签1是放在框架内。
2011-7-1025
(2)标签1的Caption属性设为“公鸡五元、
母鸡三元、小鸡一元钱三只。100元钱买
100只鸡。问公鸡、母鸡、小鸡各多少
只?”标签2■标签4的Caption属性分别设
置为“公鸡”、“母鸡”、“小鸡”。
如下图所示。
・百钱买百鸡
公鸡母鸡:小鸡
计算
公鸡每只五元、母鸡每月三
兀、小鸡三只一兀;100兀钱
买100只鸡,问公鸡、母鸡、退出
小鸡各多少只?
2011-7-1026
(3)代码编写如下:
编写单击命令按钮“计算”所执行的代码如下。
PrivateSubCommandl_Click()
Listl.ClearFormat
是格式化
Forx=1To19,外循环求公鸡数二个表达
Fory=1To33,内循环求母鸡数工IO
z=100-x-y,小鸡数
If5*x+y*3+z/3=100Then
p=Format(x,n@@@n)&Format(y,_
"@@@@@@")&Format(z,
2011-7-1027
Rem把满足条件的一种情况添加到列表框中。
Listl.Additempk
EndIf在列表框中
使用、
NextyAdditem方
Nextx法添加项目
EndSub
编写单击命令按钮“退出”所执行的代码如下。
PrivateSubCommand2_Click()
End
EndSub
2011-7-1028
(4)运行结果。按F5键运行工程出现运
行界面后按“计算”按钮后,得到结果
如下图所示。
0Jx
公鸡母鸡小鸡
41878
81181
I12484
公鸡每只五元、母鸡每兄三
兀、小鸡三只一兀;100兀钱
买100只鸡,问公鸡、母鸡、退出
小鸡各多少只?
图4・17百钱买百鸡问题的运行结果
2011-7-1029
[例4・10]在窗体上输出下列图案
-Forml
<1«“■■/a^«
•丫・・丫・・[・・丫・,丫・・],・丫・.丫・rj・•T•
行・4,,丫・
■[■»Tw»T,»♦1・*T«■[・*T■*T•♦[■■]-
■].“■■[■■[■■]■■[■4].d]■
4,・磨rj・•[■・[■・丫・<rj.•[■■]■,7•
・丫・・丫.■Y'B
■[■.Te・^w.丫..丫.・Tw■1•・[•・]・
〃・0】•q.q.“■”■.卜“■
・小
〃・»LB
,丫・♦T、・丫・,T'・磨
yik^B■妖.L
・丫・,]■»yww^irjw
♦・I・一・•••・•••・••《・…・.]
4]■“■^L«.[■■],4],
:输出图案:q.*p»*],■,丫・*T*'T*.T.・T・
2011-7-1030
问题分析:
该图案共有十行,每行有十个星号。要
想输出该图案应使用For循环结构,可以先用
变量a存放这十个星号。使用语句:
a=***********”
由于要输出的是一个平行四边形,每一
行的起始位置比上一行位置多2列。因此要使
用Tab函数来确定每一行输出的起始位置。
语句PrintTab(2*i);表示从第2*i列开
始输出内容。编写代码如下:
2011-7-1031
OptionExplicit
PrivateSubCommandl_Click()
DimaAsString,iAsInteger,jAsInteger
a=,,**********,,
Forml.FontSize=14
Fori=1To10
PrintTab(2*i);表示从每
Printa一行的第
Nexti2*i列开
始输出变
EndSub量a的值。
2011-7-10
[例4・11]在窗体上输出下列图案
2011-7-1033
问题分析:
该图案共有十行,每行有不同的星号。
第一行有一个“*”,第二行有三个“*”,
第三行有五个……,要想输出该图案
应使m双层For循环结构,外层彳后环决定输出
的行数,内层循环决定每行输出的星号数。
可以先用变量a存放一个星号。使用语句:
由于要输出的是一个等腰三角形,每一
行的起始位置比上一行位置少一列。因此要
使用Tab函数来确定每一行的起始位置。
语句PrintTab(18-i);表示从第18-i列开始
输出内容。编写代码如下:
2011-7-1034
编写代码如下:
OptionExplicit
PrivateSubForm_Click()
DimaAsString
DimiAsInteger,jAsInteger
a=
Forml.FontSize=14
2011-7-1035
Fori=1To10
2011-7-1036
[例4・12]在窗体上输出乘法九九表
Forml
乘法九九表
*1逑456789
11
224
3369
4481216
5510152025
661218243036
77142128354249
8816243240485664
991827364554637281
2011-7-1037
OptionExplicit
PrivateSubForm_Click()
DimiAsInteger,jAsInteger,kAsInteger
DimmAsInteger
FontSize=12
PrintTab(25);“乘法九九表“
Print:Print输
出
n
Print;表
Fori=1To9头
PrintTab(i*6);i;
Nexti
2011-7-10
h
l
'Forj=lTo9内
外r
循循
环Printj;"环
决决
定Fork=1Toj定
•*
•
J
<PrintTab(k输
a
6)
共y
输出
乘
出Nextk
几积
及
行Print
个
INextj数
EndSub
39
2011-7-10
[例4・13]打印下列图案
■Forml□1x1
****
****
*****
********
********
******
****
*
分析:上面的图案可分成两个等腰三角形。
上面的三角形有5行第1行为一个…,第
2行为三个“*”,第3行为五个……第5行
意2*5”个…。代码编写如下页所示。,0
OptionExplicit
PrivateSubForm_Click()
DimiAsInteger,jAsInteger
DimaAsString
Fori=1To5、
PrintTab(20-i);输
Forj=lTo2^i-l出
PrintI上
三
Nextj角
形
Nextij
2011-7-10,
Fori=4To1Step-1
PrintTab(20-i);
Forj=lTo2^i-l
输
Print出
下
Nextj三
Print角
形
NextiJ
EndSub
2011-7-1042
443DoLoop循环结构
Do…Loop循环结构也是常用的循
环结构。对于一些无法事先确定循环次数
的程序,可用Do……Loop型循环结构。
1.它的格式有两种:
格式L先测型
Do[While|Until]v条件〉
[V语句组1>]
[ExitDo]
[V语句组2>]
2M99P43
格式2:后测型
Do
[v语句组1>]
[ExitDo]
[V语句组2>]
Loop[While|Until]v条件〉
2011-7-1044
2.说明:
(1)格式1中“DoWhilev条件
>……Loop语句”,是先测型当型
循环。即先判断While后面的条件
是否为“真”,如果为“真”则执
行循环体里面的各语句,如果为
“假”,则退出循环,循环直到条
件为“假”终止。
2011-7-1045
(2)格式2中“D。...LoopWhilev条
件》语句”是后测型当型循环。与前
者的区别在于,它不管条件的真假,
都会先执行“Do”后面的语句,也就是
循环体,当执行到LoopWhilev条件〉
语句时,再判断<条件>的真假,如果
为“真”则返回执行循环体里面的各
语句,如果为“假”,则退出循环,
循环直到条件为“假”终止。也就是
说,它至少执行循环体一次。
2011-7-1046
在两种格式中While语句都可以用Until
语句代替,它是直到条件为真时则终止循
环。注意While语句后面的条件和Until语
句的条件正好互补。
例如:求5!
如果使用当型循环则While后的条件
是(Nv=5)o
而如果用Until语句,则后面的条件为
(N>5)o为了避免混淆,所以我们建议只
用DoWhile循环即可。
2011-7-1047
(3)格式中[ExitDo]为可选项,在上面两种Do
循环结构中,可以有一个或多个ExitDo语句,
以便在满足一定的条件下,随时退出循环体。
下页中分别给出前测型DoWhile...Loop和
DoUntil...Loop循环结构的逻辑框图。同学们
可自己画出后测型的两种逻辑框图。
2011-7-1048
DoUntiL・.Loop循环逻辑框图
Do...Loop循环举例
【例4-14】任意输入一个自然数,编
程输出其各个因子。工程设计步骤
如下:
(1)新建“标准EXE”工程,在出现
的界面上添加三个标签、一个文本
框、和两个命令按钮如图4・18所示。
2011-7-10M喝►>1
(2)设置窗体及控件的属性。标签1
的Caption属性为“请输入一个自然
数”;标签2的Caption属性为“N的
因子是:”;标签3的Caption属性为
空,在运行时赋值。另外标签3的
Autosize属性为True,以便在运行时
赋值能根据实际内容自动适应。其
他属性如下页图4-18所示。
2011-7-10)51
图4・18求自然数因子的工程界面及属性设置
2011-7-1052
图4・19输出某个自然数y的所有因子流程图
2011-7-1053
(3)编写代码如下:
编写单击命令按钮“计算”所执行的代码
PrivateSubCommandl_Click()
DimxAsString,yAsSingle
y=Val(Textl.Text)
i=2
x=,,,,
2011-7-10>154
DoWhiley<>l
IfyModi=0Then
x=x&"*"&Str(i)&Chr(13)
y=y\i
Elseo
i=i+1
EndIf
Loop
LabeB.Caption=x
Labell.Caption=Textl.Text&”的因子是:“
EndSub
2011-7-1055
(4)运行结果。按F5执行工程,当
出现运行界面时,从文本中输入一
个自然数,然后单击命令按钮“计
算”就会得到如图4・20所示的结果。
即在标签3中输出了自然数的各个因
子相乘的结果;另外,标签2的内容
也根据输入的数自动改变如图4・20
所示。
2011-7-1056
图4・20求自然数因子的运行结果
2011-7-10
【例4-15】用牛顿迭代法求方程的根。所求的方程
为:
ex—x=0
分析:用牛顿迭代法求方程。化)=0在瓦附近的实
根的方法如下。
(1)选一个接近己的真实根。;
(2)通过J求出(X乱)。在几何中就是作己=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年著作权交易协议规范样本版B版
- 2024支付系统数据中心建设与运营合同3篇
- 2025酒店租赁合同的样本
- 建筑设计企业消防整改施工合同
- 云安全服务期协议
- 2025电梯安装安全合同
- 2024年销售人员专属合作合同版B版
- 食品生产加工联营合同
- 建筑通风翰林府建设项目合同
- 服装设计劳务租赁合同
- 全国赛课一等奖初中统编版七年级道德与法治上册《正确对待顺境和逆境》教学设计
- 统编版(2024版)道德与法治七年级上册期末质量监测试卷 3套(含答案)
- 智慧康复医院智能化总体规划方案
- 申能集团在线测评题目
- 十四五规划药剂科展望
- 四川政采评审专家入库考试基础题复习试题
- 一年级上册语文拼音前后鼻韵母和平翘专练
- 2025年产科护理工作计划
- 【MOOC】概率统计和随机过程-南京邮电大学 中国大学慕课MOOC答案
- 【2024】苏教版科学一年级上册每课教学反思(带目录)
- 2024年度北京租大客车旅游租车合同范本
评论
0/150
提交评论