版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 通过上一章的讨论可知,算法用来描述如何对数据进行处理,以便得到期望的结果。因此,在算法中需要依次处理一些数据,或对一些数据处理结果进行判断决策,或循环处理一些数据。为此,使用Visual Basic 2005 实现一个算法时,需要相应的语句实现判断决策和循环处理,即对程序的流程进行控制。 下面结合逐步增加功能的实例讲述程序流程的顺序结构、选择分支结构、循环结构,以及过程的定义和使用。第1页/共168页23.1 顺序结构 最简单的程序流程结构是顺序结构,即各语句按照先后出现的次序执行,其执行流程如图3-1所示。语句1语句2.语句n图3-1 顺序结构流程图第2页/共168页3 例3.1 通过文
2、本框输入两个数,进行相加处理后,通过输出文本框输出。 具体操作过程: 新建项目,选择“Windows应用程序”,并把“名称”修改为“程序流程控制1.0”,然后单击“确定”。 在解决方案资源管理器中把“Form1.vb”文件名改为“程序流程控制.vb”。 打开窗体设计视图,选择Form1窗体,在属性框中修改窗体的属性:Name改为“frmProgStruct”;StartPosition改为“CenterScreen”;Text改为“程序流程控制1.0”。 为窗体添加Label控件,Text改为“请输入两个数:”。 为窗体添加2个TextBox控件,Name分别改为“txtInput1”、“tx
3、tInput2”。 为窗体添加2个Button控件,修改该控件的属性:Name分别改为“btnCalculate”、 “btnQuit”,Text分别改为“计算”、“退出”。 为窗体添加1个TextBox控件,Name改为“txtOutput”,Multiline改为“True”,ScrollBars改为“Vertical”。 双击“退出”按钮,在“退出”按钮Click事件过程中添加响应代码:Close()。 双击“计算”按钮,在代码编辑器中添加对“计算”按钮Click事件响应的代码:第3页/共168页4 Private Sub btnCalculate_Click(ByVal sender
4、As System.Object, _ ByVal e As System.EventArgs) Handles btnCalculate.Click 定义变量 Dim objOper1 As Object Dim objOper2 As Object Dim objResult As Object Dim strOutput As String = 读取输入的内容 objOper1 = txtInput1.Text objOper2 = txtInput2.Text 输入内容相加 objResult = objOper1 + objOper2 输出结果 strOutput = txtInpu
5、t1.Text & + & txtInput2.Text & = & objResult & vbCrLf txtOutput.Text = txtOutput.Text & strOutput End Sub第4页/共168页5 提示: “程序流程控制1.0”程序中两个数相加实现的是两个字符串的连接操作,没有实现两个数值的相加。这是因为objOper1和objOper2是Object类型,而txtInput1.Text和txtInput2.Text的类型是String类型,因此objOper1+objOper2进行的是两个字符串“+”操作,即字
6、符串连接操作。第5页/共168页6 如果要把12和34相加按数值“+”进行运算,则需要把文本框输入的字符串转换为数值类型,如下面的代码把输入内容转换为Double数值类型后再进行相加: 读取输入的内容 objOper1 = CDbl(txtInput1.Text) 把输入的字符串内容转换为Double数值类型 objOper2 = CDbl(txtInput2.Text) 把输入的字符串内容转换为Double数值类型第6页/共168页7 在对话框中输入12和34,单击“计算”按钮,则在输出文本框中显示相加结果是“46”。但如果输入的是12x(有时输入数值时可能不小心输入了一个非数字字母)和34
7、,如果在Visual Studio 2005中通过“启动调试”运行的程序,则出现从字符串“12x”到类型“Double”转换无效的异常提示对话框,如图3-4所示。第7页/共168页8图3-4 从字符串“12x”到类型“Double”转换无效的异常提示第8页/共168页9 如果是直接运行的程序流程控制1.0.exe程序,当输入的“12x”无法转换为Double类型的数值时,程序出现错误,如图3-5所示,并异常终止执行。如果是直接运行的程序流程控制1.0.exe程序,当输入的“12x”无法转换为Double类型的数值时,程序出现错误,如图3-5所示,并异常终止执行。第9页/共168页10图3-5
8、程序流程控制1.0.exe运行出现错误提示信息第10页/共168页11 为了防止数据转换出现错误,在程序中进行数据转换之前,应该判断输入的内容是否能够进行转换,如果不能转换,则提示错误信息,即需要选择分支。实现选择分支结构的语句有两个:If Then语句和Select Case语句。第11页/共168页123.2 If Then语句 If Then语句在程序设计中,经常以单分支、双分支、多分支和嵌套的显示出现。第12页/共168页133.2.1 If Then语句单分支结构 If Then语句单分支结构的语句格式为: If (Expression)Then 语句块 End If 其中Expre
9、ssion是逻辑表达式或关系表达式。 如对于0intX100,Visual Basic可以写成:intX=0 And intX=100。Expression的值只能是True或False,作为If进行测试判断的依据:如果Expression的值为True,依次执行语句块中的语句,然后执行End If后的语句;如果Expression的值为False,则跳过语句块直接执行End If后的语句。其执行流程如图3-6所示。第13页/共168页14语句块图3-6 单分支结构流程图ExpressionTrueFalse第14页/共168页15 提示: 语句块中可以包含多条语句。 如果语句块中只有一条语句
10、,If Then单分支结构可以省略End If,写成一行,如下格式: If (Expression) Then 语句第15页/共168页16 例3.2 在例3.1的基础上,增加对文本框输入内容的判断:如果输入内容不能转换为Double类型,则退出过程调用。 具体操作过程同例3.1,为了区别上述程序,项目“名称”修改为“程序流程控制2.0”。 双击“计算”按钮,在代码编辑器中添加对“计算”按钮Click事件响应的代码:第16页/共168页17 Private Sub btnCalculate_Click(ByVal sender As System.Object, _ ByVal e As Sy
11、stem.EventArgs) Handles btnCalculate.Click 定义变量 Dim objOper1 As Object Dim objOper2 As Object Dim objResult As Object Dim strOutput As String = 第17页/共168页18 读取输入的内容,如果输入的内容包含非数字字符则退出过程调用 If Not (IsNumeric(txtInput1.Text) And IsNumeric(txtInput2.Text) Then MessageBox.Show(输入的内容包含非数字字符!, 错误) 输出提示信息 Ex
12、it Sub 退出过程调用 End If objOper1 = CDbl(txtInput1.Text) 把输入的字符串内容转换为Double数值类型 objOper2 = CDbl(txtInput2.Text) 把输入的字符串内容转换为Double数值类型第18页/共168页19 输入内容相加 objResult = objOper1 + objOper2 输出结果 strOutput = txtInput1.Text & + & txtInput2.Text & = & objResult & vbCrLf txtOutput.Text = txt
13、Output.Text & strOutput End Sub 提示: IsNumeric函数的格式为IsNumeric(Expression), 如果Expression中的内容能够转换为数值,则返回True,否则返回False。第19页/共168页20 代码说明: 对于Not (IsNumeric(txtInput1.Text) And IsNumeric(txtInput2.Text),只要txtInput1.Text和txtInput2.Text有一个不能正确转换为数值,则表达式返回True,执行IfThen后的语句,即退出过程调用。 如果Not (IsNumeric(txtI
14、nput1.Text) And IsNumeric(txtInput2.Text)为False,则不执行IfThen后的语句,而是执行End If后面的语句。 运行“程序流程控制2.0”程序,在文本框中如果输入12x和34,单击“计算”按钮后,程序不出现异常信息,而是弹出如图3-7所示对话框。第20页/共168页213.2.2 If Then语句双分支结构 If Then语句双分支结构的语句格式为: If (Expression)Then 语句块1 Else 语句块2 End If第21页/共168页22 其中Expression是逻辑表达式或关系表达式,返回值为True或False。If T
15、hen语句双分支结构的语句的含义是:如果Expression的值为True,依次执行语句块1中的语句,然后执行End If后的语句;如果Expression的值为False,依次执行语句块2中的语句,然后执行End If后的语句。第22页/共168页23 If Then语句双分支结构执行流程如图3-8所示。可以看出,语句块1和语句块2只能执行其中一个,不能同时执行。图3-8 双分支结构流程图ExpressionFalseTrue语句块1语句块2第23页/共168页24 例3.3 在例3.2的基础上,增加可以选择两个数相加或相减的功能,“计算”按钮根据选择的功能进行两个数相加或相减操作。 具体操
16、作过程同例3.2,需要添加和修改的额外内容有: 为了区别上述程序功能的不同,把该项目“名称”修改为“程序流程控制2.1”。 为窗体添加Label控件,Text改为“选择操作:”。 为窗体添加一个Panel控制,修改“BorderStyle”为“Fix3D”。 在Panel控制中添加2个RadioButton控件,Text分别改为“+”、“-”,Name分别改为“rdbPlus”、“rdbSub”,其中“+”单选框的Checked改为“True”。第24页/共168页25 提示: Panel 是容器控件,把其中包含的控件通过组合形成控件集合。 RadioButton 控件为单选框按钮,一般包含在
17、Panel控件中,或包含在GroupBox 控件中形成一组 RadioButton 控件集合,一组 RadioButton 控件集合可以确保每次只能选中一个控件。第25页/共168页26 在代码编辑器中,在类声明“Public Class frmProgStruct”语句之后添加一个记录已选操作类型的属性: 定义属性,记录选择的操作类型,默认为 + 操作 Private strSelOperator As String = +“ 注意: 在本例中strSelOperator默认的初始值是“+”。 Private是访问控制描述关键字,说明strSelOperator只能在类frmProgStru
18、ct内使用,即类frmProgStruct内的过程可以引用strSelOperator。第26页/共168页27 双击“+”,在代码编辑器中添加对“+”单选框CheckedChanged事件响应的代码: Private Sub rdbPlus_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles rdbPlus.CheckedChanged strSelOperator = + “+”操作被选中 End Sub第27页/共168页28 双击“-”,在代码编辑器中添加对“-”单选框
19、CheckedChanged事件响应的代码: Private Sub rdbSub_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles rdbSub.CheckedChanged strSelOperator = - “-”操作被选中 End Sub第28页/共168页29 在例3.2实现的“计算”按钮Click事件响应代码的基础上,重新编写对输入内容进行相加、相减操作和输出的代码: 输入内容相加、相减操作 If (strSelOperator = +) Then 如果“+”操
20、作被选中 objResult = objOper1 + objOper2 Else 否则“+”操作没有被选中,则“-”操作被选中 objResult = objOper1 - objOper2 End If 输出结果 strOutput = txtInput1.Text & strSelOperator & txtInput2.Text & = & objResult & vbCrLf txtOutput.Text = txtOutput.Text & strOutput第29页/共168页30 提示: RadioButton只有选中、未选中两种
21、状态,单击同一集合类的某一个RadioButton控件,则该控件被则选中,相应地其它控件则为未选中。 RadioButton控件中的Checked属性记录控件选中与否的状态,当状态变化时,触发RadioButton控件的CheckedChanged事件。第30页/共168页313.2.3 If Then语句多分支结构 If Then语句多分支结构的语句格式为: If (Expression1)Then 语句块1 ElseIf (Expression2)Then 语句块2 ElseIf (Expressionn)Then 语句块n Else 语句块n+1 End If第31页/共168页32 I
22、f Then语句多分支结构根据表达式的值确定要执行的语句块,如果表达式的值为True,则执行相应的语句块,然后退出If Then多分支结构语句,执行End If后的语句;否则执行其后的判断语句ElseIf (Expressionx) Then 语句。 If Then语句多分支结构执行流程如图3-10所示。可以看出,每次只能执行其中一个语句块。第32页/共168页33图3-10 多分支结构流程图FalseTrue语句块2Expression1语句块1Expression2ExpressionnTrueFalseTrueFalse语句块n语句块n+1第33页/共168页34 例3.4 在例3.3的
23、基础上,增加可以选择两个数相加、减、乘、除的功能,“计算”按钮根据选择的功能进行两个数相应的计算。 具体操作过程同例3.3,需要添加和修改的额外内容有: 为了区别上述程序功能的不同,把该项目“名称”修改为“程序流程控制2.2”。 在Panel控制中再添加2个RadioButton控件,Text分别改为“”、“”,Name分别改为“rdbMultiple”、“rdbDivide”。第34页/共168页35 双击“”,在代码编辑器中添加对“”单选框CheckedChanged事件响应的代码: Private Sub rdbMultiple_CheckedChanged(ByVal sender A
24、s System.Object, _ ByVal e As System.EventArgs) Handles rdbMultiple.CheckedChanged strSelOperator = “”操作被选中 End Sub第35页/共168页36 双击“”,在代码编辑器中添加对“”单选框CheckedChanged事件响应的代码: Private Sub rdbDivide_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Divide.CheckedChanged
25、strSelOperator = “”操作被选中 End Sub第36页/共168页37 在例3.3实现的“计算”按钮Click事件响应代码的基础上,重新编写对输入内容进行加、减、乘、除操作的代码: 输入内容进行+、-、操作 If (strSelOperator = +) Then 如果“+”操作被选中 objResult = objOper1 + objOper2 ElseIf (strSelOperator = -) Then 如果“-”操作被选中 objResult = objOper1 - objOper2 ElseIf (strSelOperator = ) Then 如果“”操作被
26、选中 objResult = objOper1 * objOper2 ElseIf (strSelOperator = ) Then 如果“”操作被选中 objResult = objOper1 / objOper2 Else MessageBox.Show(选择操作有错!, 错误) End If第37页/共168页38 如果在“程序流程控制2.2”的文本框中如果输入12和0,选择操作“”并单击“计算”按钮,则显示计算结果为无穷大,如图3-12所示。这是因为在除操作中,除数不能为0。为此,在“”运算前,需要判断除数是否为0,如果是0,则不能进行“”运算。第38页/共168页393.2.4 If
27、 Then语句嵌套 If Then语句嵌套是指在If Then语句单分支、双分支、多分支结构的Then语句后或Else语句后还可以再使用If Then语句进行判断,构成选择分支。如: If (Expression1)Then 第1个 If 语句块1 Else 与第1个If配对的Else If (Expression1.1)Then 第2个 If If (Expression1.1.1)Then 第3个 If 语句块1.1.1 Else 与第3个If配对的Else 语句块1.1.2 End If 与第3个If配对的End if End IF 与第2个If配对的End if End If 与第1个
28、If配对的End if第39页/共168页40 为了防止在“程序流程控制2.2”出现除数是0的情况,在“”运算前,增加判断除数是否为0的语句: 输入内容进行+、-、操作 If (strSelOperator = +) Then 如果“+”操作被选中 objResult = objOper1 + objOper2 ElseIf (strSelOperator = -) Then 如果“-”操作被选中 objResult = objOper1 - objOper2 ElseIf (strSelOperator = ) Then 如果“”操作被选中 objResult = objOper1 * ob
29、jOper2 ElseIf (strSelOperator = ) Then 如果“”操作被选中 If (objOper2 = 0) Then 如果被除数是,则退出过程调用 MessageBox.Show(被除数不能为零!, 错误) Exit Sub Else 否则进行操作 objResult = objOper1 / objOper2 End If Else MessageBox.Show(选择操作有错!, 错误) End If第40页/共168页413.3 Select Case语句 如果要从多种备选情况中选择一种情况,或从多种备选情况中选择多种情况,可以通过If Then语句多分支结构及
30、嵌套实现,如例3.4。但当备选情况的量比较大时,使用If Then语句则: 效率低。如例3.4中,要判断到“”时,必须和前3种操作进行比较,如果使用“”的概率非常高,则每次要进行的无用比较操作就越多,从而造成程序执行效率的低下。 程序不易阅读。如例3.4中,要知道“ElseIf (strSelOperator = ) Then”中表达式所包含的确切逻辑含义,必须要和前面的所有判断包含的表达式的逻辑含义结合起来进行理解。第41页/共168页42 在例3.4的If Then语句多分支结构中,进行判断的语句有一个共同的特点,即strSelOperator和一个字符串(“+”、“-”、“”、“”)进行
31、“=”(相等)比较。对于这种特点的从多种备选情况中选择一种、多种情况的判断,Visual Basic 2005 提供了一个更好的多分支判断结构,即Select Case语句。第42页/共168页433.3.1使用Select Case语句 Select Case语句格式为: Select Case Expression Case Value1 语句块1 Case Value2 语句块2 Case Valuen 语句块n Case Else 语句块n+1 End Select第43页/共168页44 如果 Expression 与某一 Case Valuex 子句匹配,则执行该 Case 语句后
32、的语句块x,执行完语句块x后执行End Select后的语句;如果Expression没有与任何Case语句匹配,则执行Case Else后的语句块。第44页/共168页45 例3.5 用Select Case语句替换例3.4中的If Then多分支结构。 具体操作过程同例3.4,需要添加和修改的额外内容有: 为了区别上述程序功能的不同,把该项目“名称”修改为“程序流程控制2.2.1”。 使用Select Case语句替换If Then多分支结构:第45页/共168页46 输入内容进行+、-、操作 Select Case strSelOperator Case + 如果“+”操作被选中 obj
33、Result = objOper1 + objOper2 Case - 如果“-”操作被选中 objResult = objOper1 - objOper2 Case 如果“”操作被选中 objResult = objOper1 * objOper2 Case 如果“”操作被选中 If (objOper2 = 0) Then 如果被除数是,则退出过程调用 MessageBox.Show(被除数不能为零!, 错误) Exit Sub Else objResult = objOper1 / objOper2 End If Case Else MessageBox.Show(选择操作有错!, 错误)
34、 End Select第46页/共168页47 注意: Select Case后只能有一个表达式。如 Select Case x,y 是错误的。 Select Case语句中的Case 子句后还可以嵌套If Then语句、或Select Case语句。第47页/共168页483.3.2 多重选择 前面的 Expression 与某一 Case Valuex 子句匹配,执行该 Case 语句后的语句块x,如果要求Expression与某一批Case ValueKx 子句之一匹配,执行相同的语句块K,则Select Case语句可以写成:第48页/共168页49 Select Case Expre
35、ssion Case Value1 语句块1 Case ValueK1,ValueK2,ValueKm 语句块K Case Valuen 语句块n Case Else 语句块n+1 End Select 即Case ValueK1,ValueK2,ValueKm中的多个值(多个值之间用逗号分隔)对应于同一语句块K。第49页/共168页50 例如: Dim strMemberType as String 为strMemberType赋值 Select Case strMemberType Case 小学生,中学生,高中生,大学生 MessageBox.Show(您选择的学生是: & st
36、rMemberType, 学生类型) Case 教师,干部 MessageBox.Show(您选择的工作人员是: & strMemberType, 工作人员类型) Case Else MessageBox.Show(您输入的 & strMemberType & 是无效类型!, 错误) End Select第50页/共168页51 如果Case子句要表示范围,有两种格式: Exp1 To Exp2格式:表示的范围是Exp1,Exp2,即大于等于Exp1,并且小于等于Exp2。这里Exp2必须大于Exp1。如:Case 60 To 69。 Is Operator Exp格式
37、:用带比较运算符(=、 或 =)的 Is 关键字来指定对 Expression 匹配值的限制。如 Case Is 0。第51页/共168页52 提示: Exp1、Exp2和Exp都可以为字符串。如“AA” To “HH”,表示“AA”到“HH”之间的所有字符串(按字母排列)。 在第2种格式中,如果没有输入Is关键字,系统将自动在 Operator前面插入。这里Is是关键字,不是运算符!第52页/共168页53 例3.6 通过文本框输入一个0到100之间的整数成绩,使用MessageBox对话框显示成绩的级别:小于60为不及格;6069为中等;7079为良好;8089为优良;90100为优秀。
38、具体操作过程: 创建Windows应用程序项目,项目“名称”为“成绩分级”。 为窗体添加1个Label控件、1个TextBox控件和两个Button控件,Name分别为:labString,txtInputScore,btnGrade,btnQuit;Text分别为:“请输入成绩:”,“0”,“显示级别”,“退出”。为使用“退出”按钮添加退出程序代码:Close()。第53页/共168页54 在编辑器中添加响应“显示级别”按钮Click事件的代码: Private Sub btnGrade_Click(ByVal sender As System.Object, _ ByVal e As Sy
39、stem.EventArgs) Handles btnGrade.Click 定义变量,保存输入的成绩 Dim intScore As Integer 读取输入的成绩 If Not IsNumeric(txtInputScore.Text) Then MessageBox.Show(无效输入内容!, 错误) Exit Sub End If intScore = CInt(txtInputScore.Text) 为intScore 赋值第54页/共168页55 根据intScore显示相应的成绩级别 Select Case intScore Case Is 0 MessageBox.Show(无
40、效成绩!, 错误) Case Is 60 MessageBox.Show(不及格, 成绩级别) Case 60 To 69 MessageBox.Show(中等, 成绩级别) Case 70 To 79 MessageBox.Show(良好, 成绩级别) Case 80 To 89 MessageBox.Show(优良, 成绩级别) Case 90 To 100 MessageBox.Show(优秀, 成绩级别) Case Else MessageBox.Show(无效成绩!, 错误) End Select End Sub第55页/共168页563.4 循环结构 有时程序中某些代码需要重复执行
41、一定的次数后才能得到最终结果,这种重复执行可以通过循环结构实现。比如在例3.5中增加对输入的两个数进行累加的功能,如输入12、34,累加表示12+13+33+34,如果累加后的和保存在变量intSum中,则这种累加的动作可以表示成:intSum=intSum+intX,即intSum的当前值和intX相加,结果再保存到intSum中,如果intX依次取12到34之间的一个整数,重复执行上述累加动作(34-12+1)次,即可计算出12到34的累加和,即intSum的值。 循环结构有两种:“For”计数型循环,即循环指定的次数后停止循环;“Do”条件型循环,即当某一条件满足时执行循环语句或退出循环
42、。第56页/共168页573.4.1 ForNext循环 For Next循环属于计数型循环,将语句块重复执行指定的次数,其语句格式为: For counter As datatype = start To end Step step 语句块 Next counter 其中counter为循环控制变量,其值从start按步长step变化到end。For Next循环执行流程图如图3-13所示:第57页/共168页58FalseTrue语句块counter=start是否继续循环?counter=counter+stepNext 下条语句图3-13 For Next循环执行流程第58页/共168
43、页59 说明: 如果step为正,“是否继续循环”的判断表达式为:counter = end。 如果没有指定,则 step 的默认值为 1。 counter变量一般是在For语句之前定义,但也可以在For语句中定义,例如: For intCounter As Integer = 0 To 100 Step 2 循环语句块 Next intCounter intCounter在For语句中定义,则intCounter只能在For Next循环内的语句块中使用,即intCounter的作用域是For循环体。第59页/共168页60 Visual Basic 仅在循环开始之前计算一次start、en
44、d 和 step的值,如果在循环体的语句块中更改了end或step的值,则更改不影响对循环的控制。例如: Dim intStep As Integer = 2 Dim intEnd As Integer = 100 For intCounter As Integer = 1 To intEnd Step intStep 循环步长是2,循环100次 循环语句块 intStep = intStep +10 intStep的值变为12,但控制循环的步长仍然是2 intEnd = 200 intEnd的值变为200,但循环的次数仍然是100次 Next第60页/共168页61 例3.7 在例3.5的基
45、础上,增加两个数“累加”功能。 具体操作过程同例3.3,需要添加和修改的额外内容有: 为了区别上述程序功能的不同,把该项目“名称”修改为“程序流程控制3.0”。 在Panel控制中再添加1个RadioButton控件,Text改为“累加”,Name改为“rdbConseculate”。第61页/共168页62 双击“累加”,在代码编辑器中添加对“累加”单选框CheckedChanged事件响应的代码: Private Sub rdbConseculate_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.Even
46、tArgs) Handles rdbConseculate.CheckedChanged strSelOperator = 累加 “累加”操作被选中 End Sub第62页/共168页63 在“计算”按钮Click事件响应代码“Select Case strSelOperator”部分的“Case Else”之前添加两个数累加的代码: Case 累加 Dim intStart, intEnd As Integer intStart = IIf(objOper1 objOper2, objOper1, objOper2) 循环起始值为累加下界 intEnd = IIf(objOper1 objO
47、per2, objOper2, objOper1) 循环终止值为累加上界 objResult = 0 累加和初始值为0 开始累加 For intCount As Integer = intStart To intEnd 省略步长,则默认为1 objResult += intCount 开始累加 Next第63页/共168页64 提示: IIf()函数的作用是根据表达式的值,从两个值中选择一个返回,其格式为:IIf(Expression,TruePart,FalsePart) Expression为Boolean类型,如果Expression的值为True,则返回TruePart,否则返回Fal
48、sePart。第64页/共168页653.4.2 ForNext嵌套循环 For Next嵌套循环指将一个循环放在另一个循环的语句块内。在嵌套循环中,每个循环体都应具有唯一的循环控制变量,且循环体不能重叠。如下面的例子是错误的:For intX = 1 To 10For intY = 1 To 10 循环语句块Next XNext Y第65页/共168页66 例3.8 创建一Windows应用程序,通过MessageBox消息对话框输出九九乘法表。 具体操作过程: 创建一个Windows应用程序项目,项目“名称”为“九九乘法表”。 添加Button控件,Text改为“九九乘法表”,Name改为
49、“btnMultipleTable”。 双击“九九乘法表”按钮,在代码编辑器中添加其Click事件响应的代码:第66页/共168页67 Private Sub btnMultipleTable_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnMultipleTable.Click 定义变量 Dim strOut As String = “” 把九九乘法表作为字符串保存在strOut中 For intX As Integer = 1 To 9 九九乘法表共9 行 Dim strLine
50、As String = 每一行的乘法表保存在strLine中 For intY As Integer = 1 To intX 第intX 行共有 intX 个乘法 strLine = strLine & intY & & intX & = & intX * intY & Next intY 添加 intX 行的乘法表字符串到输出字符串 strOut 中,并添加换行控制 strOut = strOut & strLine & vbCrLf Next intX 输出乘法表 MessageBox.Show(strOut, 九九乘法表)
51、End Sub第67页/共168页683.4.3 Exit For 有时在循环执行的过程中,由于某个条件的改变而需要提前退出For Next循环。这种情况可以通过Exit For实现。第68页/共168页69 例3.9 创建一Windows应用程序,通过文本框输入一个整数,判断该数数否是素数。 具体操作过程: 创建Windows应用程序项目,项目“名称”为“判断素数”。 添加TextBox控件,Name改为“txtInput”。 添加Button控件,Text改为“判断素数”,Name分别改为“btnPrimeYN”。 双击“判断素数”按钮,在代码编辑器中添加其Click事件响应的代码:第69
52、页/共168页70 Private Sub btnPrimeYN_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnPrimeYN.Click 读取输入的内容 If Not (IsNumeric(txtInput.Text) Then MessageBox.Show(输入的内容包含非数字字符!, 错误) Exit Sub End If Dim intNum As Integer = CInt(txtInput.Text) 把输入的字符串内容转换为Integer数值 Dim intC As
53、 Integer intNum = IIf(intNum 0, -intNum, intNum) 如果输入的是负数,则转换为正数第70页/共168页71 判断 intNum 是否是素数 For intC = 2 To intNum - 1 如果intNum能够整除intC,则intNum不是素数,提前退出循环 If (intNum Mod intC = 0) Then Exit For 退出循环 End If Next第71页/共168页72 如果是提前退出,则intC的值小于intNum,否则intC的值递增到intNum时退出循环 If (intC intNum ) Then 如果是提前退
54、出For循环 MessageBox.Show(txtInput.Text & 不是素数!) Else MessageBox.Show(txtInput.Text & 是素数!) End If End Sub 提示: 当退出循环时,循环控制变量的值保持退出时的值,如上例中,如果是提前退出For循环则intC的值肯定小于intNum,否则如果是大于等于intNum,则是正常退出For循环。第72页/共168页733.4.4 Continue For 有时在循环执行的过程中,由于某个条件的改变而需要忽略掉当前语句到Next之间的语句,提前进入下一次For Next循环。这种情况可以通
55、过Continue For实现。第73页/共168页74 例3.10 创建一Windows应用程序,通过文本框输入一个整数,输出从2到该整数之间的所有素数。 具体操作过程: 创建Windows应用程序项目,项目“名称”为“判断一组素数1”。 添加TextBox控件,Name改为“txtInput”。 添加Button控件,Text改为“判断一组素数”,Name分别改为“btnPrimes”。 双击“判断一组素数”按钮,在代码编辑器中添加其Click事件响应的代码:第74页/共168页75 Private Sub btnPrimes_Click(ByVal sender As System.Ob
56、ject, _ ByVal e As System.EventArgs) Handles btnPrimes.Click 读取输入的内容 If Not (IsNumeric(txtInput.Text) Then MessageBox.Show(输入的内容包含非数字字符!, 错误) Exit Sub End If Dim intNum As Integer = CInt(txtInput.Text) 把输入的字符串内容转换为Integer数值 Dim intN, intC As Integer Dim strOut As String = intNum = IIf(intNum 0, -int
57、Num, intNum) 如果输入的是负数,则转换为正数第75页/共168页76 判断过程 For intN = 3 To intNum 判断2intNum之间的所有数 For intC = 2 To intN / 2 如果intNum能够整除intC,则intNum不是素数,提前退出循环 If (intN Mod intC = 0) Then Exit For End If Next intC If intC = intN / 2) Then Exit Do Else 否则还需要继续测试 intC += 1 intC 递增 End If Loop第83页/共168页84 测试退出 Do Lo
58、op 循环的原因 If (intN Mod intC) = 0) Then Do循环是由于intN Mod intC = 0 退出,intN不是素数 Continue For 继续For intN 的下一次循环 End If 否则,Do 循环是由于intC = intN / 2 退出,则intN 是素数 strOut = strOut & intN & Next intN MessageBox.Show(2 - & txtInput.Text & 之间的所有素数: & strOut)第84页/共168页853.4.6 Do While|Until Loo
59、p循环 除上面介绍的通过Exit Do退出循环外,还可以使用关键字While或Until在Do Loop结构中添加一个表达式来控制循环,语句格式为: Do While | Until Expression 语句块 Loop第85页/共168页86 对于Do While Expression,当Expression的值为True时,执行语句块,否则退出循环,执行流程图如图3-17所示。Loop 下条语句图3-17 Do While Loop循环执行流程图ExpressionTrueFalse语句块第86页/共168页87 对于Do Until Expression,则当Expression的值为
60、True时,退出循环, 否则执行语句块,执行流程图与Do While Expression类似,只是判断条件与Do While循环相反。 注意: 由于在执行语句块之前要进行Expression判断,因此无论Do While,还是Do Until,有可能语句块一次都不执行。第87页/共168页88 例3.12 在例3.10的基础上,使用Do While Loop循环或Do Until Loop循环替换For Next循环判断是否是素数。 具体操作过程: 创建Windows应用程序项目,项目“名称”为“判断一组素数3”。 其它操作同例3.10。 “判断一组素数”按钮的Click事件响应的代码中,“判断过程”代码更改为: 第88页/共168页89 判断过程 For intN = 2 To intNum intC = 2 intC用来测试intN能否整除 如果使用Do Until循环,则如果intC 的当前值能整除intN,或intC =intN/2 ,则退出 循环,否则循环, 控制语句为: Do Until (intN Mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度减肥健身器材销售与服务合同
- 2025年度环境工程资料收集与评估合同范本
- 2025年度新型城镇化建设安装施工总承包合同
- 贵州2025年贵州省自然资源厅事业单位招聘14人笔试历年参考题库附带答案详解
- 邯郸2024年河北邯郸广平县招聘警务辅助岗位工作人员58人笔试历年参考题库附带答案详解
- 衡水2025年河北衡水职业技术学院招聘人事代理工作人员25人笔试历年参考题库附带答案详解
- 绵阳2024年四川省绵阳第一中学第三批招聘教师3人笔试历年参考题库附带答案详解
- 滁州安徽滁州天长市水利局机关综合服务中心选调工作人员笔试历年参考题库附带答案详解
- 山西省卓越联盟2024-2025学年高三下学期2月开学质量检测试题 地理 含答案
- 喹吖啶酮类项目融资计划书
- GB/T 44143-2024科技人才评价规范
- 《混合动力汽车用变速器效率台架试验方法》
- 对医院领导的批评意见怎么写更合适范文(6篇)
- 裕龙岛炼化一体化项目(一期)环境影响报告
- 2024年北京卷英语真题
- 《网络安全防护项目教程》课件项目4 网络病毒和恶意代码分析与防御
- 账期协议书账期合同书
- 信息技术课程标准2023版:义务教育小学阶段
- 2024年兴业银行股份有限公司校园招聘考试试题参考答案
- 2024年常德职业技术学院单招职业适应性测试题库完整
- 天津市河东区2023-2024学年九年级上学期期末数学试题
评论
0/150
提交评论