程序流程的控制(二)_第1页
程序流程的控制(二)_第2页
程序流程的控制(二)_第3页
程序流程的控制(二)_第4页
程序流程的控制(二)_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

Print

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角

Print

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论