VB课件第5章 循环结构程序设计Word格式.docx
《VB课件第5章 循环结构程序设计Word格式.docx》由会员分享,可在线阅读,更多相关《VB课件第5章 循环结构程序设计Word格式.docx(22页珍藏版)》请在冰点文库上搜索。
![VB课件第5章 循环结构程序设计Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/de8d5ff1-2600-4f5c-b2a3-f9ec4210d789/de8d5ff1-2600-4f5c-b2a3-f9ec4210d7891.gif)
Whilex<
s=s+x
x=x+1
------------------------------------------------------------------------------------
例5_1_1b计算
s=s*x
例5_1_2从键盘上输入一串字符(每次输入一个字符),以“!
”结束,并对输入字符中的字母个数和数字个数进行统计。
分析:
需要输入的字符个数没有指定,停止计数的条件是输入字符为“!
”,所以用while…wend语句是合适的。
程序中,变量ch接受键盘输入的字符,变量T1,T2分别用于统计字母,数字的个数。
PrivateSubcommand1_click()
Dimch$,T1%,T2%
Cls
T1=0:
T2=0
Whilech<
>
"
!
"
ch=InputBox("
请输入一个字符:
Ifch>
="
a"
Andch<
z"
Orch>
A"
Z"
Then
'
ifLcase(ch)>
="
andLcase(ch)<
T1=T1+1
ElseIfch>
0"
9"
T2=T2+1
EndIf
Wend
Print"
字母个数:
T1
数字个数:
T2
EndSub
5、说明
1.While…Wend循环语句先对“条件”进行测试,然后才决定是否执行循环体。
如果进入循环体之前,“条件”为False,则一次也不执行循环。
因此,进入循环体之前应正确设置循环条件。
2.循环体内应该有修改循环条件的语句,使得循环能正常执行和终止。
否则,会出现死循环,这是程序设计中容易出现的错误,应当尽量避免。
一旦出现“死循环”现象,可按下“Ctrl+Break”键强行退出。
2、Do…Loop语句
Do循环有两种:
1、先判断后执行
DoWhile|Until条件
...
Loop
2、先执行后判断
Do
LoopWhile|Until条件
一、先判断条件形式
1.格式:
Do[While|Until<
]
语句块>
Loop
2.功能:
While当条件为True时循环。
Until当条件首次为True时退出。
3.举例
例5_2_1用Dowhile……Loop改写例5_1_1
n=val(inputbox(“inputn”))
k=1
Dowhilek<
=n
s=s*2
k=k+1
Loop
print“s=”;
s
可以看出,DoWhile……Loop和While…….Wend语句功能相同。
例5_2_2输入一个正整数(≥3),判断其是否为一素数。
所谓素数是指除了1和该数本身外,不能被任何整数整除的数。
可以依次用2~X-1作除数去除X(X>
=3),若X不能被其中任何一个数整除,则X为素数。
PrivateSubCommand1_Click()
Dimx&
Cls
x=InputBox("
输入一个整数X,(X>
=3)"
i=2
flag=True
DoWhilei<
=x–1‘理论证明判断至
即可,即SQR(x)
IfxModi=0Thenflag=False
i=i+1
IfflagThen
Printx&
是一个素数。
Else
不是一个素数。
EndIf
EndSub
例5_2_3计算S=1+2+3+……100
分析:
Xi+1=XI+1
PrivateSubForm_Activate()
Dims&
x&
DoWhilex<
=100‘也可以用DoUntilx>
100
s=s+x
x=x+1
例5_2_4求SIN(x)的级数展开的值。
其中:
xx3x5x7
Y=sinx=─-─+─-─+…………
1!
3!
5!
7!
有以下关系:
Pn=Pn-1
(n=2,……)
P1=X
Dimy#,x#,p#,n%
x0=Val(InputBox("
输入角度值X"
))
输入N的值"
x=x0*3.14159265359/180‘将角度值转换为弧度值
p=x
y=p
p=p*(-x*x/((2*i-1)*(2*i-2)))
y=y+p
i=i+1
sin("
&
x0&
)="
y
例5_2_5打印图形,如下:
*
***
*****
*******
*********
FontSize=30
i=1
=5
PrintTab(10-i);
String(2*i-1,"
*"
例5_2_6打印图形,如下:
一江春水向东流
江春水向东流
春水向东流
水向东流
向东流
东流
流
FontSize=20
A="
一江春水向东流"
b=Len(A)
DoWhileb>
0‘也可用语句DoUntilb<
=0
PrintTab(20-2*b);
Right(A,b)
函数Left、right、mid、len把一个汉字或全角字符中非字母和
‘数字的字符视为一个字符位,
'
但是函数Tab、Space仍把一个汉字作为两个字符位
b=b-1
二、后判断条件形式
Do
Loop[While|Until<
2.功能:
至少执行一次循环。
Until当条件为True时退出。
3.举例
例5_2_7[例5_2_3计算S=1+2+3+……100]
程序:
LoopWhilex<
=100
例5_2_8输入有效数字位数,利用下韦达公式(法国数学家1593年)计算圆周率π的近似值
π=
分母通项公式为:
Pn=
前n项的乘积为:
Yn=2Yn-1/Pn(n=2,3,….)
P1=0,Y1=2
(使用迭代法,且精确至|Yn-Yn-1|<
ε)
Dimp#,y#,s#,m%
m=InputBox("
输入有效数字位数"
p=0:
y=2
s=y
p=Sqr(2+p)
y=2*y/p
LoopUntilAbs(y-s)<
10^-m
f=String(m,"
#"
有效位数到"
m&
位的π的近似值是:
_
vbCrLf&
Format(y,"
0."
f)
例5_2_9求两个正整数M和N的最大公约数。
(龚P91例4.12)
采用“辗转相除法”的思想。
(南宋秦九韶)
(1)先将M,N中的较大数→a,较小数→b
(2)用大数a除以小数b,余数为R;
(3)若R=0,则b就是它们的最大公约数;
若R≠0,则a←b,b←R,重复上
(2)(3)过程,直至R=0
(4)最后得到的a就是最大公约数。
Dima,b,r,m&
n&
M="
N="
Ifm<
nThent=m:
m=n:
n=t‘该句可省略
a=m:
b=n
r=aModb
a=b
b=r
Loopuntilr=0
Printm;
和"
n;
的最大公约数是:
a
3For…Next语句
For循环也称计数循环。
常用于循环次数已知的程序结构中。
1、格式:
For<
循环变量>
=<
初值>
To<
终值>
[Step<
步长>
]
[<
循环体>
Next[<
2、说明:
(1).For格式中有多个参量,这些参量的含义如下:
·
循环变量:
亦称"
控制变量"
。
它是一个数值变量,但不能是下标变量或记录元素。
初值:
循环变量的初值,它是一个数值表达式。
终值:
循环变量的终值,它也是一个数值表达式。
步长:
循环变量的增量,是一个数值表达式。
其值可以是正数(递增循环)或负数(递减循环),但不能为0。
如果步长为1,则可略去不写。
循环体:
在For语句和Next语句之间的语句序列,可以是一个或多个语句。
Next:
循环终结语句,在Next后面的"
循环变量"
与For语句中的"
循环变量"
必须相同。
(2).For循环语句的执行过程是:
首先把"
初值"
赋给"
接着检查"
的值是否超过终值,如果超过就跳出循环,执行Next后继语句;
否则执行"
循环体"
然后把"
循环变量+步长"
的值赋给"
重复上述过程。
这里所说的"
超过"
有两种含义,即大于或小于。
当步长为正值时,检查循环变量是否大于终值;
当步长为负值时,判断循环变量的值是否小于终值。
3、举例
例5_3_1[例5_2_3计算S=1+2+3+……100]
例5_3_2[例5_2_5打印三角形图形]
例5_3_3求斐波那契数列的前40项值。
即:
1,1,2,3,5,8,13,……
Dimf&
f1&
f2&
f1=1
f2=1
Printf1,f2,
Fori=3To40
f=f1+f2
f1=f2
f2=f
Printf,
IfiMod5=0ThenPrint
Nexti
例5_3_4.梯形法求定积分I=
y=f(x)
x
ab
求定积分从几何概念上求f(x)下的面积,将[a,b]均分为n等份,则有n+1个分点:
a=x0<
x1<
…<
xn=b;
每两个邻点间距:
h=(b-a)/n;
每个点的函数值为:
y0=f(a)
y1=f(a+h)
…………
yn-1=f(a+(n-1)h)
yn=f(b)
把每个小分段都看成小梯形,分别算出它们的面积,然后相加,就近似求得积分I。
hn-1f(a)+f(b)n-1
I≈━━∑(yi+yi+1)=h[━━━━━+∑f(a+ih)]
2i=02i=1
试编写求半径为1的园面积。
I=
4
dX的程序。
Dimn&
a%,b%,k&
i#,h!
n=Val(InputBox("
n="
b=1
a=0
h=(b-a)/n
i=(Sqr(1-a*a)+Sqr(1-b*b))/2
Fork=1Ton-1
x=a+k*h
i=i+Sqr(1-x*x)
Nextk
i=4*i*h
i="
i
4、多重循环与循环的退出
一、多重循环
在一个循环体中嵌套另一个循环结构,称为多重循环。
VB没有具体规定嵌套层数。
但是要注意嵌套时,不能交叉嵌套。
举例
例5_4计算S=
Dimn#,m#,i#,j#,s#
m="
Fori=1Ton
Forj=1Tom
s=s+i*j
Nextj,i
Prints
例5_4_1“水仙花数”是指一个3位数,其各位数的立方和等于该数。
例如:
153=13+53+33,求100到999之间的所有水仙花数。
Fori=1To9
Forj=0To9
Fork=0To9
p1=i*100+j*10+k
p2=i^3+j^3+k^3
Ifp1=p2ThenPrinti;
j;
k
Nextk
Nextj
例5_4_2编写输出九九乘法口诀表程序。
(龚P92例4.13)
Forx=1To9
PrintTab((x-1)*10+2);
Fory=xTo9
n=x&
y&
x*y
PrintFormat(n,"
@@@@@@@@@@"
);
Nexty
Print
Nextx
例5_4_3(例5_3_2[例5_2_5打印三角形图形])
例5_4_6(龚P98例4.16)百元买百鸡问题。
假定公鸡每只2元,母鸡每只3元,小鸡每只5角。
现有一百元钱买一百只鸡,编程列出所有方案。
设母鸡、公鸡、小鸡各为X、Y、Z。
根据题意,有:
X+Y+Z=100
3*X+2*Y+Z/2=100
X<
34
Y<
=50
(枚举法)
y&
z&
母鸡"
"
公鸡"
小鸡"
Forx=0To33
Fory=0To50
z=100-x-y
If3*x+2*y+z/2=100Then
Printx,y,z
二、循环的退出
除了当条件满足时退出循环外,VB还提供了“ExitDo”和“ExitFor”两个语句,可以根据需要,在循环体中退出循环。
1、格式:
Exitdo
ExitFor
2、举例
例5_4_4显示3~100之间的所有素数。
(素数:
只能被1或其本身整除的自然数)
PrivateSubForm_Activate()
Forx=3To100Step2
flag=True
Forn=2ToSqr(x)
IfxModn=0Thenflag=False:
Nextn
IfflagThenPrintx
例5_4_5判断回文数(例如:
121,1221,12321等)
Dima$,w%,flag%
a=Text1
w=Len(a)
Fori=1Tow\2
IfMid(a,i,1)<
Mid(a,w-i+1,1)Then
flag=False
Text2=a&
是回文数"
不是回文数"
PrivateSubCommand2_Click()
End
各种循环语句的比较
语句形式
特点
循环条件
终止条件
循环次数
While…Wend
先判断
True
False
≥0
DoWhile…loop
DoUntil…Loop
Do…LoopWhile
后判断
≥1
Do…loopUntil
For…Next
循环变量
递增:
≤终值
递减:
≥终值
终值
<