《《新编Visual-Basic程序设计教程》第7章.pptx》由会员分享,可在线阅读,更多相关《《新编Visual-Basic程序设计教程》第7章.pptx(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7 7章章 控制语句控制语句选择控制结构选择控制结构循环结构循环结构GOTOGOTO语句(无条件转移语句)语句(无条件转移语句)其他辅助控制语句其他辅助控制语句7.1 7.1 选择控制结构选择控制结构在处理实际问题时,常常需要我们对给定的条件进行判断,并根据判断的结果选择不同的操作进行处理,这就需要使用选择结构。在VB中,提供了多种形式的条件语句来实现选择结构。7.1.1 If7.1.1 If7.1.1 If7.1.1 If条件语句条件语句条件语句条件语句If条件语句有单分支、双分支和多分支等多种形式。1IfThen语句(单分支结构)语句(单分支结构)这种形式比较简单,语句形式如下:或其中
2、:表达式一般为关系或逻辑表达式,也可为算术表达式。当表达式为算术表达式时,值为非0时为True,值为0时表示False。If表达式Then 语句If 表达式 Then 语句块End If语句块可以是一条或多条语句。上述第一种形式中Then后面通常为一条语句,如果要用多条语句,则必须书写在一行上,各语句间用冒号分隔。该语句的作用是当表达式的值为True时,执行Then后面的语句或语句块;当表达式的值为False时不作任何操作。例如:比较两个变量a和b内数值的大小,如果a小于b,则将a和b的值交换。其语句如下:或If ab Then t=a:a=b:b=t If a=y Then Print x=
3、y Else Print x=y Then Print x=y Else Print x0 Then y=1 ElseIf x=0 Then y=0 Else y=-1 End IfIf x0 Then y=1 ElseIf x=0 Theny=0 Else y=-1例例7.2 已知某课程的百分制成绩score与相应的五级制成绩的对应关系,要求输入某学生的百分制成绩,输出对应的等级。程序段如下:If score=90 Then Print “优”ElseIf score=80 Then Print “良”ElseIf score=70 Then Print “中”ElseIf score=60
4、 Then Print “及格”Else Print “不及格”End If下面再给出两个程序段,请读者自己判断是否正确。程序段一:If score60 Then Print “不及格”ElseIf score70 Then Print “及格”ElseIf score80 Then Print “中”ElseIf score=60 Then Print “及格”ElseIf score=70 Then Print “中”ElseIf score=80 Then Print “良”ElseIf score=90 Then Print “优”Else Print “不及格”End If4嵌套的嵌
5、套的If语句语句嵌套的If语句是指在Then或Else后面的语句块中又包含If语句。上面的多分支结构语句其实就是嵌套的If语句。我们也可以把内层的If放在外层的If后的语句块中,如前面的例7.1,我们也可以用下面的语句完成:对于嵌套的If语句,为了增加程序的可读性,建议在书写时用锯齿型。通过上面几种语句形式的学习,我们可以看到:If语句形式如果不在一行上书写,必须以End If结束。对于嵌套的If语句,End If总是与离它最近的前面一个尚未配对的If配对。If x=0 Then If x0 Then y=1 Else y=0 End If Else y=-1 End If7.1.2 IIf
6、7.1.2 IIf 7.1.2 IIf 7.1.2 IIf 函数函数函数函数该函数可用来执行简单的条件判断操作,它是“IfThenElse”结构的简写版本,是“Immiediate If”的缩略。格式如下:result是用来接收函数返回值的变量,“条件”是一个逻辑表达式,当条件为真时,IIf函数返回“True部分”,而当条件为假时返回“False部分”。“True部分”或“False部分”可以是表达式、变量或其他函数。result=IIf(条件,True部分,False部分)例如:上例中IIf函数和其上面的单行If语句的作用是一样的。Private Sub Command1_Click()x=
7、9 If x0 Then y=1 Else y=0 y=IIf(x0,1,0)End Sub7.1.3 Select Case7.1.3 Select Case7.1.3 Select Case7.1.3 Select Case语句语句语句语句对于多分支结构,VB中还提供了一个专门的Select Case语句(又称情况语句或Case语句)。它可以根据一个表达式的值,在一组相互独立的语句块中挑选一个语句块执行。Select Case语句的格式如下:Select Case变量或表达式Case 表达式列表1语句块1Case 表达式列表2语句块2Case Else 语句块n+1End Select其中
8、:变量或表达式:变量或表达式:可以是数值型或字符串表达式,通常为变量。表达式列表表达式列表i:称为域值,与“变量或表达式”的数据类型必须相同,可以是下列四种形式之一:表达式 一组用逗号分隔的枚举值,如:表达式To表达式,如:Is关系运算表达式,使用的运算符包括:=,如:Case 2,4,6,8Case 1 To 5Case Is10Select Case语句的作用是:先求Select Case后的变量或表达式的值,然后将该测试值与各Case后的“表达式列表”中的值相匹配,如果找到了匹配的Case,就执行其后的语句块,如果都不匹配,就执行Case Else后的语句块。如果有多个Case后的“表达
9、式列表”中的值与测试值匹配,则只执行自上而下的第一个与之匹配的Case后的语句块。Select Case语句的流程图如右图所示。Select Case语句流程图例例7.3 在窗体中建立一个文本框(操作略)。程序运行后,在输入对话框中输入数值1,则在文本框中显示“1”,在输入对话框中输入数值2或3,则在文本框中分别显示“2”或“3”,如果输入其他值,则在文本框中显示“Goodbye”并结束程序。请读者上机实验。Sub Form_Click()msg=Enter data var=InputBox(msg)Select Case var Case 1 Text1.Text=1Case 2Text1
10、.Text=2Case 3Text1.Text=3Case ElseText1.Text=Goodbye End SelectEnd Sub可以看出,对于多分支结构,用Select Case语句比用嵌套的If语句程序可读性强。但是要注意,不是所有的多分支结构均可用Select Case语句代替嵌套的If语句。在Select Case语句中,各个Case中指定的表达式和语句块不能相互矛盾。各个Case的顺序对执行结果没有影响,但Case Else一定要放在所有的其他Case 之后。7.2 7.2 循环结构循环结构在程序设计中经常需要重复执行某些操作,这就需要用到循环结构。和其他一些程序设计语言一
11、样,VB也为我们提供了多种形式的循环语句。在实际编程中读者可根据实际情况和个人习惯选择合适的语句用于循环。其中,在循环结构中被重复执行的若干语句称为循环体。7.2.1 For7.2.1 For7.2.1 For7.2.1 For循环语句循环语句循环语句循环语句For循环也称For-Next循环或计数循环,用于控制循环次数预先已知的循环结构。语句的一般形式为:For循环变量初值To终值Step步长语句块Exit For语句块 Next 循环变量其中:For语句的执行过程如下:首先,循环变量被赋初值(注意该操作只执行一次),接着判断循环变量的值是否超过终值,如果超过就停止执行循环体,跳出该循环,执
12、行Next后面的语句;如果未超过终值就执行一次循环体,然后把循环变量的值加步长值再赋给循环变量,再去判断循环变量的值是否超过终值。这里所说的“超过”,是指大于或小于,即当步长值为正值时,超过就是循环变量的值大于终值,当步长值为负值时,超过就是循环变量的值小于终值。For语句的流程图如右图所示。For-Next循环的流程图例例7.4 计算1100的奇数和,程序段如下。说明:(1)循环结束时,循环变量的值保持退出循环时的值。如上例中,循环结束后i的值为101。(2)初学时在循环体内尽量不要再对循环变量赋值,以免影响循环的执行,造成概念混乱。Dim i As Integer,s As Integer
13、s=0For i=1 To 100 Step 2 s=s+iNext i例例7.5 阅读下面的程序段:该程序段的运行结果为:第1次循环i=4第2次循环i=9 第3次循环i=14第4次循环i=19 退出循环后i=21j=0For i=1 To 20 Step 2 i=i+3 j=j+1 Print 第;j;次循环i=;iNext iPrint 退出循环后i=;i7.2.2 While7.2.2 While7.2.2 While7.2.2 While循环语句循环语句循环语句循环语句hile循环也称为当型循环控制结构。其格式如下:其中:条件为一布尔表达式。While 条件 语句块WendWhile循
14、环语句的执行过程为:如果条件为True,则执行语句块,遇到Wend语句时返回While语句行并对条件重新判断,如果仍为True,则重复上述过程;如果条件为False,则跳出While循环,接着执行Wend后面的语句。While循环语句的执行流程如右图所示。While-Wend的流程图While循环与For循环的区别是:For循环的循环体的执行次数是一定的,而While循环是在给定条件为rue时重复执行循环体,因此While循环适合循环次数未知的情况。While循环有时可以代替For循环。例例7.6 用While循环计算1100的奇数和。Dim i As Integer,s As Integer
15、s=0i=1 While(i=100)s=s+i i=i+2Wend例例7.7 统计从键盘输入的字符的个数,当输入的字符为“”时停止计数,并输出统计的字符个数。Sub Form_Click()Dim char As String Const ch$=#Counter=0 msg$=Enter a character:char=InputBox$(msg$)While char ch$Counter=Counter+1 char=InputBox$(msg$)Wend Print Number of characters is:;CounterEnd Sub例例7.8 输入一个正整数n(n=3)
16、,判断其是否为素数。程序如下:Private Sub Form_Click()Dim n As Integer n=InputBox(请输入一个正整数n=3)k=Int(Sqr(n)i=2 flag=0 While i n;(2)求m除以n的余数并赋值给r;(3)若r=0,则n即为求得的最大公约数,否则执行步骤;(4)将n赋值给m,r赋值给n,再重复步骤。求出最大公约数后,将原来的两数相乘除以最大公约数即为最小公倍数。程序如下:Private Sub Form_Click()n1=InputBox(输入n1)m1=InputBox(输入m1)If m1 n1 Then m=m1:n=n1 El
17、se m=n1:n=m1 End If Do r=m Mod n If r=0 Then Exit Do m=n n=r Loop Print m1;和;n1;的最大公约数为:;n Print 最小公倍数为:;m1*n1/n End Sub程序运行时单击窗体,在输入对话框中分别输入24和18,运行结果如下图所示。程序的一次运行结果7.2.4 7.2.4 7.2.4 7.2.4 循环的嵌套循环的嵌套循环的嵌套循环的嵌套在一个循环体内又包含了一个完整的循环结构称为循环的嵌套。前面我们介绍的几种循环语句都可以相互嵌套。对于循环的嵌套,要注意以下几点:(1)各层的循环变量不要同名。(2)外层的循环必须
18、完全包含内层的循环,不能交叉。(3)嵌套的循环在执行时,要从外层的循环进入,但只有内层的循环执行完后才能开始下一次的外层循环。例例7.10 打印“九九表”。程序如下:Private Sub Form_Click()FontSize=12 For i=1 To 9 Print Tab(i*6);i;Next i Print For j=1 To 9 Print j;For i=1 To j Print Tab(i*6);i*j;Next i Print Next j End Sub程序运行结果如下图所示。九九表例例7.11 求100以内的所有素数。前面已经介绍过了判断一个正整数n是否为素数的方法
19、。现在要求100以内的所有素数,只需将n再作循环,并将其中的素数进行输出,即用一个二重循环实现。程序如下:Private Sub Form_Click()For n=2 To 100 k=Int(Sqr(n)i=2 flag=0 While i=k And flag=0 If n Mod i=0 Then flag=1 Else i=i+1 End If Wend If flag=0 Then num=num+1 Print n,If num Mod 5=0 Then Print End If Next nEnd Sub程序中外层循环用的是For循环,内层循环用的是While循环语句。变量nu
20、m用来计数,以便控制每行输出5个素数,使输出清晰美观。运行结果如下图所示。输出100以内的素数7.3 GoTo7.3 GoTo语句(无条件转移语句)语句(无条件转移语句)和其他程序设计语言一样,VB中也保留了无条件转移语句GoTo,但在一般情况下不提倡使用它,因此下面我们简单介绍一下GoTo语句。GoTo语句的形式如下:其中:标号是一个以冒号结尾的标识符,如start:,而行号是一个整型数,它不以冒号结尾,如200。GoTo语句改变程序执行的顺序,它的作用是无条件地转到标号或行号指定的那行语句去执行。GoTo 标号|行号例例7.12 编写程序给学生的成绩下评语,该评语是根据学生考试分数分段区分
21、的。其中分数为90100评语是“Very Good”、7089是“Good”、6069是“Fair”、5059是“Poor”、50分以下“Fail”。其程序如下:Private Sub Form_Click()Dim score As Integer,num As Integerscore=InputBox(输入分数)num=InputBox(输入学号)If score=90 Then GoTo 100If score=70 Then GoTo goodIf score=60 Then GoTo 普通入口If score=50 Then GoTo 150GoTo 失败入口100 这里的100指
22、的是行号Print 学号:;numPrint 分数:;scorePrint 评语:Very GoodGoTo fingood:这里的good是标号Print 学号:;numPrint 分数:;scorePrint 评语:GoodGoTo fin普通入口:汉字同样可以作为标号使用Print 学号:;numPrint 分数:;scorePrint 评语:FairGoTo fin150Print 学号:;numPrint 分数:;scorePrint 评语:PoorGoTo fin失败入口:Print 学号:;numPrint 分数:;scorePrint 评语:Failfin:Print*End
23、Sub由以上程序可以看出,使用GoTo语句编写程序时,我们要人为把程序给划分成若干个程序段,当程序满足某种条件时就使用GoTo语句跳转到相应的程序段。当程序执行完毕以后再使用goto语句无条件跳转到其他位置去执行后面的程序。评语程序运行结果如下图所示。评语程序运行结果联合使用If语句和GoTo语句可以模拟上节中提到的任何一种程序结构,上例就是使用If语句配合GoTo语句完成了Select语句的程序结构。但是因为GoTo语句进行程序跳转时不需要任何条件就可以进行。因此,使用GoTo语句更容易造成“死循环”等程序错误,所以在一般情况下不提倡使用它。7.4 7.4 其他辅助控制语句其他辅助控制语句7
24、.4.1 Exit7.4.1 Exit7.4.1 Exit7.4.1 Exit语句语句语句语句在VB中,有多种形式的Exit语句,用于退出某种控制结构的执行。如:等。Exit ForExit DoExit SubExit Function7.4.2 End7.4.2 End7.4.2 End7.4.2 End语句语句语句语句独立的End语句用于结束一个程序的运行,它可以放在任何事件过程中。在前面的例子中我们经常看到。此外,在VB中,还有多种形式的End语句用于结束一个过程或块,如:等,它们分别与对应的语句配对使用。End IfEnd SelectEnd WithEnd FunctionEnd Sub7.4.3 With7.4.3 With7.4.3 With7.4.3 With语句语句语句语句With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称,其形式如下:With 对象 语句块 End With例如:要改变MyLabel标签对象的多个属性,可用如下With语句:With MyLabel Height=200 Width=200 FontSize=22 Caption=”This is MyLabel”End With