1、课题:分支结构 教学时间: 授课班级: 教学目标:学会用if …else…end if 语句编写简单的程序,并会调试它 教学重点、难点: 1. 运算规则 2. IF 语句的用法 3. Msbox()等函数的涵义及用法 教学过程 A B Y N 入口 出口 用前面介绍的语句已能编写出顺序执行的简单程序。但在用计算机解决实际问题时,有时需要先对某个条件进行判断,然后根据判断的结果进行不同的操作。例如:求三个数中的最小数,用流程图表示如图6-2,图中包含有两个判断框。其中第一个判断框是根据给定的条件“a
2、左边的语句还是执行右边的语句,这就是程序的分支结构,如图6-19所示。Visual Basic用If语句来实现分支结构。 P 图6-19 一、条件 If语句是根据给定的条件是否满足,决定应执行的路径。如“ab、x<0、"a"<>"b"等都是合法的关系表达式。关系运算符及其示例见表6-10。 表6-10 关系运算符 含义 相当的数学符号 关系表达式示例 = 等于 = x=0 >
3、 大于 > x*y>x+y < 小于 < "QB"<"VB" <> 不等于 ≠ X<>0 >= 大于等于 ≥ x>=10 <= 小于等于 ≤ x<=0 关系表达式的运算顺序是:先进行算术运算或字符串运算,然后再进行比较运算。其运算结果是一个逻辑值,即True(真)或False(假)。如果条件成立,则关系表达式取True;如果条件不成立,则关系表达式的值为False。 如果关系运算符的两边表达式的运算结果是数值,则按其大小比较。例如: a5(x=3,y= -2) 其值为False 如果是字
4、符串,则按字符的ASCII码从左到右一一比较,即首先比较两个字符串的第一个字符,其ASCII码值大的字符串大,如果第一个字符相等,则比较第二个字符,依此类推,直至出现不同的字符为止。如果两个字符串的长度相等,且每一个相应位置上字符都一样,就认为两个字符串相等。如果两个字符串长度不相等,但一个字符串是另一个字符串的前部,则长度大的字符串大。例如: "VB">"VISUAL BASIC" 其值为False "Basic"="Basic" 其值为True "Windows">"Window" 其值为True 二、行If语句 行If语句是指在一行中写完的If语
5、句,它的一般格式为: 格式一:If 条件 Then 语句 执行这种形式的If语句时,首先对条件进行判断。若条件成立,则执行Then后面的语句;若条件不成立,则执行If语句后继程序行的语句。 格式二:If 条件 Then 语句1 Else 语句2 执行这种形式的语句时,先进行判断,若条件成立,则执行语句1;否则执行语句2。 【例6-5-1】输入三个不相同的数,求出其中最小数。 算法设计见第一节,流程图如图6-2,程序代码如下: ' 求三个数中的最小数 Private Sub Form_Click() Dim a As Single,
6、b As Single, c As Single Dim min As Single a = InputBox("输入a", "输入框") b = InputBox("输入b", "输入框") c = InputBox("输入c", "输入框") If a < b Then min = a Else min = b If c < min Then min = c Print "最小数="; min End Sub 若从键盘输入的三个数分别为-981,56,23,运行结果如下: 最小数=-981 【
7、例6-5-2】编一程序,求如下分段函数y的值,x从键盘输入。 开 始 输入x x<=0 x2+1→y x2-x+1→y 输出y 结 束 Y N 图6-20 本程序界面很简单,x的值可在程序中调用InbputBox函数,在弹出的标准输入对话框中输入,程序的计算结果可直接用Print方法输出在窗体上。算法如下: ① 输入x; ② 判断x的值,如果x<0,则x2+1→y,否则x2-x+1→y; ① 输出y的值; 流程图如6-20所示,程序代码如下: ' 分段函数 Private Sub Form_Click() Dim x As Single, y As
8、Single x = Val(InputBox("请输入自变量x", "输入框")) If x <= 0 Then y = x * x + 1 Else y = x * x - x + 1 Print "y="; y End Sub 三、块If语句 上述If-Then语句,只能根据条件的真假是否执行一条语句。但是当Then部分和Else部分包含的内容较多时,则可选用“块If”结构。 格式三:If 条件 Then 语句块 End If 格式四:If 条件 Then 语句块1 E
9、lse 语句块2 End If 格式四If语句的功能是:若条件为真,则执行语句块1,然后再继续执行End if 后的语句;若条件为假,则执行语句块2,再继续执行End if后的语句。 【例6-5-3】设计一个界面如图6-21所示的算术练习程序,由计算机自动产生一位数加法练习题。学生输入答案后,单击“确认”按钮,如答案正确,自动产生下一题,否则重新输入答案。 本题算法的关键是产生一位数的加法题,VB提供了一个可以产生[0,1)之间均匀分布的随机数的随机函数Rnd,一般地,要产生[a,b]之间的随机整数,可使用下面的表达式: Int((b-a
10、1)*Rnd)+a 图6-21 所以,要产生一位整数,可使用以下的算术表达式:Int(10*Rnd)。缺省情况下,每当运行一个程序时,Rnd函数总是产生相同序列的随机数,因此,在调用Rnd函数之前,可先执行Randomize语句初始化随机数生成器,以使每次运行程序时,Rnd函数能够产生不同的随机数序列。 本例中除了两个命令按钮外,设置了一个标签控件用于显示产生的算术题,一个文本框控件用于输入答案,同学们可以自己设置界面中对象的属性。 程序代码如下: ' 算术练习程序 Dim a As Integer Dim b As Integer Dim c As Int
11、eger ' 程序的初始化过程 Private Sub Form_Load() frmTest.Show Randomize ' 初始化随机数生成器 a = Int(10 * Rnd): b = Int(10 * Rnd) lblTest.Caption = Str(a) + "+" + Str(b) + "=" txtInput.Text = "" txtInput.SetFocus End Sub ' 确认按钮事件过程 Private Sub cmdOk_Click() c = Val(txtInput.Text) I
12、f c = a + b Then MsgBox "正确,请做下一题", vbOKOnly, "提示信息" a = Int(10 * Rnd): b = Int(10 * Rnd) lblTest.Caption = Str(a) + "+" + Str(b) + "=" Else MsgBox "错误,再试试", vbOKOnly + vbInformation, "提示信息" End If txtInput.Text = "" txtInput.SetFocus End Sub Privat
13、e Sub cmdEnd_Click() End End Sub Load事件在运行程序装载窗体时发生,其中的代码用于初始化有关变量或控件的属性,此处主要用于产生第一道算术题,Show是窗体的方法,用于显示窗体。 讨论与思考 ⒈本例程序中,输入错误答案后,要求重新输入。如果要求重试不超过3次,程序该如何修改? ⒉如果要求输入错误答案后,不再重新输入,而在结束程序前,显示本次练习的统计数据:答对题数、错误题数、正确率,又该如何修改程序? 信息卡 编译程序和COBOL语言的创始人 ——格蕾斯×莫里×霍波 格蕾斯×莫里×霍波(Grace Murry Hopper),一
14、个79岁时才从美国海军退役的女将军,为计算机事业的发展作出了杰出贡献。 我们前面介绍过,当时的计算机使用穿孔卡片输入、输出数据,为了几分钟的计算不得不准备相当长的时间,为了使计算机简单易用,她编写了世界上第一个编译器,能够将类似英语的符号代码转换成计算机识别的二进制指令,从而被人们尊称为“编译器之母”。格蕾丝的另一个重要贡献就是发明了面向商业的计算机高级语言——COBOL,与当时用于科学计算的Fortran语言不同的是,COBOL语言的句法更接近自然英语,将程序和数据截然分开,有较强的文件处理能力,特别适用于管理存储在磁带和磁盘上的大量数据。这一点后来对数据库管理系统的发展产生重大影响。CO
15、BOL语言在六、七十年代得到了广泛的应用,因此,格蕾斯也被人们称为“COBOL之母”。 另一个值得一提的事情是格蕾斯创造了Bug这个词,1947年,格蕾斯正用马克—2计算机进行一项计算,突然机器停止了运行,她和同事们在一个继电器中发现了一个已经死掉的飞蛾,正是这个虫子造成了机器的故障,后来人们就把程序中的错误称为Bug(虫子),排除错误称为Debugging(除虫)。也是当年的格蕾斯,在发明COBOL语言时,为了节约计算机存储器,只用后两位数字表示年份,为我们留下了一条危害巨大的“千年虫”。 练 习 ⑴ 写出下列关系表达式的值: ① a>b(已知a=3,b=4) ② x+1>=10
16、已知x=7)
③ i<100(已知i=99)
④ x*y
17、Print "x<20" Else If x <= 50 Then Print "20<=x<=50" Else Print "x>50" End If End If End Sub ⑷ 从键盘输入三个数,输出其中绝对值最大的数,画出流程图。 ⑸ 设C盘\BMP目录下有15个BMP格式图像文件:XXX01.BMP、XXX02.BMP、XXX03.BMP、……、XXX15.BMP。设计一个界面如图6-24所示的看图程序,图的正中为图形框,单击“上图”“下图”钮显示上幅、下幅图像。要求写出完成该程序所要绘制的控件及需要重新设置的属性,并编写程序。 程序运行过程中,利用LoadPicture(String)函数设置图片框的Picture 属性显示 图像,String参数为要显示的图像文件的路径名和文件名,例如:Picture1.Picture = LoadPicture("c:\bmp\xxx01.bmp")。 图6-22






