VB基本语句(8学时).ppt
5.1 分支结构,5.3 程序示例,5.2 循环结构,信电工程学院 Visual Basic 程序设计,第五章 基本的控制结构,5.4 二级考试部分试题,先对条件测试,根据测试的结果选择执行不同的分支,1.If条件语句,2.Select Case 结构,Visual Basic 程序设计,5.1 选择结构,3.条件函数,例:If score=60 Then Print 祝贺你考试通过!End If Print“继续努力!”等价于:If Score=60 Then Print“祝贺你考试通过!”Print“继续努力!”,1.IfThen 结构,格式:(1)If 条件 Then(A组语句)EndIf,(2)If 条件 Then 语句,执行规则:若条件成立,执行A组语句;条件不成立,跳过A组语句.,5.1.1 If条件语句,使用前提:条件成立时,A组语句中只一条执行语句,例:If score=60 Then Print score Print 祝贺你考试通过!End If Print“继续努力!”,练习,.,1.IfThen结构,例1:输入两个数,分别放在x和y变量中,比较它们大小,然后将大数放在x中,小数放在y中。,x%=Text1.textY%=Text2.textIf x y Then y=x x=yEnd IfPrint x,y,t=x x=y y=t,思考:3个数的排序如何实现?,5.1.1 If条件语句,例:If score=60 Then Print“祝贺你考试通过!”Else Print“考试未通过.”End If Print 继续努力!,2.IfThenElse 结构,格式:If 条件 Then A组语句 Else B组语句 END If,执行规则:条件成立,执行A组语句,条件不成立,执行B组语句,例2:计算分段函数:(可用双分支和两个单分支分别实现),5.1.1 If条件语句,2.IfThenElse 结构,例3:已知三边的长,设计 求面积的程序(P64)。,开始,5.1.1 If条件语句,例4:(思考)输入二级考试成绩,要求显示对应三级制的 评定。评定条件为:,5.1.1 If条件语句,.,3.IfThenElseIf 结构,Mark=Text1.TextIf Mark=90 Then Print 优ElseIf Mark=60 Then Print“通过Else Print“未通过End If,若条件1与条件2换位,结果会怎样?,格式:If 条件1 Then(A组语句)ElseIf 条件2 Then(B组语句)ElseIf 条件3 Then(C组语句)Else(n组语句)End If,5.1.1 If条件语句,.,格式:If 条件1 Then A组语句 ElseIf 条件2 Then B组语句 ElseIf 条件3 Then C组语句 Else n组语句 End If,3.IfThenElseIf 结构,注意:多分支语句中,有多个分 支同时满足,只执行第一 个与之匹配的语句块。注意 ElseIf 的写法,5.1.1 If条件语句,.,例5 编写一个按月收入额计算个人收入调节税的程序 计算方法如下(P77 例5-8)0 Pay1000或离退休(Pay-1000)*0.05 1000Pay2000 Z(Pay-2000)*0.15+50 2000Pay3000(Pay-3000)*0.25+200 3000Pay4000(Pay-4000)*0.35+450 Pay4000 分析:选择语句结构 每个条件的表示及先后顺序,3.IfThenElseIf 结构,5.1.1 If条件语句,.,4.If语句的嵌套,5.1.1 If条件语句,If语句的嵌套是指if 或else后面的语句块中又包含If语句。语句形式:If Then If Then End If End If,注意:(1)对于嵌套结构,为了增强程序的可读性,应该采用缩进 形式书写;(2)If语句形式若不在一行上书写,必须与End If配对 多个If嵌套,End If与它最接近的If 配对。,Select Case 测试表达式 Case 测试项1 A组语句 Case 测试项2 B组语句 Case Else n组语句End Select,说明:测试表达式的值应是数字或字符型 测试项的取值必须与测试表达式 的值类型相同,常用形式为:具体取值,用逗号隔开如:1,5,9连续的范围:界1 TO 界2如:12 To 20 满足某个条件:Is运算符如:Is10 三种形式可以组合使用,5.1.2 Select Case语句,Select Case 结构,例5:输入二级考试成绩,要求显 示对应三级制的评定。Mark=Val(Text1.Text)Select case Mark case is=90 Print 优 case 90 to 60 Print“通过 Case Else Print“未通过End select,Mark=Val(Text1.Text)K=mark10Select case K case 10,9 Print 优 case 8 to 6 Print“通过 Case Else Print“未通过End select,5.1.3 条件函数(可选),1.Iif函数-替代IF语句格式:Iif(表达式、条件为真的值,条件为假的值),例:实现将X,Y变量中的大数放入Tmax变量,用If语句:If X Y Then Tmax=X Else Tmax=Y End If,用Iif函数:Tmax=IIf(X Y,X,Y),2.Choose函数-替代Select Case语句 格式:Choose(整数表达式、选项列表),例:用1、2、3、4分别返回不同的运算符,Nop=Rnd*4+1 Select Case Nop Case 1 OP=Case 2 OP=”Case 3 OP=Case Else OP=”End Select,Nop=Int(Rnd*4+1)Op=Choose(Nop,”,”,”,”),5.1.3 条件函数(可选),例7 编写一个加油站计费程序,在“种类”中选择油品种类,界面上的说明文字将随之改变,并将“数量”文本框设为焦点;在数量文本框中输入需购的油品数量后,单击“计算”按钮,在“总价”文本框显示所购油品种类应付的金额。已知汽油单价:90号 2.30元/升95号 2.45元/升100号 2.60元/升,例8 编写一个简单运算器的程序,要求:单击“计算”按钮,则根据输入操作数以及所选的运算符,求得运算结果,并显示在相应的文本框中。提示:当除数为0时,用消息框给出提示,总 结,条件语句,1.IfThen 结构2.IfThenElse 结构3.IfThenElseIf 结构4.Select Case 结构,5.2 循环结构,循环:是在指定的条件下多次重复执行一组语句,1.For Next,2.DoLoop,3.循环嵌套,4.其他辅助控制语句,For 循环变量=初值 TO 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量,For循环格式:,执行过程:(1)将初值赋循环变量;(2)判断循环变量值是否小于等于 终止值;(3)若是,执行循环体(语句块);(4)然后将变量增加一个步长;(5)重复24步骤。(6)否则,结束循环,5.2.1 For循环,步长省略,默认为1,程序代码:Dim I%,s%For I=1 To 10 step 1 Next I Print I,s,例1:求1+2+3+4+10之和.,分析:重复过程(循环体):ss+I初值、终值和增量:1、10、1,初值与终值换位 可以吗?,循环体的执行次数是多少?输出的I、S的值是多少?For I=1 To 10执行多少次?,s=s+I,For I=10 To 1 Step-1,5.2.1 For循环,For 循环变量=初值 TO 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量,Dim I,s As Integer For I=1 To 10 s=s+I Next I Print I,s,例2:求10!,分析:重复过程:*初值、终值与增量不变,例1:求1+2+3+4+10之和.,分析:重复过程(循环体):+初值、终值和增量:1、10、1,Dim I,s As Integer For I=1 To 10 s=s*I Next I Print I,s,s=1For I=1 To 10,For I=1 To 10 s=1,5.2.1 For循环,S1=0S2=0For I=1 To 1000 S1=S1+INext I,练习1:计算11000的奇数和与偶数和 方法一:方法二:,Step 2,For I=1 To 1000 Step 2 S2=S2+INext IPrint S1,S2,0,S1=0S2=0For I=1 To 1000 If I mod 20 then S1=S1+I Else S2=S2+I End IfNext IPrint S1,S2,5.2.1 For循环,练习2:输入一个正整数,求个位数字之和,输入正整数k 求它的位数 用For循环 1,位数和步长 取k的末位数,求和 使k去掉末位数 重复以上两步,直到结束 在text2中显示结果,5.2.1 For循环,例:分析下列程序段的输出结果:Dim I As Integer,J As Integer J=0 For I=0 To 10 Step 2 I=I+3 J=J+1 Next I,注意:初值、终值、步长必须是数值型,步长为正,初值终值;缺省为默认为1 在已知循环次数时使用For循环,循环次数=int(终值-初值)/步长)+1 组成循环体的语句块可以是一条或多条语句 Exit For表示当遇到该语句时,退出循环体,执行Next的下一句;在循环体内对循环变量可多次引用,但在循环过程中一般不改变其值,否则影响结果。退出循环后,循环变量保持退出时的值,思考:我国现有人口13亿,按人口年增长率0.8%计算,多少年后我国人口超过26亿?,5.2.1 For循环,1.Do While 循环体 Loop,2.D0 循环体 Loop While,3.Do Until 循环体 Loop,4.Do 循环体 Loop Until,5.2.2 DoLoop循环,1.While循环,Do While 循环体 Loop,执行过程:(先判断,后执行)先判断循环条件,若为真:执行循环体,再判断循环条件否则,跳过循环体,执行Loop之后语句,5.2.2 DoLoop循环,Do While 循环体 Loop,Dim I,s As Integer For I=1 To 10 s=s+I Next I Print I,s,例1:求1+2+3+4+10的和.,Dim I,s As Integer I=1Do WhileLoopPrint I,s,s=s+I,I=10,I=I+1,I=11,(1)循环体执行了几次?(2)没有I=1会怎样?(3)将Print语句移到Loop的 前面结果怎样?(4)I先赋值为11,结果如何?,1.While循环,5.2.2 DoLoop循环,D0 循环体 Loop While,执行过程:(先执行,后判断)先执行循环体,再判断循环条件,若为真,继续执行循环体;否则,结束循环,执行Loop之后语句,1.While循环,5.2.2 DoLoop循环,D0 循环体 Loop While,例4:修改例3,Dim I,s As Integer I=1 Do While I=10 s=s+I I=I+1 Loop Print I,s,Dim I,s As Integer I=1 Do s=s+I I=I+1 Loop While I=10 Print I,s,(1)循环体执行几次?(2)将I先赋值为11,执行结果如何?,1.While循环,5.2.2 DoLoop循环,Do While 循环体 Loop,D0 循环体 Loop While,区别:(1)执行顺序不同 形式一:先判断,后执行循环体;形式二:先执行循环体,后判断(2)执行次数不同(特殊情况下)形式一:条件不满足,循环体可能一次也不执行 形式二:不论条件如何,至少执行一次,1.While循环,5.2.2 DoLoop循环,练习3:用辗转相除法求两自然数m、n的最大公约数和 最小公倍数,分析:最大公约数 已知两数m、n m Mod n的值为r mn,nr,若r0,则重复 否则,循环结束,m为所求的最大公约数,最小公倍数原两个数相乘,再除以最大公约数,5.2.2 DoLoop循环,练习4:我国现有人口13亿,按人口年增长率0.8%计算,多少年后我国人口超过26亿。,分析计算公式:26=13(1+0.008)n 已知:当前人口数量为P=13,年增长率为R=0.008 循环条件:当前人口数是否超过26亿 若没,计算下一年人口数PP*(1+R),年数+1,再判断,5.2.2 DoLoop循环,执行过程:(先判断,后执行)先判断循环条件:条件为假:执行循环体,然后再判断条件.条件为真:跳过循环体,执行Loop之后语句,Do Until 循环体 Loop,2.Until循环,5.2.2 DoLoop循环,Do Until 循环体 Loop,例5:修改上例,Dim I,s As Integer I=1Do While I=10 s=s+I I=I+1LoopPrint I,s,Dim I,s As Integer I=1Do Until s=s+I I=I+1LoopPrint I,s,条件应该如何写出?显示的I、S值与 上例一样吗?,Do 循环体 Loop Until,I10,5.2.2 DoLoop循环,2.Until循环,几种形式比较:,Do While 循环体 Loop(While),Do Until 循环体 Loop(Until),区别:While 条件为真时执行循环体,否则退出循环 Until 条件为假时执行循环体,否则退出循环,关系:while和Until可以相互转换,但循环条件取反,5.2.2 DoLoop循环,练习5:输入一个正整数n,求最大的k,使得1*1+2*2+k*kn成立,循环结构.练习,分析:输入n值 判断累加和sn?若是,s加下一个数的平方值 重复2、3 若否,结束循环 由text2输出最后一个累加数k,对吗?,循环的嵌套:在一个循环体内又包含了一个完整的循环结构,5.2.3 循环嵌套,For I=1 To 9 For J=1 To I s=I Next J Picture1.Print Next I,注意:内、外循环变量不能同名 外循环必须完全包含内循环,不能出现交叉,分析:用三种循环个位x的可能取值为09十位y的可能取值为09百位z的可能取值为19,看三个位置上的数是否满足如下条件,若满足,即是其中一个解 x3+y3+z3=z100y10 x,?,练习6:求水仙花数 水仙花数是指一个3位数,其各个数字的立方和等于数字本身。,5.2.3 循环嵌套,思考题:输入一个三位数,如何验证它是否是水仙花数?,Dim m As Integer,sum As Integer,n As Integer,a As Integerm=Val(InputBox(请输入一个数M:)n=mDo While m 0 a=m Mod 10 sum=sum+a 3 m=m 10 LoopIf sum=n Then Text1.Text=这是一个水仙花数Else Text1.Text=“这不是一个水仙花数”End if,1.GoTo语句2.Exit语句,满足循环条件的情况下,提前跳出循环体,结束循环。,两种形式:Exit For、Exit Do,作用:无条件的转移到标号或行号指定的语句 语法:GoTo 标号|行号,100 If I=100 Then s=s+I I=I+2 GoTo 100 End If,5.2.4 其他辅助控制语句,Dim I As Integer,If I mod 17=0 then print I end If,For I=100 to 200 Next I,Exit for,分析:重复工作:判断每个数除17的余数是否为0 初值、终值和增量:,练习7:求出100200之间的第一个能被17整除的整数。,5.2.4 其他辅助控制语句,累加和、平均值求素数求数的质因数穷举法递推法,5.3 程序示例,5,1.累加、连乘,例1:编写一个大奖赛统计选手得分的程序。要求单击“得分显示”按钮,则可以利用随机函数产生10个80100分之间的随机整数,输出在窗体上,并将计算选手的最后得分也在窗体上显示。,思考题:如果在评委的给分中,去掉一个最高分和一个最低分,然后计算最后得分,分析:由随机函数生成80100之间的10个数据 连续求和 求平均值,2.求阶乘,例2:求任一给定整数的阶乘,n!,分析:对于任意整数n,有三种可能:若:n0:用循环实现乘运算 输出结果,思考题:1.已知n,求1!n!之和 2.给定条件1!n!之和=5000,求最大n值,思考题1:Dim i As Integer,j As Integer,fact As IntegerDim sum As IntegerN=Val(InputBox(请输入N)For i=1 To N fact=1 累乘器置1 For j=1 To i fact=fact*j Next j sum=sum+factNext iPrint sum,思考题2:Dim i As Integer,j As Integer,fact As IntegerDim sum As Integer n=1Do While sum=5000 fact=1 累乘器置1 For i=1 To n fact=fact*i Next i sum=sum+fact n=n+1LoopPrint sum,n-1,3.求近似值,例3:利用级数和求cos(x)函数的近似值(误差 10-6),分析:应用前面的累加和连乘的知识 想到用循环计算各项之和,和初值=1 找到后项与前项的关系:f(n)=(-1)n*(X2/2*n)*f(n-1),x2 x4(-1)n+1x2(n-1)Cos(x)=1-+-+-+(n=1,2,)2!4!(2(n-1)!,方法1:用函数求n!Private Sub Command1_Click()Dim n As Integer,s As Double,u As Double,x As Singles=1 级数的第一项为1n=2x=InputBox(请输入一个小于等于1的数:)Do u=(-1)(n+1)*x(2*(n-1)/f(2*(n-1)s=s+u n=n+1Loop While Abs(u)0.000001Print sEnd SubFunction f(n As Integer)As Long Dim i As Integer If n=1 Then f=1 Else f=f(n-1)*n End IfEnd Function,方法2:总结前一项与后一项之间的关系,找出迭代关系式Private Sub Command1_Click()Dim n As Integer,s As Double,u As Double,x As Singles=1 级数的第一项为1n=2u=1 累乘器置1x=InputBox(请输入一个数:)Do While Abs(u)0.000001 u=u*(-1)*x 2/(2*n-3)*(2*n-2)s=s+u n=n+1LoopPrint sEnd Sub,思考题:求下列数列的和,规定计算到第k项的值10-6为止。(输入X=2测试程序,正确结果为S=0.9985868)。k!S=-k=1(x+1)(x+2)(x+k),4.求素数,素数(质数):一个大于等于2的整数,并且只能被1和自身 整除,而不能被其他整数整除的数,分析:用穷举法 用2n-1逐个去除整数n.若余数不为0,用下一个整数去除,直到n1为止 否则进行标记,或退出循环 输出结果,例3:判断一个正整数n是否为素数,思考题:找出100200之间的所有素数,并添加在窗体的文本框中,5.求数的质因子,将一个正整数分解为质因数乘积。如362233(互质的因数叫质因数),分析:当x=I时 如果x mod I0,I是一个因子 否则I加1,思考题:判断一个正整数n是否是完数 即一个数恰好等于它的因子之和 如:28124714,求数的质因子方法private Sub Command1_Click()Dim n%,Factor%,First As Booleann=InputBox(输入一个正整数)Factor=2First=TrueDoDo While n Mod Factor=0 内循环考虑到有多个相同的质因数If First Then Print n;=;Factor;Else Print*;Factor;End If n=n Factor First=FalseLoop Factor=Factor+1Loop Until Factor nEnd Sub,思考题参考答案:Dim n As Integer,i As Integer,sum As Integern=Val(InputBox(输入一个正整数)For i=1 To n 2 If n Mod i=0 Then sum=sum+iNext i If sum=n Then Text1.Text=这是一个完数 Else Text1.Text=这不是一个完数 End If,4.穷举法,穷举法:就是将可能出现的各种情况一一测试,判断是否 满足条件,For x=0 To 100 For y=0 To 100 For z=0 To 100 If x+y+z=100 And _ 3*x+2*y+0.5*z=100 Then Print x,y,z End If Next z Next y Next x,例:百钱买百鸡,假设:小鸡5角/只,公鸡2元/只,母鸡3元/只,现有100元钱要买100只鸡,编程列出所有可能的购鸡方案分析:设母鸡、公鸡、小鸡分别买X、Y、Z只 X+Y+Z=100 3*X+2*Y+0.5*Z=100,For x=0 To 33 For y=0 To 50 If 3*x+2*y+0.5*(100-x-y)_=100 Then Print x,y,z End If Next y Next x,4.字符转换,例:将一个二进制的原码转换成反码,分析:循环语句决定转换的次数 Mid函数获取一个二进制位 If语句判断该位01,10,思考题:输入一个十进制整数,输出其原码和反码,4.字符转换,例:字符加密。将由大写英文字母组成的字符串的每个字符的ASCII代码转换成二进制,按位与指定密钥“01111111”进行异或运算,把得到的结果转换成十进制数,再转换成对应的加密字符,分析:其中一个字符的转换 获取每个字母的ASCii码(ASC函数,取子串函数)将十进制ASCII码转换成二进制ASCII码。再与01111111进行异或运算 再转换成对应的字符(chr函数)连接成字符串,5.递推法,递推法:就是将一个复杂的计算过程转化为简单过程的多 次重复。,例:猴子吃桃子,小猴在一天摘了若干个桃子,当天吃掉一半多一个,以后每天吃掉剩下的桃子的一半多一个,到第七天要吃时只剩下一个了,问小猴那天共摘了几个桃子 Xn-1 Xn=-1 2,实验分支语句,1.求z的值,z 本题能否用select case语句替换实现?为什么?2.实验5-23.货币兑换(实验书5-4)4.计算运费(实验书5-5)*5.编写一个高速公路收费程序 不同的车行不同的里数,收费标准不同。小型客车收费系数为1,大型客车的收费系数为1.5,货车的收费系数为2,当行程不超过100Km时,应付费20收费系数,当行程不超过200Km时,应付费40收费系数收费,当行程不超过300Km时,应付费60收费系数收费当行程超过300Km时,应付费80收费系数收费 实现:选择不同的车型,在text1中输入行使的里数,单击“确定”按钮,在text2中显示其应付费。,?,ex+y x=0lnx x=1,实验循环结构(一),1.6-1求素数2.6-3求近似值3.6-4,求字串的长度,反序4.分析下列程序的运行结果,并得出相应的结论,Private Sub Form_Click()Dim M As Integer,N As IntegerDim K As IntegerN=-3:k=0For M=6 To k Step N M=M+1 N=N-M K=K+1Next MPrint KPrint NEnd Sub,Private Sub Form_Click()Dim a As Integera=1Do until a=100 a=a+2loopPrint aEnd Sub,实验循环结构(二),1.6-5,读程序2.编程找出1100之间的所有完数 完数:一个数等于其各因子之和,如6=1+2+33.求满足如下条件的三位数,它除以11所得的商等于各位数字的平方和,思考题,2.程序要求:在窗体上有一个文本框和一个命令按钮,在文本框中输入“红”,单击命令按钮,即可在窗体上绘制一个红色的圆,依此类推,将绘制绿、蓝、黄等,若输入其他色,在窗体上输出“该程序不能识别此颜色”,同时绘制黑色的圆。,?,提示:VB中的表示常用颜色常量为:vbRed、vbYellow、vbGreen、vbBlue、vbBlack,1.从窗体上输入A、B、C三个数,按照由大到小的顺序在窗体输出,3.比较Ifthenelseif语句和select case语句的相同与不同之处,并举例说明在什么情况下用Ifthenelseif设计的程序不能转换成用select case语句设计的程序,练习,?,.在多窗体的应用程序中,当前窗体模块的Form_Click事件过程中包含如下语句,单击该窗体,其中_32_一定可以将Hello显示在当前窗体上。Form1.Print Hello“B.Me.Print Hello“C.Debug.Print Hello“D.Form2.Print Hello,