版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5循环结构程序设计计算机具有速度快、精度高的特点,特别适于进行重复性的工作,重复次数越多越能显示它的威力。所以,使用计算机时,应尽量把问题归纳为简单而有规则的重复运算和操作,以充分发挥计算机的特长。
采用循环程序可以解决一些按一定规则重复执行的问题。例如,统计一个班几十名学生,甚至全校几千名学生的学期成绩,如求平均分、不及格人数等
本章主要内容
第5章循环结构程序设计Do...LoopFor...Next退出循环出口语句(Exit)循环语句多重循环列表框与组合框常用算法程序举例
循环是指在指定的条件下多次重复执行一组语句被重复执行的一组语句称为循环体VB提供的循环语句有
For...NextDo...LoopWhile...WendForEach...Next最常用的是For...Next和Do...Loop语句
假真循环体循环条件
For...Next循环主要是用在知道循环次数的情况下;若事先不知道循环次数,可以使用当型循环Do...Loop1.For...Next循环语句(计数控制)
For循环变量=初值To终值[Step步长值]
循环体
Next循环变量
2.DoWhile...Loop语句(条件控制)
Do[{While|Until}条件]
循环体Loop5.1循环语句示例
求S=1+2+3+…+8s=0Fork=1To8s=s+kNextkPrint"s=";s程序运行结果如下:
s=36n=1:s=0DoWhilen<=8s=s+nn=n+1LoopPrint"s=";s例5.2K为循环变量专设变量n来控制循环
例5.2求S=1+2+3+…8,把结果显示在窗体上。
s=0
'累加器初值为0
Fork=1To8s=s+k
'累加器,在原有和的基础上每次加一个数
NextPrint"s=";s程序执行结果是:s=36
分析累加器s=s+k旧值。前n项之和新加的数k=1s
←
s+k
01k=3s
←
s+k1+23k=2s←
s+
k
12k=8s
←
s+k1+2+…7
8……算法:通常采用重复运算来解决问题累加、累乘等如用级数π/4=1-1/3+1/5-1/7+……来求π设置循环变量
使每次运算变量值有所不同控制循环计数控制或条件控制
循环结构程序的实现求S=1+2+3+…+8s=0Fork=1To8s=s+kNextkPrint"s=";s
把长式子改为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例5.3
例5.3
T=8!=1×2×3×…8,把结果显示在网页上。
t=1
'累乘器初值为1
Forc=1To8t=t*c
'累乘器,在原有积的基础上每次乘一个数
NextPrint"T=";t程序执行结果是:T=40320分析c=1t
←
t*c
11c=3t
←
t*c
1*23c=2t
←
t*c
12c=8t
←
t*c
1*2*
…78……累乘器t=t*k旧值。前n项之积新乘的数
采用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项来进行计算)例5.4
Fort=1To3Ift<=1Thena=3Ift<=2Thena=2Ift<=3Thena=1Printa;NexttPrinttA.3333B.1234C.3214D.1114
下列程序的运行结果是?想一想思考题DFort=1To3Ift>=1Thena=3Ift>=2Thena=2Ift>=3Thena=1Printa;NexttPrinttA.3334B.1234C.3214D.1114
下列程序的运行结果是?想一想思考题C
运行下面程序后,循环体执行了______次。
i=0:n=1DoWhilei<32i=(i+1)*(i+1)n=n+1LoopPrintnA.2B.3C.4D.5请回答问题想一想思考题Cs="ABCDEFGHIJ":c=""Fork=2ToLen(s)Step3a=Mid(s,k)c=c+Left(a,1)NextkPrintc
A.BDFB.CFIC.BEHD.BEI
下列程序的运行结果是?想一想思考题C
采用DoWhile...Loop语句
采用Print直接在窗体上输出结果,程序代码:PrivateSubForm_Load()DimnAsInteger,sAsLongShown=1:s=0DoWhilen<=100s=s+n*nn=n+1LoopPrint"s=";sEndSub
程序运行结果:
S=338350例5.5求S=12+22+…+1002例5.5
“辗转相除法”算法:求出m/n余数p,若p=0,n即为最大公约数;若p非0,则把原来的分母n作为新的分子m,把余数p作为新的分母n继续求解设计步骤如下:
(1)创建应用程序的用户界面和设置对象属性例5.7输入两个正整数,求它们的最大公约数例5.7
编写的“计算”按钮Click事件过程代码如下:PrivateSubCommand1_Click()DimmAsInteger,nAsInteger,pAsIntegerm=Val(Text1.Text):n=Val(Text2.Text)Ifm<=0Orn<=0ThenMsgBox("数据错误!")EndEndIfDop=mModnm=nn=pLoopWhilep<>0Text3.Text=mEndSub
若输入的m和n的值为85和68,则运行结果如上图语句格式:
While条件循环体Wend功能:当条件成立(为真)时,执行循环体;当条件不成立(为假)时,终止循环。本语句与上述DoWhile...Loop循环语句相似,其差别是:While...Wend语句中不能使用Exit语句跳出循环。5.1.3While...Wend循环语句
用于提前退出循环
格式:Exit{For|Do}
功能:直接从For循环或Do循环中退出
当程序运行时遇到Exit语句时,就不再执行循环体中的任何语句而直接退出,转到循环语句(Next、Loop)的下面继续执行5.1.4循环出口语句
把每次输入的数累加。当输入-1时结束程序的运行
创建应用程序的用户界面和设置对象属性
编写程序代码
PrivateSubForm_Load()ShowSum=0DoWhileTrue'条件为真,循环无终止进行下去x=Val(InputBox("请输入要加入的数(-1表示结束)","输入数据"))Ifx=-1ThenExitDoEndIfSum=Sum+xText1.Text=SumLoopMsgBox("累加运算结束")EndSub
以-1作为“终止循环标志”例5.8设计一个“加法器”程序例5.8
多重循环是指循环体内含有循环语句的循环
例5.9多重循环程序示例程序运行结果
PrivateSubForm_Load()15Show16
Fori=1To3‘外循环17
Forj=5To7’内循环25Printi,j26Nextj27Nexti35EndSub3637
注意内、外循环层次要分清,不能交叉
5.2
多重循环例5.9
本例可采用两重循环来实现。外循环控制输出7行,内循环控制每行输出要求的字符数。在进入内循环之前,使用PrintTab()来对起始输出位置定位,退出内循环后,使用Print来控制换行。例5.10
编一程序,输出下列所示的图形例5.10
采用Print直接在窗体上输出结果,程序代码如下:
PrivateSubForm_Load()
ShowFori=1To7PrintTab(10-i);Forj=1To2*i-1PrintChr(i+48);NextjPrintNextiEndSub
PrintChr(i+48)与Printi有所不同
(1)分析:设一元硬币为a枚,二元硬币为b枚,五元硬币为c枚,可列出方程
a+b+c=10
a+2b+5c=25
采用两重循环,外循环变量a从0~10,内循环变量b从0~10
(2)创建应用程序的用户界面例5.11
取一元、二元、五元的硬币共十枚,付
给25元钱,有多少种不同的取法?例5.11
(3)编写程序代码
程序通过Print方法把处理结果输出在标签的下方。PrivateSubForm_Load()ShowCurrentX=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执行下列程序段后,变量t的值是______。t=0Forx=2To3n=1DoWhilen<=xt=t+nn=n+1LoopNextxA.8 B.9C.10 D.11
请回答问题想一想思考题B
请回答问题想一想思考题显示结果为:16执行下列程序段后,显示的结果是______s=0Form=1To4Step2n=1DoWhilen<=ms=s+nn=n+1LoopNextmPrints+m+n例5.12a5.3列表框与组合框列表框和组合框都能为用户提供若干个选项,供用户从中任意选择5.3.1列表框(ListBox)
List属性:字符型数组,存放列表框的表项数组的下标从0开始。例如,List1.List(0)的值为“教授”,List1.List(1)的值为“副教授”。ListCount属性:表项数目Text属性:当前选定表项的文本内容ListIndex属性:返回已选定表项的顺序号(索引)。若未选定任何项,则ListIndex的值为-1Selected属性:逻辑型数组,表示列表框中某一表项是否被选中例5.12b
假设列表框List1中有四个表项,并已选定第2项,则有:List1.ListIndex为1List1.Text的值为”副教授”List1.Selected(1)为True
方法
(1)AddItem方法:用于把一个列表项加入列表框
格式:[对象.]AddItem列表项[,索引]
举例:List1.AddItem"海南省",28(2)Clear方法:用于清除列表框中的所有项目(3)RemoveItem方法:用于删除指定的列表项采用以下方法,可为列表框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)=“助教”
列表框表项的输出
(1)用鼠标单击列表框内某一表项,则该表项值存放在Text属性中。例如:x=List1.Text′把表项值存放在x变量中
(2)指定索引号来取表项的内容,例如:
List1.ListIndex=3
x=List1.Text(3)直接从数组List()中读取,例如:
x=List1.List(5)
(1)分析:判别条件为(nMod14=0)And(nMod10=8)
(2)创建应用程序的用户界面和设置对象属性
例5.12设计一程序,找出三位数中能被14整除且个位数为8的自然数,把这些自然数显示在列表框中,其个数显示在标签中。例5.12
(3)编写程序代码
编写的“显示”按钮Click事件过程代码:PrivateSubCommand1_Click()´“显示”List1.ClearForn=100To999If(nMod14=0)And(nMod10=8)ThenList1.AddItemnEndIfNextnLabel1.Caption="符合条件的自然数的个数为:"_&List1.ListCountEndSub
(1)创建应用程序的用户界面和设置对象属性
用户先在左列表框(List1)选择一个或多个选修课,当单击“显示”按钮时,在右列表框(List2)中将显示出用户选中的所有课程。单击“清除”按钮时,将清除右列表框中的内容
(2)编写程序代码例5.13设计一个选课程序MultiSelect属性值为2例5.13PrivateSubForm_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)创建应用程序的用户界面和设置对象属性
窗体上含有Combo1,Combo2,Combo3三个组合框,其Style属性从左至右分别为0、1和2,即除了“内存”容量大小只能从列表中选择外,其余内容既可以从列表中选择,也可以由用户输入。在属性窗口中输入相关数据
例5.14在窗体上设置3个组合框,用于选择微机部分配置,
包括CPU/主频、硬盘及内存。
Style=0下拉组合框Style=1简单组合框Style=2下拉列表框图片框设计界面运行界面例5.14(2)编写程序代码PrivateSubForm_Load()Combo1.Text=Combo1.List(0)Combo2.Text=Combo2.List(0)Combo3.Text=Combo3.List(0)EndSubPrivateSubCommand1_Click()
'“确定”按钮的事件过程Picture1.ClsPicture1.Print"微机的基本配置"Picture1.PrintString(20,"=")Picture1.Print"CPU:";Combo1.TextPicture1.Print"硬盘(GB):";Combo2.TextPicture1.Print"内存(MB):";Combo3.TextEndSub5.4常用算法
算法是对某个问题求解过程的描述。常用的算法有:穷举法、递推法、排序法、查找法、递归法等。
1.累加、连乘和计数累加(如s=s+k)是在原有和的基础上一次一次地每次加一个数,连乘(如t=t*c)则是在原有积的基础上一次一次地每次乘一个数。计数通常每次增加的值不是一个加数,而是1。
例5.15找出100~999三位数中的“水仙花”数,计算其个数。所谓水仙花数,是指各位数字立方和等于该数本身,如153是一个水仙花数,因为153=13+53+33。
程序中采用计数方法n=n+1(或称“计数器”)来记录有多少个“水仙花”数。找水仙花数PrivateSubForm_load()DimkAsInteger,aAsInteger,bAsIntegerDimcAsInteger,nAsIntegeShown=0Print"三位数的水仙花数是:"Fork=100To999a=Int(k/100)'求百位数b=Int((k-100*a)/10)'求十位数c=kMod10'求个位数Ifk=a^3+b^3+c^3ThenPrintk‘输出水仙花数n=n+1'对满足条件的数进行计数EndIfNextkPrint"一共有"&n&"个水仙花数"EndSub例5.152.穷举法“穷举法”也称为“枚举法”,它是计算机解题常用的一种方法。其做法是:从所有可能解中,逐个进行试验,若满足条件,就得到一个解,否则不是。直到条件满足或判别出无解为止。
例5.16用100元买100只鸡,母鸡3元1只,小鸡1元3只,问各应买多少只?下面采用穷举法来解此题。对于此题,令母鸡为x只,小鸡为y只,根据题意可知y=100-x,开始先让x初值为1,以后逐次加1,求x为何值时,条件3x+y/3=100成立。如果当x达到30时还不能使条件成立,则可以断定此题无解。因为买的母鸡数不可能超过30,超过30就不能买到100只鸡。100元买100只鸡PrivateSubForm_Load()DimxAsInteger,yAsIntegerShowForx=1To30y=100-xIf3*x+y/3=100ThenPrint“母鸡只数为:”;x,Print“小鸡只数为:”;yEndIfNextxEndSub例5.165.5程序举例
例5.18
从键盘输入一个正整数,然后把该数的每位数字按逆序输出。例如:输入3485,则输出5843;输入100000,则输出000001。以下采用两种不同解法。(1)数值处理方法①通过表达式xMod10取出该整数x的个位数并输出,如对于x=3485,则取出5;②利用赋值语句x=x\10截去x的个位数,如对于x=3485,处理后x=348;③重复执行①和②,直到x<10和最后输出一次x。DimxAsLongx=Val(InputBox("请输入一个正整数"))DoWhilex>=10PrintxMod10;x=x\10Loop例5.18A(2)字符串处理方法
把该整数作为一个数字字符串,从字符串后部往前逐个取出字符,即可实现按逆序输出。DimxAsStringx=InputBox("请输入一个正整数")
'把该数以字符串方式赋给变量xFork=Len(x)To1Step-1PrintMid(x,k,1);
'从后部往前逐个取出字符并显示Nextk例5.18B例5.19求解s=1!+2!+3!+…+10!的值采用两种不同解法
(1)解法一:采用两重循环,外循环10次,每次循环计算一次阶乘,把每次阶乘值累加起来,即得求解结果。DimsAsLong,tAsLongs=0Forj=1To10'计算10个阶乘t=1'计算1个阶乘前,先赋初值Fork=1Toj'计算j!,需要循环j次t=t*k'连乘j次Nextks=s+t'把每次计算得到的阶乘值t累加NextjPrints例5.19A(2)解法二这10个阶乘有一个特点,后一个阶乘为上一个阶乘再乘以一个数,如2!=1!*2,3!=2!*3,4!=3!*4,…,k!=(k-1)!*k。根据这一特点,程序只须采用单重循环就可以求解。把该整数作为一个数字字符串,从字符串后部往前逐个取出字符,即可实现按逆序输出。DimsAsLong,tAsLongs=0t=1Fork=1To10'循环10次,每次求1个阶乘t=t*k'求k!,其值等于(k-1)!*k,即t*ks=s+t'每次加入一个阶乘值tNextkPrints例5.19B
(1)创建应用程序的用户界面
(2)设置对象属性
组合框的Style属性为0,TabI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光纤维护外包合同
- 公司强迫签外包合同
- 公司逼签外包合同
- 写字楼服务外包合同
- 创伟外包合同
- 办公耗材外包合同
- 勘查外包合同
- 医院上班签外包合同
- 卸车工外包合同
- 后勤管理外包合同
- NITON-XL3t(美国力通-矿石元素分析仪)用户手册-中文
- DL∕T 1952-2018 变压器绕组变形测试仪校准规范
- 自动控制元件课件
- 广东省普通高中学生档案
- 安徽汇宇能源发展有限公司25万吨年石脑油芳构化项目环境影响报告书
- 建筑工程项目汇报ppt
- 人教版一年级数学下册《第8单元 总复习 第1节 数与代数》课堂教学课件PPT小学公开课
- 火力发电厂金属技术监督规程解读
- 特种加工技术课件第11章 高压水射流加工
- YS/T 96-2009散装浮选铜精矿中金、银分析取制样方法
- 超市经营服务投标方案
评论
0/150
提交评论