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

下载本文档

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

文档简介

循环结构程序相关设计四种基本结构结构化程序设计方法的四种基本结构:顺序分支循环过程(函数和子程序)

仅使用四种基本的控制结构来编写程序。

每种控制结构只有一个入口和一个出口。循环结构

在实际工作中,经常遇到一些操作过程并不复杂,但又需要反复进行相同处理的问题,比如,统计本单位所有人员的工资,求全班同学各科的平均成绩等等。解决这些问题从逻辑上说并不复杂,但如果单纯用顺序结构来处理,那将得到一个非常乏味和冗长的程序。循环结构For…Next语句。

While…Wend语句。

Do…Loop语句。For循环语句语法:

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

语句块

[ExitFor]

循环体

语句块

Next循环变量其中:循环变量,必须为数值型变量。 初值、终值、步长,均为数值型表达式。 省略Step子句则步长为1。

For语句、Next语句中的循环变量必须相同。功能:

For:循环变量置初值、确定终值和步长。 判断是进入循环还是跳过循环。

Next:实现循环变量“增值”。 判断是继续循环还是跳出循环。循环终止条件: 循环变量的值沿变化方向“超过”终值。For循环语句For循环的流程图循环变量赋初值、计算终值、步长。

执行循环体

循环变量超过终值?循环变量增值For语句Next语句是是否否循环变量超过终值?看几个简单的例子例1:

DimiAsInteger Fori=1To5 Printi, Nexti注意:在For语句中没有Step子句,缺省的步长是1。 循环变量i的变化方向是从小到大,“超过”终值指的是大于终值。

让我们走一走程序

看几个简单的例子例2:

DimiAsInteger Fori=5To1Step-2 Printi, Nexti注意:步长不是1,For语句中不能省略Step子句。 循环变量i的变化方向是从大到小,“超过”终值指的是小于终值。

让我们走一走程序

看几个简单的例子例3:

DimiAsInteger Fori=1To5Step-3 Printi, Nexti循环体一次也不执行!!!循环次数的计算

在For循环中,循环体的循环次数由初值、终值和步长三个表达式的值确定,计算公式为:

循环次数=Int((终值-初值)/步长)+1For循环主要用于循环次数已知或可以用一个表达式计算出来的题目中。循环变量的用法

循环变量的两个主要作用:用于控制循环的次数;用作数组元素的下标。先看一个例子:

DimiAsInteger Fori=1TO5 Printi, i=i+1 Nexti让我们走一走程序

一个原则在For循环的循环体中 只引用循环变量的值; 不改变循环变量的值。求S=1+2+…+10题目分析:累加类型的题目,使用累加结构的赋值语句。程序如下:

DimsAsInteger,iAsInteger s=0 Fori=1To10 s=s+i Nexti Print“S=”;s求T=1*2*…*10题目分析:累乘类型的题目,使用累乘结构的赋值语句。程序如下:

DimtAsDouble,iAsInteger t=1 Fori=1To10 t=t*i Nexti Print“T=”;tExitFor语句语法:

ExitFor功能:退出当前循环。ExitFor语句一般与If语句一起使用。

Fori= … … If逻辑表达式thenExitFor … … Nexti例题:将1~100间各奇数(1、3、5、7…)顺序累加,直到其和大于100时为止。

DimsAsInteger,iAsInteger s=0 Fori=1To100Step2 s=s+i Ifs>100thenExitFor Nexti Print“S=”;sExitFor语句While…Wend语句语法:

While逻辑表达式 循环体

Wend功能:如果逻辑表达式的值为True,则执行循环体,一直执行到Wend语句。然后再回到While语句,并再一次检查逻辑表达式的值,如果还是为True,则重复执行。如果不为True,执行Wend语句的下一句。例题:将1~100间各奇数(1、3、5、7…)顺序累加,直到其和大于100时为止。

DimsAsInteger,iAsInteger s=0 i=1 Whiles<=100 s=s+i i=i+2 Wend Print“S=“;sWhile…Wend语句让我们走一走程序Do…Loop语句语法:

Do[While逻辑表达式|Until逻辑表达式]

循环体

Loop[While逻辑表达式|Until逻辑表达式]功能:

Do语句标志循环的起点。

Loop语句标志循环的终点。

While子句:当逻辑表达式为True时进入或继续循环。

Until子句:直到逻辑表达式为True时结束循环。Do…Loop语句的三种主要用法:1、Do—If型循环

Do

循环体

If逻辑表达式ThenExitDo

循环体

LoopDo…Loop语句例题:将1~100间各奇数(1、3、5、7…)顺序累加,直到其和大于100时为止。

DimsAsInteger,iAsInteger s=0: i=1 Do s=s+i Ifs>100thenExitDo i=i+2 Loop Print“S=“;sDo…Loop语句让我们走一走程序Do…Loop语句的三种主要用法:2、当型Do循环

DoWhile逻辑表达式 循环体

Loop注意:当型Do循环是前测试型,循环体有可能一次也不执行。Do…Loop语句Do…Loop语句例题:将1~100间各奇数(1、3、5、7…)顺序累加,直到其和大于100时为止。

DimsAsInteger,iAsInteger s=0: i=1 DoWhiles<=100 s=s+i i=i+2 Loop Print“S=“;s让我们走一走程序Do…Loop语句Do…Loop语句的三种主要用法:3、直到型Do循环

Do

循环体

LoopUntil逻辑表达式注意:直到型Do循环是后测试型,循环体最少执行一次。Do…Loop语句例题:将1~100间各奇数(1、3、5、7…)顺序累加,直到其和大于100时为止。

DimsAsInteger,iAsInteger s=0: i=-1 Do i=i+2 s=s+i LoopUntils>100 Print“S=“;s让我们走一走程序循环的五种结构For—If型循环

While—Wend型循环

Do—If型循环当型Do循环直到型Do循环For—If

型循环 For循环变量=初值to终值[Step步长] … … … [If逻辑表达式ThenExitFor] … … … Next循环变量While…Wend型循环 While逻辑表达式

… … … … … … … … … WendDo—If

型循环 Do … … … If逻辑表达式ThenExitDo … … … Loop当型

Do循环 DoWhile逻辑表达式

… … … … … … … … … Loop直到型

Do循环 Do … … … … … … … … … LoopUntil逻辑表达式循环的嵌套

在一个循环体内又包含了一个完整的循环,这样的结构称为多重循环或循环的嵌套。在程序设计时,许多问题要用二重或多重循环才能解决。

For循环、While循环、Do循环 都可以互相嵌套。多重循环的执行过程是外循环执行一次,内循环执行一遍,在内循环结束后,再进行下一次外循环,如此反复,直到外循环结束。

循环嵌套的规则只许嵌套,不许交叉;只许转出,不许转入。

Forii=1To10Forjj=1To20… Nextii Nextjj

Forii=1To10Forii=1To20… Nextii Nextii

Forii=1To10Forjj=1To20… NextjjNextii

Forii=1To10…NextiiForii=1To10…Nextii

循环嵌套的规则

一个简单的二重循环

DimiAsInteger,

jAsInteger

For

i=1To4

Print"",

For

j=1To4

Printi;j,

Nextj

Print

Nexti

一个简单的二重循环打印九九乘法表打印九九乘法表PrivateSubForm_Click()

DimiAsInteger,jAsInteger,strAsString Print:Print:PrintPrintTab(40);"九九乘法表“:Print Fori=1To9 PrintTab(6); Forj=1To9 str=i&"×"&j&"="&i*j PrintTab((j–1)*9+6);str; Nextj:Print NextiEndSub有一个问题81次!记住:内循环的执行次数= 外循环的循环次数×内循环的循环次数内循环总共执行了多少次?1、GoTo语句 形式:GoTo{标号|行号}

作用:无条件地转移到标号或行号指定的语句。 标号是一个标识符,行号是一个整数。2、Exit语句 多种形式:ExitFor、ExitDo、ExitSub、ExitFunction

等。作用:退出某种控制结构的执行。3、End语句 多种形式:End、EndIf、EndSelect、EndWith、

EndType、EndSub、EndFunction等。 作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。

其他辅助控制语句With语句语法: With对象名 语句块

EndWith功能:对某个对象执行一系列的操作,而不用重复对象名称。WithLabel1 .Height=200 Label1.Height=200 .Width=200 Label1.Width=200 .FontSize=22 Label1.FontSize=22 .Caption="MyLabel" Label1.Caption="MyLabel"EndWith循环习题课程序设计三剑客

穷举法递推法迭代法穷举法穷举法的基本思路:穷举所有可能出现的情况,逐一进行测试,判断其是否满足给定的条件。穷举法实现的关键:建立正确的穷举,一般用循环来实现。注意:1、有意义的选项,一项不能少。

2、尽量排除无意义的选项,以减少循环的次数。递推法递推法的基本思路:利用已知的一项或多项数据,推算出新的数据项。然后,再利用这个新的数据项推算出下一个数据项。重复此过程,直到推算出最后结果时为止。递推法实现的关键: 确定递推初值; 建立递推公式。递归法递归的概念:

递归定义——对象利用自己定义自己。

递归调用——过程或函数自己调用自己。递归调用又分为:

直接递归调用——过程或函数直接调用自己。

间接递归调用——过程或函数通过其它过程或函数调用自己。注意:递归调用一般要用if语句来进行控制,使递归过程到某一条件满足时结束。递归法的基本思路:递归法类似于数学证明中的反推法,一般是从结果出发,归纳出后一结果与前一结果的关系,寻找其规律性。递归法实现的关键: 建立递归函数; 确定递归终止条件。递归法题型:累加题目:求S=1+2+3+…+10。程序如下:

DimsAsInteger,iAsInteger s=0 Fori=1To10 s=s+i Nexti Print“S=”;s题型:累加题目:求S=1+2+2+3…+18+19+19+20。程序如下:

DimsAsInteger,iAsInteger s=0 Fori=1To19 s=s+i+(i+1) Nexti Print“S=”;s题型:累加题目:求程序如下:

DimsAsDouble,iAsInteger,tASInteger s=0:t=-1 Fori=1To100 t=t*-1 s=s+t/i Nexti Print“S=”;s题型:累乘题目:求T=1*2*3*…*10。程序如下:

DimtAsDouble,iAsInteger t=1 Fori=1To10 t=t*i Nexti Print“T=”;t题型:累乘题目:程序如下:

DimtAsDouble,iAsInteger t=1 Fori=1To10 t=t*i/(i+1) Nexti Print“T=”;t题型:累加+累乘程序的基本架构:

s=0:t=… Fori=…

程序段,将t置为下一项的值

s=s+t Nexti Print“S=”;s题型:累加+累乘题目:求S=1!+2!+3!+…+10!。程序如下: DimsAsLong,tAsLong DimiAsInteger,jAsInteger s=0 Fori=1To10 t=1 Forj=1Toi t=t*j Nextj s=s+t Nexti Print"S=";s题型:累加+累乘题目:求S=1!+2!+3!+…+10!。使用递推法来做:

1、确定递推初值

T=1 2、建立递推公式

N项=(N-1)项×n题型:累加+累乘题目:求S=1!+2!+3!+…+10!。程序如下:

DimsAsLong,tAsLong,iAsInteger s=1:t=1 Fori=2To10 t=t*i s=s+t Nexti Print"S=";s例题:求S=20+21+22+…+2n,n=63。递推初值:20=1。递推公式:n项=(n-1)项*2

DimsAsDouble,tAsDouble,iAsInteger s=1:t=1 Fori=1To63 t=2^i/t*2 s=s+t Nexti Print"S=";s题型:累加+累乘

题型:判断m能否被n整除注意VB中两个独特的算术运算符:

Mod 取余

\ 整除例如:

10Mod3 运算结果

1 10\3 运算结果

3判断m能否被n整除的方法:

mModn=0

题型:判断m能否被n整除例题:求出100

以内所有能被3

和4

同时整除的数。程序如下:

DimiAsInteger Fori=1To100 IfiMod3=0AndiMod4=0ThenPrinti; Nexti例题:求2000~2050年之间的所有闰年。闰年的条件是: (1)能被4整除,但不能被100整除的年份是闰年; (2)能被100整除,又能被400整除的年份是闰年。程序如下:

DimiAsInteger Fori=2000To2050 IfiMod4=0AndiMod100<>0ThenPrinti; IfiMod100=0AndiMod400=0ThenPrinti; Nexti

题型:判断m能否被n整除VB的取子串函数语法:

Left(串表达式,n)

函数值 功能:取字符串左边n个字符。示例: Left(“ABCDEFG”,3) “ABC”语法:

Mid(串表达式,n1[,n2])

功能:在字符串中从n1开始向右取n2个字符。示例:

Mid(“ABCDEFG”,2,3) “BCD”语法:

Right(串表达式,n)功能:取字符串右边n个字符。示例:

Right(“ABCDEFG”,3) “EFG”

题型:打印图形

题型:打印图形PrivateSubForm_Click()DimsAsString*8,iAsIntegers="********"Print:PrintFori=1To8 PrintTab(10+i);sNextiEndSub

题型:打印图形分析:1)首先确定图形中心线位置——第20个字符处。

2)将第n行的起始打印位置,表示为行号n的函数,起始打印位置=F(21-n)。

3)将第n行打印星号的个数,表示为行号n的函数,星号个数=F(2*n-1)。

4)可先将一个有十五个星号的字符串赋给串变量S,打印时取其子串输出。

题型:打印图形程序如下:PrivateSubForm_Click() DimsAsString,iAsInteger s="***************" Fori=1To8 PrintTab(21–i);Left(s,2*i–1) NextiEndSub

题型:打印图形

题型:打印图形程序如下:PrivateSubForm_Click()DimsAsString,iAsIntegers="0123456789"Print:PrintFori=1To10PrintTab(21-i);String(2*i-1,Mid(s,i,1))NextiEndSub

题型:打印图形

题型:打印图形程序如下:PrivateSubForm_Click()DimiAsIntegerPrint:PrintFori=1To10PrintTab(21-i);String(2*i-1,Chr(47+i))NextiEndSubVB中的取整函数语法:

Int(数值表达式) Fix(数值表达式) Round(数值表达式[,小数点右边应保留的位数])功能:1)如果数值表达式的值为正,Int和Fix都会删除其小数部份而返回剩下的整数。

2)如果数值表达式的值为负,则Int返回小于或等于其值的第一个负整数,而Fix则会返回大于或等于其值的第一个负整数。

3)Round将数值表达式的值四舍五入到n位小数。例如:

Int(3.4) 3 Fix(3.4) 3 Int(-3.4) -4 Fix(-3.4) -3 Round(-3.3456,1) -3.3 Round(-3.3456,2) -3.35VB中的取整函数034-3-4题型:分拆数字例题:求0~999之间所有的“水仙花”数。例如:153=1^3+5^3+3^3

DimiAsInteger,aAsInteger,bAsInteger,cAsInteger Fori=0To999 a=Int(i/100) b=Int((i-a*100)/10) c=i-a*100-b*10 Ifi=a*a*a+b*b*b+c*c*cThenPrinti; Nexti题型:分拆数字思考题求1~100之间所有的“同构数”。“同构数”是这样一种数:它出现在它的平方数的右端。例如:5的平方是25,5是25中右端的数,5就是同构数。25也是一个同构数,它的平方是625。题型:数列例题:求裴波那契数列1,1,2,3,5,8,…的前20项。 递推初始条件: F1=1,F2=1

。 递推公式: Fn=Fn-2+Fn-1

。递推过程:

a=1 b=1 c=2 a=1 b=2 c=3 a=2 b=3 c=5 … … …例题:求裴波那契数列1,1,2,3,5,8,…的前20项。

DimaAsInteger,bAsInteger,cAsInteger a=1:b=1 Printa;b; Fori=3To20 c=a+b Printc; a=b:b=c Nexti题型:数列例题:求e,直到前后两项之差小于10-4为止。

DimeAsDouble,m1AsDouble,m2AsDouble,nAsInteger e=2:m2=1:n=1 Do n=n+1 m1=m2 m2=m1/n e=e+m2 LoopUntilm1-m2<0.0001 Print"e=";e

题型:级数例题:求S=20+21+22+…+2n,n=63。 递推初值:20=1。递推公式:n项=(n-1)项*2

DimsAsDouble,tAsDouble,iAsInteger s=1:t=1 Fori=1To63 t=t*2 s=s+t Nexti Print"S=";s第一步:

求出通项公式。第二步:

求出第n项与n-1项之比k

。第三步:

建立递推公式:n项=k*(n-1)项。

题型:级数例题:求Sin(x)=x/1–x3/3!+x5/5!–x7/7!+…,n=20。第一步,通项公式。第n项=第二步,第n项与n-1项之比。k=第三步,递推公式。n项= (n-1)项

题型:级数 DimSinXAsDouble,xAsDouble,tAsDouble DimiAsInteger x=InputBox(“X=”,“输入框") SinX=x:t=x Fori=2To20 t=t*(-1)*x*x/(2*i-2)/(2*i-1) SinX=SinX+t Nexti Print"x=";x,"Sin(x)=";SinX

题型:级数随机函数Rnd函数语法:

Rnd功能:

Rnd函数返回均匀分布在[0,1)区间上的随机数,类型为Single。(0≤Rnd<1

)Randomize语句语法:

Randomize功能:利用系统计时器的值初始化随机数生成器。随机函数

DimiAsInteger

Print:Print

Fori=1To50

IfiMod5=0Then

PrintRound(Rnd,4)

Else

PrintRound(Rnd,4),

EndIf

Nexti随机函数

两次运行程序得到的随机数,其序列是相同的。随机函数

DimiAsInteger

Print:Print

Randomize ‘随机函数初始化语句

Fori=1To50

IfiMod5=0Then

PrintRound(Rnd,4)

Else

PrintRound(Rnd,4),

EndIf

Nexti随机函数

第一次运行程序得到的随机数:

第二次运行程序得到的随机数:随机函数使用以下公式可产生均匀分布在某个区间上的随机整数:

Int((UpperBound-LowerBound+1)*Rnd+LowerBound)这里,UpperBound是随机数范围的上限,而LowerBound是随机数范围的下限。例如:

[0,10] Int(11*Rnd) [100,120] Int(21*Rnd+100) [10,99] Int(90*Rnd+10)随机函数随机函数题目:利用随机函数求π。(辅助图形:1/4单位圆)1,10,0随机函数1/4单位圆的面积:

R*R*π/4=1*1*π/4单位正方形的面积:

1*1=1另外: 落在圆内的点数=m,总点数=n因此:

Π=4*m/n随机函数

DimmAsLong,nAsLong,iAsLong

DimxAsSingle,yAsSingle

n=InputBox("N=","输入对话框"):m=0

Fori=1Ton

x=Rnd:y=Rnd

Ifx*x+y*y<=1Thenm=m+1

Nexti

Print"PI=";4*

温馨提示

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

评论

0/150

提交评论