《第3章程序控制结构.ppt》由会员分享,可在线阅读,更多相关《第3章程序控制结构.ppt(49页珍藏版)》请在三一办公上搜索。
1、第3 章程序控制结构,3.1 输入输出语句 3.2 顺序结构 3.3 选择结构 3.4 循环结构 3.5 辅助控制语句 3.6 常用算法举例,2023/8/5,2,输入:信息从计算机外传输到计算机内存。输入方式有:键盘、鼠标、外存储设备、文件、InputBox。一般通过一个内存变量来接收所输入的数据。输出:信息从计算机内存传输到计算机主机外。输出去向有:显示器屏幕(程序界面,消息对话框MsgBox)打印机 文件,3.1 输入输出语句,2023/8/5,3,引例.若书写下列语句:xInputBox(请输入一个数,给x赋值,666,100,200)则执行上述语句时会出现下面所示的对话框:若用户直接
2、单击“确定”按钮,则x将得到值666;若用户输入888替换掉原默认值,再单击“确定”按钮,则x将得到值888。InputBox函数的一般使用格式如下:xInputBox(提示内容,标题,函数的默认值,x,y)其中:提示内容 必填参数,是将出现在对话框的字符。标题将出现在对话框标题栏的字符。函数的默认值 默认出现的输入内容。X和y对话框出现的位置(左上角点的水平、垂直坐标)。,3.1.1 InputBox函数,2023/8/5,4,引例.若书写下列语句:xInputBox(请输入密码字符)If Len(x)6 Then 当x中的值少于6个字符时,则执行下面语句 y=MsgBox(错误:您输入的字
3、符串不足6位,VbOkOnly,密码消息)End If 执行上述语句时若在输入框中输入少于6个字符的内容,则会出现下面图所示的消息框;而输入6个以上字符则不出现下面的消息框。注意:消息框中出现的提示内容、标题栏内容、按钮的形式。,MsgBox例,3.1.2 MsgBox函数和MsgBox过程,2023/8/5,5,3.1.2 MsgBox函数和MsgBox过程,函数形式:变量名=MsgBox(提示,按钮,标题)过程形式:MsgBox 提示,按钮,标题 按钮值如下:函数返回所选按钮整数值:,2023/8/5,6,例3-1 编一程序,当用户单击图3-3的Command1按钮时程序弹出输入框,要求用
4、户输入信息;当用户输入信息并确定后,接着弹出含有“是”和“否”按钮的消息框(标题为默认内容)。若用户单击“是”按钮则程序继续运行;若单击“否”按钮则程序退出。程序如下:Private Sub Command1_Click()x=InputBox(请输入信息)y=MsgBox(x,vbYesNo)If y=7 Then 如果用户单击“否”按钮,那么 End 结束程序 End IfEnd Sub,当用户在前一个输入框中输入“AAA”时,弹出的消息框,InputBox和MsgBox的综合应用,2023/8/5,7,3.1.3 Print方法,Print方法的作用是在一些对象上输出信息,其一般使用格式
5、如下:对象.Print Spc(n)|Tab(n)表达式列表 结束符其中:对象:可选参数。可以是窗体、图片框名称或打印机对象。Space(n):可选参数。表示输出n个空格字符。Tab(n):可选参数;用来将插入点定位在绝对列号n上。表达式列表:可选参数;是要打印的数值或字符串表达式。结束符:可选参数;指定下一个字符的插入点位置。如:Picture1.Print Tab(10);abc;12;功能:定位在当前光标的第十列显示abc和12,最后的分号表示下个字符紧凑显示,2023/8/5,8,Print 方法的例题,例3-2 Print方法的使用例。本程序执行后,输出的结果如图所示。Private
6、 Sub Form_Click()x=50:y=库存书 Print ABC1;Print ABC2,Picture1.Print Picture1.Print 1234567890 Picture1.Print Tab(3);111;y;=;x;本 Picture1.Print Spc(3);222;y;=;x;本End Sub,2023/8/5,9,3.1.4 格式输出,输出数据的格式由Format函数确定,Format的一般格式如下:Format(表达式,格式字符串)其中:1)表达式:是要格式化的数值、日期或字符串类型表达式。2)格式字符串:是一个加双引号的字符串,它说明前面的表达式按什么
7、格式输出。如:Format(5459.4,#,#0.00)返回 5,459.40格式字符串有三类:数值格式、日期格式和字符串格式。分别参见表3-3、表3-4和表3-5。,2023/8/5,10,1)数值格式,2023/8/5,11,2)日期格式,2023/8/5,12,3)字符串格式,2023/8/5,13,Format格式的例题,举例:Dim MyTime,MyDate,MyStrMyTime=#17:04:23#MyDate=#January 27,1993#MyStr=Format(MyTime,h:m:s)返回 17:4:23MyStr=Format(MyTime,hh:mm:ss A
8、MPM)返回 05:04:23 PMMyStr=Format(MyDate,dddd,mmm d yyyy)返回Wednesday,Jan 27 1993MyStr=Format(5459.4,#,#0.00)返回 5,459.40MyStr=Format(334.9,#0.00)返回 334.90MyStr=Format(5,0.00%)返回 500.00%MyStr=Format(HELLO,)返回 THIS IS IT,2023/8/5,14,3.1.5 打印机输出,1.打印机对象VB6提供的打印机对象(Printer)允许用户使用安装在Windows中的打印机。使用打印机对象的Prin
9、t方法可以把以往输出到屏幕的内容输出到打印机。(1)打印机对象的常用属性FontCount:打印机可用的字体总数。FontName:字体名称。其值是字符串表达式,如:宋体。FontSize:字体大小。其值是数值表达式,用磅为单位。PrintQuality:打印质量。设置或返回打印机的分辨率,是整型数(-1-4对应分辨率从低到高)。如设置草稿质量:Printer.PrintQuality-1。,2023/8/5,15,(2)打印机对象的常用方法,Print:打印。向打印机输出文本或数据。Pset、Line、Circle:分别为画点、画线、画园。PaintPicture:打印图形。EndDoc:文
10、档结束。NewPage:用以结束Printer对象中的当前页并前进到下一页。KillDoc:删除文档。立即终止当前的打印。3)语句示例:Printer.Print VB编程“Printer.NewPagePi3.1415926Printer.Print Pi=;PiPrinter.EndDoc,2023/8/5,16,3.1.5 打印机输出,2.打印VB代码 在工程窗口内选择要打印哪个窗体或模块中的代码,接着打开“文件”菜单中的“打印”命令,出现如图3-5所示的“打印”对话框。在“范围”栏内选择“当前模块”;在“打印内容”栏内选择“代码”。3.打印VB窗体 方法一、在图3-5对话框选择“窗体图
11、像”即可。方法二、使用窗体的PrintForm方法,其语法为:窗体名.PrintForm,图3-5 打印对话框,2023/8/5,17,3.1.6 字型,Font对象包含格式化文本所需要的信息。经常用显示文本的对象的Font属性来标识Font对象。对象的Font属性包括6类子属性。设定字体各类属性的语句(对当前对象设置可省略对象名):设置字体类型语句:对象名.FontName=字体类型设置字符尺寸语句:对象名.FontSize=数值设置是否加粗语句:对象名.FontBold=True/False设置是否倾斜语句:对象名.FontItalic=True/False设置是否加删除线:对象名.Fon
12、tStrikethru=True/False设置是否加下划线:对象名.FontUnderline=True/False,2023/8/5,18,3.2 顺序结构,顺序结构是程序三种基本结构中的一种最常见、最简单的情景。顺序结构一般有赋值语句、输出数据语句和输入数据语句这几个类型。3.2.1 赋值语句赋值语句的功能就是将一种数据送到某个内存变量存储单员。格式:变量名数据例如:X=5(此语句的作用如下图所示):,2023/8/5,19,3.2.2 输出数据,输出数据是通过输出语句将常量、变量的值、对象属性的值或表达式的值向容器控件、显示器、打印机、磁盘文件输送。(1)常见的输出语句类型:MsgBo
13、x消息框;Print方法;写文件的语句(见第10章)。(2)输出的数据表达形式:常量(如:5、True、“Book”);变量;对象属性的值(如:Text1.Text);表达式(如:2*x+1);函数(如:Sqr(16)等。(3)输出的位置:容器控件(如窗体、图片框等);显示器;打印机;磁盘文件。,2023/8/5,20,3.2.3 顺序结构的特征,组成顺序结构的基本语句是一些输入、输出语句。写顺序结构程序时,须明白:先作什么?后做什么?例3-3 编一个转换华氏温度与摄氏温度的程序,转换公式是:F=9/5*C+32(1)将摄氏温度转换为华氏温度,F为华氏温度值 C=5/9*(F32)(2)将华氏
14、温度转换为摄氏温度,C为摄氏温度值要求:单击“转华氏”按钮,则将摄氏温度转换为华氏温度;单击“转摄氏”按钮,则将华氏温度转换为摄氏温度。,2023/8/5,21,3.3.1 单分支选择 If Then End If 或:If Then 例:已知两个数x和y,比较它们的大小,使得x大于y.If xy Then t=x x=y y=t End If 或 If xy Then t=x:x=y:y=t重要的是学会两个数的交换,若上述语句次序变一下,结果如何?,3.3 选择结构,块IF,行IF,2023/8/5,22,3.3.2 二分支选择,If Then Else End If If Then Els
15、e 举例:1)用单分支结构来实现两分支:y=cos(x)x3+3*x If x0 Then y=sin(x)+sqrt(x*x+1)2)用双分支结构实现:If x0 Then y=sin(x)+sqrt(x*x+1)Else y=cos(x)x3+3*xEnd If,例题:计算分段函数,块IF,行IF,2023/8/5,23,若IF结构中的或至少有一个又是一个完整的IF结构。就属于IF结构的嵌套情况。比如:给定三个数a、b、c,判断其能否构成一个三角形的三边?。若“能”,则进一步判断能否构成直角三角形。可写如下程序段解决此问题:a=InputBox(请输入变量a的值)给定变量a的数值b=Inp
16、utBox(请输入变量b的值)给定变量b的数值c=InputBox(请输入变量c的值)给定变量c的数值If(a+bc)And(b+ca)And(c+ab)Then 外层If的分支一 IF(a2+b2=c2)Or(b2+c2=a2)Or(c2+a2=b2)Then Print a、b、c能构成直角三角形 Else Print a、b、c能构成一般三角形 End IfElse 外层If分支二 Print a、b、c不能构成三角形End If,3.3.3 IF结构的嵌套,2023/8/5,24,3.3.4 多分支选择,1.用If实现多分支选择 格式如下:If Then ElseIf Then Els
17、e 语句块 n+1 End If 不管有几个分支,依次判断,当某条件满足,执行相应的语句块,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。注意:ElseIf不能写成 Else If。,2023/8/5,25,If 多分支语句例题,例3-4 已知百分制成绩mark,显示对应的五级制成绩,哪些正确,哪些错误?,2023/8/5,26,2.用Select Case实现多分支选择,形式:Select Case Case Case Case Else End Select:是与同类型的下面四种形式之一:表达式 例:“A”一组枚举表达式(用逗号分隔)例:2,4,6,
18、8 表达式1 To 表达式2 例:60 To 100 Is 关系运算符表达式 例:Is 60注:Select Case 后不能出现多个变量;Case后不能出现变量及有关运算符。,数值型或字符串表达式,用Select Case语句实现:Select Case strC Case a To z,A To Z Print strC+是字母字符 Case 0 To 9 Print strC+是数字字符 Case Else Print strC+其他字符End Select,2023/8/5,27,Select Case 应用例题,例3-5 已知变量strC中存放了一个字符,判断该字符是字母字符、数字字
19、符还是其他字符。用多分支If结构实现:If Ucase(strC)=A And Ucase(strC)=0 And strC=9 Then Print strC+是数字字符 Else Print strC+其他字符 End If,用Select Case语句实现:Select Case strC Case a To z,A To Z Print strC+是字母字符 Case 0 To 9 Print strC+是数字字符 Case Else Print strC+其他字符End Select,2023/8/5,28,哪些能实现,哪些不能实现?,例:输入百分制成绩mark,显示对应的五级制成绩
20、,2023/8/5,29,3.3.5 条件函数,1)IIf函数形式是:IIf(表达式,当表达式为True时的值,当表达式为False时的值)例如,求x,y中大的数,放入Tmax变量中,语句如下:Tmax=IIf(x y,x,y)如 Tmax=IIf(56,5,6)Tmax=IIf(65,6,5)2)Choose函数形式是:Choose(数字类型变量,值为1的返回值,值为2的返回值)例如,Nop是1-4的值,转换成+、-、运算符的语句如下:Op=Choose(Nop,+,-,)当Nop值为1,返回字符串“+”给变量Op;Nop值为2,返回字符串“-”给变量Op;依次类推。当Nop是1-4的非整数
21、,系统自动取Nop的整数办法在判断;若Nop不在1-4之间,函数返回Null值。,2023/8/5,30,选择分支例题,例3-6 下列程序运行时,若键入2,则该程序的运行结果是。Private Sub Command1_Click()x=InputBox(请输入一个数)Select Case x Case Is 3 Print(5*x+1)/(6*x-3)End SelectEnd Sub,2023/8/5,31,常见错误,1)在选择结构中缺少配对的结束语句 对多行式的If块语句中,应有配对的 End If语句结束。2)多边选择ElseIf关键字的书写和条件表达式的表示 ElseIf 不要写成
22、Else If;多个条件表达式次序问题。3.Select Case语句的使用 Select Case 后不能出现多个变量;Case子句后不能出现变量。,2023/8/5,32,3.4.1 ForNext循环 形式 For 循环变量初值 to 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量 步长 循环次数例:For i=2 To 13 Step 3 循环执行次数 Print i,输出I 的值分别为:Next I 2 5 8 11 Print:Print“i=“,i 出了循环后输出 i 值为:i=14,循环体,3.4 循环结构,2023/8/5,33,循环的步步剖析(F
23、or语句),代码:s0For i=2 To 13 Step 3 s=s+i Next IPrint s=;s Print i=;i,执行过程中s和i值的变化 s i循环前 0 2第1次循环后 2 5第2次循环后 7 8第3次循环后 15 11第4次循环后 26 14,条件不符合,退出循环,显示:s26i 14,2023/8/5,34,3.4.1 ForNext循环的简单应用,简单应用:例3-7 对110000区间的奇数从最小数开始逐个累加求和,检测总和首次超过32767时就终止循环。并输出:1)最后所加的那个数;2)一共加了多少个数;3)实际总和。例3-8 依次打印ASCII码值从48到66的
24、所有字符,并对照打印出每个字符的ASCII码值。例3-9 任意输入一串字符,由计算机找出其中有多少个英文字母A(大小写都算)。,2023/8/5,35,3.4.2 Do循环,Do语句用于控制循环次数未知的循环结构。有两种语法形式:形式1:Do While|Until 语句块 Exit Do 语句块 Loop,形式2:Do 语句块 Exit Do 语句块Loop While|Until,2023/8/5,36,Do While 循环例题,例3-10 十进制整数转换为二进制整数程序。从文本框输入一个十进制整数m,将m转换为二进制数,再将该二进制数以字符串形式输出。程序如下:Private Sub
25、Command1_Click()Dim m As Integer m代表十进制数 Dim n1 As String n1存放一位二进制数的字符值 Dim n As String n存放一个二进制数组成的字符串 m=Val(Text1)n=初始化n为空字符串 Do While m 0 只要当前部分商m(被除数)不为0就进入循环 r=m Mod 2 得到一位二进制数 n1=Trim(Str(r)将所得的二进制数位转化成一位字符 n=n1 nEnd Sub,2023/8/5,37,例3.11 用辗转相除法求两自然数m,n的最大公约数和最小公倍数。分析:求最大公约数的算法思想:(1)对于已知两数m,n
26、,使得mn;(2)m除以n得余数r;(3)若r=0,则n为最大公约数结束;否则执行(4);(4)mn,nr,再重复执行(2)。例 求 m=14,n=6 的最大公约数.m=InputBox(“请输入m”)n=InputBox(“请输入n”)Do While(n 0)r=m m=n n=r mod nLoopPrint 最大公约数=,m,参考算法:辗转相减法,Do While m n If m n Then m=m-n Else n=n-m End If Loop,变化表m n14 68 62 62 42 2,经典算法:辗转相除求公约数,2023/8/5,38,一个循环体内又包含了一个完整的循环结
27、构称为循环的嵌套.例3.12 打印九九乘法表.For i=1 To 9 For j=1 To 9 se=i Next j Picture1.PrintNext i,思考:打印上三角或下三角程序如何改动?要打印下三角?,3.4.3 循环的嵌套,2023/8/5,39,For ii=1 To 10 For jj=1 To 20 Next iiNext jj,For ii=1 To 10 For ii=1 To 20 Next iiNext ii,For ii=1 To 10 For jj=1 To 20 Next jjNext ii,For ii=1 To 10 Next iiFor ii=1 T
28、o 10 Next ii,循环嵌套注意事项,对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环,反之则可以。,正确,错误,2023/8/5,40,3.5 辅助控制语句 I,3.5.1 GoTo型控制1.GoTo语句使用GoTo语句将无条件地转移到指定的语句去执行。GoTo语句的 格式如下:GoTo|作用:无条件地转移到标号或行号指定的那行语句.如:goto lineA 标号是一个字符序列,行号是一个数字序列.如:goto 122.On-GoTo语句On-GoTo语句类似于情况
29、语句,用于多分支程序设计。格式为:On GoTo 示例:On m GoTo 11,22,Start,Loop1 m为1,2,3,4时跳转到相应位置3.5.2 Exit语句 多种:Exit For、Exit Do、Exit Sub、Exit Function等。作用:退出某种控制结构的执行。,2023/8/5,41,3.5.3 End语句 多种:End、End If、End Select、End With、End Type、End Sub、End Function等。作用:End结束一个程序的运行;其余表示某个结构的结束。3.5.4 With语句 形式如下:With 对象 语句块 End Wit
30、h 作用:对某个对象执行一系列的操作,而不用重复指出对象的名称。With Label1.Height=2000.Width=2000.FontSize=22.Caption=This is MyLabel End With注意:(1)用With语句只能对同一个对象使用,即With结构里面的语句都是对同一对象执行的,不能用一个With结构来设置多个不同对象;(2)With结构里面的语句块省略了对象名,但不能省略点号(“.”)。,等价于,辅助控制语句 I I,Label1.Height=2000Label1.Width=2000Label1.FontSize=22Label1.Caption=Th
31、is is MyLabel,2023/8/5,42,3.6 常用算法举例,算法是对某个问题求解过程的描述。3.6.1 累加、连乘1.累加求1100中5或7的倍数的和:Sum=0 For i=1 To 100 If i Mod 5=0 Or i Mod 7=0 Then Sum=Sum+i End If Next i Print Sum思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?例3-13 先求120中所有能被5整除的数之和,然后将范围扩大到求1200中所有能被5整除的数之和。,2023/8/5,43,3.6.1.2 连乘,2.连乘 如:求310中所有自然数的乘
32、积:t=1For i=3 To 10 t=t*iNext iPrint t例3-14 求20的双阶乘20!(即t20182)。Private Sub Command1_Click()Dim T As Double 连乘结果较大,要用Double型变量存放 Dim n As Integer,MaxN As Integer MaxN=InputBox(输入MaxN)T=1 For n=2 To MaxN Step 2 T=T*n Next n Print MaxN;!=;TEnd Sub,2023/8/5,44,3.6.2 求素数,素数是大于等于2的正整数,它只能被1和自己整除。判别某数m是否为素
33、数最简单的方法是:对于m,从i=2,3,m-1中判别m能否被i整除,只要有一个i能整除m,就说明m不是素数;否则m是素数。例3-15 求100以内的所有素数。Private Sub Command1_Click()单击命令按钮运行该事件函数 Dim i As Integer,m As Integer,flag As Boolean For m=2 To 100 对100以内的每个数逐个判断 flag=True tag值内True时标志m为素数 For i=2 To m 1 内循环对一个具体数m进行判断 If(m Mod i)=0 Then flag=False m能被i整除,该m不是素数 Ne
34、xt i If flag Then Print m m不能被i=2m-1整除,m是素数,显示 Next mEnd Sub,2023/8/5,45,3.6.3 最大、最小值问题,在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与存放最大值的变量比较,若该数大于最大值,则用该数替换最大值变量中的内容;依次逐一比较。例3-16 随机产生10个100200之间的整数,求最大值。Private Sub Command1_Click()Max=100 For i=1 To 10 x=Int(Rnd*101+100)随机产生1个100
35、200之间的整数 Print x;If x Max Then Max=x Next i Print 最大值=;MaxEnd Sub 最小值问题原理类似,但先假设一个较大的数为最小值的初值。例3-17 任意输入一串字符,求其中Ascii码最小的字符。,2023/8/5,46,3.6.4 穷举法,“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例3-18 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为
36、:x+y+y=100 3x+2y+0.5z=100 三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。,2023/8/5,47,3.6.5 递推法,“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从老值的基础上递推出新值,并由新值代替老值。例3-19 猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那
37、天共摘了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子。设第n天的桃子为xn,那么它与前一天桃子数Xn-1的关系是:,2023/8/5,48,循环中的常见错误,1.不循环或死循环的问题 主要是循环条件、循环初值、循环终值、循环步长的设置有问题。2.循环结构中缺少配对的结束语句 For 少 配对的Next 3.循环嵌套时,内外循环交叉4.累加、连乘时,存放累加、连乘结果的变量赋初值问题1)一重循环 在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。2)多重循环 这要视具体问题分别对待。,2023/8/5,49,谢谢大家,