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