循环结构设计_第1页
循环结构设计_第2页
循环结构设计_第3页
循环结构设计_第4页
循环结构设计_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

第5循环结构设计

计算机具有速度快、精度高的特点,特别适于进行重复性的工作,重复次数越多越能显示它的威力。所以,使用计算机时,应尽量把问题归纳为简单而有规则的重复运算和操作,以充分发挥计算机的特长。

采用循环程序可以解决一些按一定规则重复执行的问题。例如,统计一个班几十名学生,甚至全校几千名学生的学期成绩,如求平均分、不及格人数等

本章主要内容

循环语句

For...Next/Do...Loop/While...Wend

循环出口语句(Exit)

多重循环列表框与组合框程序举例

第5章循环结构设计

循环是指在指定的条件下多次重复执行一组语句。被重复执行的一组语句称为循环体

VB提供的循环语句有

Do...LoopFor...NextWhile...WendForEach...Next

最常用的是For...Next和Do...Loop语句

5.1.1For...Next循环语句

按指定次数执行循环体

例5.1

在窗体上显示2至10各偶数的平方数

采用Print直接在窗体上输出结果,程序代码:

PrivateSubForm_Load()DimkAsIntegerShowFork=2To10Step2Printk*kNextkEndSub

程序运行结果:

4163664100

5.1循环语句

说明:上述程序,循环变量k的初值、终值和步长值分别为2,10和2,即从2开始,每次加2,到10为止,控制循环5次。每次循环都将循环体(Printk*k)执行一次

格式:

For循环变量=初值To终值[Step步长值]

循环体

Next

循环变量

功能:本语句指定循环变量取一系列数值,并且对循环变量的每一个值把循环体执行一次

初值、终值和步长值都是数值表达式,步长值可以是正数(称为递增循环),也可以是负数(称为递减循环)

若步长值为1,则Step1可以省略

(1)求出初值、终值和步长值,并保存起来

(2)将初值赋给循环变量

(3)判断循环变量值是否超过终值(步长值为正时,指大于终值;步长值为负时,指小于终值)。超过终值时,退出循环,执行Next之后的语句

(4)执行循环体

(5)遇到Next语句时,修改循环变量值,即把循环变量的当前值加上步长值再赋给循环变量

(6)转到(3)去判断循环条件

例5.1的执行过程For...Next语句的执行步骤

采用Print直接在窗体上输出结果,程序代码:

PrivateSubForm_Load()

Shows=0Fork=1To8s=s+kNextkPrint"s=";sEndSub

程序运行结果如下:

s=36

语句s=s+k(循环体语句)的执行过程

例5.2

求S=1+2+3+…+8

采用Print直接在窗体上输出结果,程序代码:

PrivateSubForm_Load()Showt=1Forc=1To8t=t*cNextcPrint"T=";tEndSub

程序运行结果是:

T=40320

语句t=t*c也称乘法器。先将t置1(不能置0)。

在循环程序中,常用累加器和累乘器来完成各种计算任务例5.3

求T=8!=1×2×3×…×8

采用Print直接在窗体上输出结果,程序代码如下:

PrivateSubForm_Load()ShowDimpiAsSingle,cAsInteger,sAsIntegerpi=0s=1

's表示加或减运算

Forc=1To10000Step2pi=pi+s/cs=-s

'交替改变加、减号

NextcPrint"π=";pi*4EndSub

程序运行结果是:

π=3.141397

例5.4

用π/4=1-1/3+1/5-1/7+……级数求π的近似值(取前5000项来进行计算)

下面采用“穷举法”来解此题。其做法是:从所有可能解中,逐个进行试验,若满足条件,就得到一个解,否则不是。直到条件满足或判别出无解为止。

令母鸡为x只,小鸡为y只,根据题意可知

y=100–x

开始先让x初值为1,以后逐次加1,求x为何值时,条件3x+y/3=100成立。如果当x达到30时还不能使条件成立,则可以断定此题无解例5.5

用100元买100只鸡,母鸡3元1只,小鸡1元3只,问各应买多少只?

采用Print直接在窗体上输出结果,程序代码:

PrivateSubForm_Load()

DimxAsInteger,yAsIntegerShowForx=1To30y=100-xIf3*x+y/3=100ThenPrint"母鸡只数为:";x,Print"小鸡只数为:";yEndIfNextxEndSub

运行结果:

母鸡只数为:25

小鸡只数为:75

For...Next循环主要是用在知道循环次数的情况下,若事先不知道循环次数,可以使用当型循环Do...LoopDo...Loop两种格式:前测型循环结构和后测型循环结构。两者区别在于判断条件的先后次序不同

5.1.2Do...Loop循环语句

格式:

Do[{While|Until}条件]

循环体

Loop

DoWhile...Loop语句的功能:当条件成立(为真)时,执行循环体;当条件不成立(为假时),终止循环

DoUntil...Loop(直到型循环)语句的功能:当条件不成立(为假)时,执行循环体,直到条件成立(为真)时,终止循环1.前测型Do...Loop循环

采用DoWhile...Loop语句

采用Print直接在窗体上输出结果,程序代码:

PrivateSubForm_Load()DimnAsInteger,sAsLongShown=1:s=0DoWhilen<=100s=s+n*nn=n+1LoopPrint"s=";sEndSub

程序运行结果:

S=338350例5.6

求S=12+22+…+1002采用Print直接在窗体上输出结果,程序代码:

PrivateSubForm_Load()ShowDimpiAsSingle,nAsLong,sAsIntegerpi=0:n=1:s=1DoWhilen<=100000

'或1/n>=0.00001pi=pi+s/ns=-sn=n+2LoopPrint"π=";pi*4EndSub

程序运行结果:

π=3.141575例5.7

用π/4=1-1/3+1/5-1/7+……级数,求π的近似值。当最后一项的绝对值小于10-5时,停止计算

语句格式如下:

Do

循环体

Loop[{While|Until}条件]

功能:先执行循环体,然后判断条件,根据条件决定是否继续执行循环

注意,本语句执行循环的最少次数为1,而前测型Do...Loop语句的最少次数为0(即一次都不执行循环)

2.后测型Do...Loop循环

For…Next

前测型

S=0

s=0:k=1Fork=1to8Do

Whilek<=8

s=s+k

s=s+kNextkk=k+1Prints

LoopPrint

ss=0:k=1

do

s=s+k

k=k+1

Loop

Whilek<=8

Prints三种循环语句比较

示例:求和s=1+2+3+…+8后测型

“辗转相除法”算法:求出m/n余数p,若p=0,n即为最大公约数;若p非0,则把原来的分母n作为新的分子m,把余数p作为新的分母n继续求解设计步骤如下:

(1)创建应用程序的用户界面和设置对象属性例5.8

输入两个正整数,求它们的最大公约数

编写的“计算”按钮Click事件过程代码如下:

PrivateSubCommand1_Click()DimmAsInteger,

nAsInteger,pAsIntegerm=Val(Text1.Text):n=Val(Text2.Text)Ifm<=0Orn<=0Then

MsgBox("数据错误!")EndEndIfDop=mModnm=nn=pLoopWhilep<>0Text3.Text=mEndSub

若输入的m和n的值为85和68,则运行结果如上图

语句格式

While条件循环体

Wend

功能:当条件成立(为真)时,执行循环体;当条件不成立(为假)时,终止循环。本语句与上述DoWhile...Loop循环语句相似5.1.3While...Wend循环语句

用于提前退出循环

格式:Exit{For|Do}

功能:直接从For循环或Do循环中退出

当程序运行时遇到Exit语句时,就不再执行循环体中的任何语句而直接退出,转到循环语句(Next、Loop)的下面继续执行

5.1.4

循环出口语句

例5.8的循环语句可改为

Dop=mModn

Ifp=0ThenExitDoEndIfm=nn=pLoopWhilep<>0Text3.Text=n

把每次输入的数累加。当输入-1时结束程序的运行

(1)创建应用程序的用户界面和设置对象属性

(2)编写程序代码

PrivateSubForm_Load()ShowSum=0

DoWhileTrue

'条件为真,循环无终止进行下去

x=Val(InputBox("请输入要加入的数(-1表示结束)","输入数据"))Ifx=-1ThenExitDoEndIfSum=Sum+xText1.Text=SumLoop

MsgBox("累加运算结束")EndSub

以-1作为“终止循环标志”

例5.9

设计一个“加法器”程序

多重循环是指循环体内含有循环语句的循环

例5.10多重循环程序示例程序运行结果

PrivateSubForm_Load()

1

5Show

1

6

Fori=1To3

‘外循环

17

Forj=5To7

’内循环

25Printi,j

2

6Nextj

2

7Nexti

3

5EndSub

3

6

3

7

注意内、外循环层次要分清,不能交叉

5.2

多重循环

本例可采用两重循环来实现。外循环控制输出7行,内循环控制每行输出要求的字符数。在进入内循环之前,使用PrintTab()来对起始输出位置定位,退出内循环后,使用Print来控制换行。例5.11

编一程序,输出下列所示的图形

采用Print直接在窗体上输出结果,程序代码如下:

PrivateSubForm_Load()

Show

Fori=1To7

PrintTab(10-i);

Forj=1To2*i-1

Print

Chr(i+48);

Nextj

Print

Nexti

EndSub

PrintChr(i+48)与Printi有所不同

(1)分析:设一元硬币为a枚,二元硬币为b枚,五元硬币为c枚,可列出方程

a+b+c=10

a+2b+5c=25

采用两重循环,外循环变量a从0~10,内循环变量b从0~10

(2)创建应用程序的用户界面

例5.12

取一元、二元、五元的硬币共十枚,付给25元钱,有多少种不同的取法?

(3)编写程序代码

程序通过Print方法把处理结果输出在标签的下方

PrivateSubForm_Load()Show

CurrentX=0:CurrentY=1500

'确定开始显示的坐标

Print,"五元","二元","一元"n=0'记录解的组数

Fora=0To10Forb=0To10c=10-b-aIfa+2*b+5*c=25Andc>=0Thenn=n+1Print"(";n;")",c,b,aEndIfNextb,aEndSub

列表框和组合框都能为用户提供若干个选项,供用户从中任意选择两种控件的特点是为用户提供大量的选项但又占用很少的屏幕空间,操作简单方便

5.3列表框与组合框

1.列表框的用途

列表框(ListBox)用于列出可供用户选择的项目列表,用户可从中选择一个或多个选项。

自动出现滚动条表项索引

2.常用属性

(1)Name属性

(2)List属性:该属性是一个字符型数组,用于存放列表框的表项

数组的下标从0开始图5.5中,List1.List(0)的值为“教授”,List1.List(1)的值为“副教授”

5.3.1列表框

(3)ItemData属性:为每个表项设置一个对应的数值

(4)ListCount属性:返回列表框中表项的数目

(5)ListIndex属性:返回已选定表项的顺序号(索引)。若未选定任何项,则ListIndex的值为-1

(6)Text属性:存放当前选定表项的文本内容

(7)Selected属性:逻辑值,表示列表框中某一表项是否被选中

(8)Sorted属性:设置列表框中各表项在运行时是否按字母顺序排列

(9)MultiSelect属性:设置是否允许同时选择多个表项

假设列表框List1中有四个表项,并已选定第2项,则有:

List1.List(0)的值为”教授”

个数List1.ListCount

为4

List1.ListIndex

为1

List1.Text的值为”副教授”

List1.Selected(1)为True

List1.Selected(0)为False

采用以下方法,可为列表框List1赋值:

(1)在属性窗口中设置

(2)利用AddItem赋值(3)利用List属性赋值

List1.AddItem“教授”List1.List(0)=“教授”

List1.AddItem“副教授”List1.List(1)=“副教授”

List1.AddItem“讲师”List1.List(2)=“讲师”

List1.AddItem“助教”List1.List(3)=“助教”

3.事件

可接收Click、DblClick等事件

4.

方法

(1)AddItem方法:用于把一个列表项加入列表框

格式:[对象.]AddItem

列表项[,索引]

举例:List1.AddItem"海南省",28

其中,“索引”值不能大于表项数(ListCount)

(2)Clear方法:用于清除列表框中的所有项目

(3)RemoveItem方法:用于删除指定的列表项格式:[对象.]AddItem列表项[,索引]

5.

列表框表项的输出

(1)用鼠标单击列表框内某一表项,则该表项值存放在Text属性中。例如:

x=List1.Text

′把表项值存放在x变量中

(2)指定索引号来取表项的内容,例如:

List1.ListIndex=3

x=List1.Text(3)直接从数组List()中读取,例如:

x=List1.List(5)

(1)分析:判别条件为(nMod3=0)And(nMod8=0)

(2)创建应用程序的用户界面和设置对象属性

例5.13

设计一个程序,找出100~800范围内所有能同时被3和8整除的自然数

(3)编写程序代码

编写的“显示”按钮Click事件过程代码:

PrivateSubCommand1_Click()List1.ClearForn=100To800If(nMod3=0)And(nMod8=0)ThenList1.AddItemnEndIfNextn

EndSub

(1)创建应用程序的用户界面和设置对象属性

用户先在左列表框(List1)选择一个或多个选修课,当单击“显示”按钮时,在右列表框(List2)中将显示出用户选中的所有课程。单击“清除”按钮时,将清除右列表框中的内容

(2)编写程序代码例5.14设计一个选课程序PrivateSubForm_Load()List1.AddItem"电子商务"List1.AddItem"网页制作"List1.AddItem"Internet简明教程"List1.AddItem"计算机网络基础"List1.AddItem"多媒体技术“EndSubPrivateSubCommand1_Click()

'"显示"按钮单击事件

List2.Clear

'清除列表框的内容

Fori=0ToList1.ListCount-1

'逐项判断

IfList1.Selected(i)Then

'真时为选定

List2.AddItemList1.List(i)EndIfNextiEndSubPrivateSubCommand2_Click()

'"清除"按钮单击事件

List2.ClearEndSub

允许从已有的选项中进行选择,还允许输入列表中不包括的内容

列表框和文本框的组合具有列表框和文本框的大部分属性和方法。独有的一些属性:

(1)Style属性:该属性取值为0,1或2,分别决定了组合框的三种不同类型

下拉组合框(DropdownCombo)

简单组合框(SimpleCombo)

下拉列表框(DropdownList)5.3.2组合框

(2)Text属性:该属性是用户所选定项目的文本或直接从文本框输入的文本

(1)创建应用程序的用户界面

(2)设置对象属性

组合框的Style属性为0,TabIndex(键序)为0

两个标签;四个命令按钮;

一个文本框Text1,用来显示当前的选修课总课程数例5.15

编制程序,把一批课程名放入组合框中,再对组合框进行项目显示、添加、删除、全部删除等操作

(3)编写程序代码

PrivateSubForm_Load()Combo1.AddItem"电子商务"Combo1.AddItem"网页制作"Combo1.AddItem"Internet简明教程"Combo1.AddItem"计算机网络基础"Combo1.AddItem"多媒体技术"Combo1.Text=""

'置空值

Text1.Text=Combo1.ListCount

'表项个数

EndSubPrivateSubCommand1_Click()

'”添加”

If

Len(Combo1.Text)>0ThenCombo1.AddItemCombo1.TextText1.Text=Combo1.ListCountEndIfCombo1.Text=""Combo1.SetFocus

EndSub

PrivateSubCommand2_Click()

‘“删除”

DimindAsInteger

ind=Combo1.ListIndexIfind<>-1Then

'-1表示无表项

Combo1.RemoveItemind

'删除已选定的表项

Text1.Text=Combo1.ListCountEndIfEndSubPrivateSubCommand3_Click()

‘“全清”

Combo1.ClearText1.Text=Combo1.ListCountEndSubPrivateSubCommand4_Click()EndEndSub

两重循环;采用Print直接在窗体上输出结果PrivateSubForm_Load()

Show

FontSize=15

'设置字号

PrintTab(12);“九九乘法表“

'输出标题

FontSize=12

Print

'输出空行

Fork=0To9

Print

Tab(k*4);k;

'输出第一行数字

Nextk

Print

'换行

Forj=1To9

'外循环

Printj;

Fork=1Toj

'内循环

PrintTab(k*4);j*k;

'输出乘积

Nextk

Print

'换行

NextjEndSub5.4

程序举例

例5.16打印“九九乘法表”

打印“九九乘法表”

(1)分析:模仿十进制整数转换成二进制数的方法(即“除2取余”),采用逐次“除n取余”法(n为2,8或16),即用n不断去除要转换的十进制数,直至商为0为止,将每次所得的余数逆序排列(以最后余数为最前位),即得到所转换的n进制数。

(2)创建应用程序的用户界面和设置对象属性例5.17

输入一个十进制整数,将其转换成二进制数、八进制数或十六进制数

列表框的名称为List1,其List属性设置了三个表项:二进制、八进制和十六进制,ItemData属性设置了相应的值:2,8和16

(3)编写程序代码

功能要求:用户在文本框Text1中输入要转换的十进制数,选择转换进制,单击“转换”按钮(Command1)后,则在文本框Text2中输出转换结果。

“换码表”(Ch变量)的作用PrivateSubCommand1_Click()

'“转换”按钮单击事件过程

DimyAsString,xAsLong,sAsIntegerDimChAsString,nAsIntegerCh="0123456789ABCDEF"

'换码表

IfList1.ListIndex=-1Thenn=2

'未选,则以二进制转换

Elsen=List1.ItemData(List1.ListIndex)EndIfy=""

:x=Val(Text1.Text)Ifx=0ThenText2.Text=""

ExitSubEndIfDoWhilex>0s=xModn

'取余数

x=Int(x/n)

'求商

y=Mid(Ch,s+1,1)+y

'换码,反序加入

LoopText2.Text=yEndSubPrivateSubCommand2_Click()'结束

UnloadMeEndSub示例:(142)10=(8E)16

例如:10=2*5

24=2*2*2*3

76=2*2*19

解题的步骤;程序代码:

PrivateSubForm_Load()Shows=InputBox("请输入一个正整数")x=Val(s):PrintPrintx;"=";Fori=2ToxDoWhile(xModi=0)'求相同因子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论