1、第六章第六章 基本程序结构基本程序结构本章内容及要求:本章内容及要求:1.了解算法概念及算法的表示,掌握用了解算法概念及算法的表示,掌握用NS流流程序表程序表示算法示算法 2.熟练掌握赋值语句、熟练掌握赋值语句、EndEnd语句和注释语句等语句及输语句和注释语句等语句及输入入/输出消息框函数的使用;输出消息框函数的使用;3.熟练掌握行熟练掌握行ifif语句、块语句、块ifif结构、结构、Select CaseSelect Case情况选情况选择结构有使用,掌握选择的嵌套结构;择结构有使用,掌握选择的嵌套结构;4.熟练掌握实现循环结构的熟练掌握实现循环结构的For/NextFor/Next循环结
2、构及循环结构及Exit Exit ForFor语句、语句、Do/LoopDo/Loop循环结构的使用,掌握多重循环。循环结构的使用,掌握多重循环。重点:重点:选择结构及循环结构的实现及其应用选择结构及循环结构的实现及其应用难点:难点:选择的嵌套及多重循环结构选择的嵌套及多重循环结构6.1 算法及算法的表示算法及算法的表示 6.1.1 算法概述算法概述 什么是算法:什么是算法:广义地讲:算法是为完成一项任务所应当遵循的一步广义地讲:算法是为完成一项任务所应当遵循的一步一步的规则的、精确的、无歧义的描述,它的总步数是有一步的规则的、精确的、无歧义的描述,它的总步数是有限的。限的。狭义地讲:算法是解
3、决一个问题采取的方法和步骤的狭义地讲:算法是解决一个问题采取的方法和步骤的描述。描述。下面通过两个简单的例子加以说明:下面通过两个简单的例子加以说明:例例6.1 输入三个数,然后输出其中最大的数。输入三个数,然后输出其中最大的数。将三个数依次输入到变量、将三个数依次输入到变量、B、C中,设变量中,设变量MAX存放存放最大数。其算法如下:最大数。其算法如下:例例6.2 输入输入10个数,打印输出其中最大的数。个数,打印输出其中最大的数。算法设计如下:算法设计如下:(1)输入)输入1个数个数,存入变量存入变量A中中,将记录数据个数的变量将记录数据个数的变量N赋值赋值为为1,即,即N=1(2)将将A
4、存入表示最大值的变量存入表示最大值的变量Max中,即中,即Max=A(3)再输入一个值给再输入一个值给A,如果如果AMax 则则 Max=A,否则否则Max不变不变(4)让记录数据个数的变量增加)让记录数据个数的变量增加1,即,即N=N+1(5)判断判断N是否小于是否小于10,若成立则转到第(,若成立则转到第(3)步执行,否)步执行,否则转到第(则转到第(6)步。)步。(6)打印输出)打印输出max1)输入输入A、B、C。2)A与与B中大的一个放入中大的一个放入MAX中。中。3)把把C与与MAX中大的一个放入中大的一个放入MAX中。中。4)输出输出MAX,MAX即为最大数。即为最大数。6.1.
5、2 算法的特性算法的特性 1 有穷性有穷性2 确定性确定性3 有有0个或多个输入个或多个输入4 有一个或多个输出有一个或多个输出5 有效性有效性6.1.3 算法的表示算法的表示 一、自然语言与伪代码表示算法一、自然语言与伪代码表示算法自然语言:就是指人们日常使用的语言,可以是汉语、自然语言:就是指人们日常使用的语言,可以是汉语、英语或其它语言。英语或其它语言。伪代码:是用介于自然语言和计算机语言之间的文字和伪代码:是用介于自然语言和计算机语言之间的文字和符号(包括数学符号)来描述算法。符号(包括数学符号)来描述算法。例如:例例如:例6.1可用如下的伪代码表示可用如下的伪代码表示Begin(算法
6、开始)算法开始)输入输入 A,B,C IF AB 则则 AMax 否则否则 BMax IF CMax 则则 CMaxPrint MaxEnd(算法结束算法结束)二、二、用用传统传统流程图表示算法流程图表示算法处理框起止框I/O框判断框流程线连接点1、传统流程图中的基本符号、传统流程图中的基本符号2、三种基本结构的传统表示、三种基本结构的传统表示(1)顺序结构)顺序结构条件语句1语句2YN语句1语句2(2)选择结构)选择结构条件(a)条件语句组(3)循环结构)循环结构a)当型当型循环循环b)直到循环直到循环YNYN(b)语句组三种基本结构的特点:三种基本结构的特点:(1)只有一个入口)只有一个入
7、口(2)只有一个出口)只有一个出口(3)不存在死语句)不存在死语句(4)不存在死循环)不存在死循环例:例:例例6.2输入输入10个数,打印输出其中的最大的数的流程图个数,打印输出其中的最大的数的流程图从从10个数中选出最大的数的流程图个数中选出最大的数的流程图NMaxMax=A输入A开始再输入给AN=N+1打印Max结束YNNY6.1.4 用用NS流程图表示算法流程图表示算法 将将全部算法写在一个矩形框内,在矩形内还可包含其全部算法写在一个矩形框内,在矩形内还可包含其它从属于它的框它从属于它的框三种三种基本结构的基本结构的NS图表示:图表示:语句A语句B语句A语句B条件YN1、顺序结构、顺序结
8、构2、选择结构、选择结构语句组(3)循环结构)循环结构a)当型当型循环循环b)直到循环直到循环当条件成立语句组直到当条件成立例:例:画出从画出从10个数中选出最大的数的个数中选出最大的数的NS 流程图流程图(a)(b)传统流程图NMaxMax=A输入A开始再输入给AN=N+1打印Max结束YNNY输入A当N=MaxYNPrivate Sub Form_Click()Dim a%,max%,i%max=a For i=1 To 10 a=Val(InputBox(A=?)If a max Then max=a Next i Print Max=;maxEnd Sub 最后需要说明的是:上面介绍的
9、算法表示是给人看的,最后需要说明的是:上面介绍的算法表示是给人看的,即是为帮助程序开发人员阅读、编写程序而设计的一种辅即是为帮助程序开发人员阅读、编写程序而设计的一种辅助工具,程序则必须符一计算机语言的语法规则。助工具,程序则必须符一计算机语言的语法规则。下面是例下面是例6.2的计算机的计算机 程序,即为用计算机语言表示算程序,即为用计算机语言表示算法:法:6.1.5 结构化程序设计方法(补充)结构化程序设计方法(补充)(一)用计算机解决问题的过程(一)用计算机解决问题的过程提出、分提出、分析问题析问题确定算确定算法模型法模型设计设计算法算法编写编写程序程序调试调试程序程序分析输分析输出结果出
10、结果正确正确合理合理结束结束不正确不正确(二)结构化程序设计思想(二)结构化程序设计思想自顶自顶向下、逐步细化、模块化向下、逐步细化、模块化自顶自顶向下:向下:先从全局、整体设计先从全局、整体设计逐步细化:逐步细化:将一个问题分解成几个较小的问题解决将一个问题分解成几个较小的问题解决模块化:模块化:将一个大任务分解成若干个较小的部分,将一个大任务分解成若干个较小的部分,每每 个部分承担一定功能,称为个部分承担一定功能,称为“功能模功能模块块”例:给例:给100个整数,打印输出其中的素数个整数,打印输出其中的素数S1NS流程图流程图输入输入100个数存入个数存入X1,x2,x100打印打印x1.
11、x100中中不等于不等于0的数的数让让x1,x2,x100中的非素变为中的非素变为0S3S2输入输入xi当当i=100i=i+1i=1S1细化细化xi0当当i=100i=i+1i=1YN打印打印xiS3细化细化S1NS流程图流程图输入输入100个数存入个数存入X1,x2,x100打印打印x1.x100中中不等于不等于0的数的数让让x1,x100中的中的非素变为非素变为0S3S2S2细化细化判断判断xi是否是素数,是否是素数,若不是则将若不是则将xi=0当当i=100i=i+1i=1S21r=0rxi/2S21细化细化输入输入100个数存入个数存入X1,x2,x100打印打印x1.x100中中不
12、等于不等于0的数的数让让x1,x100中中的非素变为的非素变为0细化后的流程图细化后的流程图输入输入xi当当i=100i=i+1i=1当当ixi/2i=i+1xi0当当i=100i=1YN打印打印xii=i+16.2 顺序结构顺序结构6.2.1 6.2.1 赋值语句赋值语句 形式形式:变量名表达式变量名表达式 对象对象.属性表达式属性表达式 功能:功能:将表达式的值赋值给变量名或指定对象的属性。将表达式的值赋值给变量名或指定对象的属性。一般用于给变量赋值或对控件设定属性值一般用于给变量赋值或对控件设定属性值.例:例:sRate!=0.1 Text1.Text 欢迎使用欢迎使用Visual Ba
13、sic 6.0”说明:说明:1.执行过程:先求表达式的值,然后将值赋值给左边的变量。执行过程:先求表达式的值,然后将值赋值给左边的变量。2.右边表达式可以是变量、常量、函数调用等特殊的表达式。右边表达式可以是变量、常量、函数调用等特殊的表达式。3.不要将不要将“”理解为数学上的等号:理解为数学上的等号:A=A+1 是表示将是表示将A单元的值加后以放回到单元的值加后以放回到A单元。单元。执行过程如右图执行过程如右图4赋值符号赋值符号“=”左边一定左边一定只能只能是变量名或对象的属性是变量名或对象的属性引用,不能是常量、符号常量、表达式。引用,不能是常量、符号常量、表达式。下面的赋值语句都是错的:
14、下面的赋值语句都是错的:5=X 左边是常量。左边是常量。Abs(X)=20 左边是函数调用,即是表达式。左边是函数调用,即是表达式。5.赋值符号赋值符号“=”两边的数据类型一般要求应一致。两边的数据类型一般要求应一致。具体规则(具体规则(P77)6.2.2 注释语句注释语句 其语法格式为:其语法格式为:Rem 或或 说明:说明:1.指要包括的任何注释文本。在指要包括的任何注释文本。在Rem关键字关键字和注释内容之间要加一个空格。可以用一个英文单引号和注释内容之间要加一个空格。可以用一个英文单引号“”来代替来代替Rem关键字。关键字。2.如果在其他语句行后面使用如果在其他语句行后面使用Rem关键
15、字,必需用冒号关键字,必需用冒号(:)与语句隔开。若用英文单引号与语句隔开。若用英文单引号“”,则在其他语句行,则在其他语句行后面不必加冒号后面不必加冒号(:)。例如:例如:Const PI=3.1415925 符号常量符号常量PIS=PI*r*r :Rem计算圆的面积计算圆的面积6.3 选择结构选择结构 1.IfThen语句语句(单分支结构单分支结构)If Then 语句块语句块 End If 或或 If Then tyx图1-3-8 两 个 数 交 换过 程例例:已知两个数已知两个数x和和y,比较它们的比较它们的大小,大小,使得使得x大于大于y.If xy Then t=x:x=y:y=t
16、 End If 或或 If xy Then t=x:x=y:y=t2.IfThenElse语句语句(双分支结构双分支结构)If Then Else End If If Then Else 例如:输出例如:输出x,y两个中值较大的一个值。两个中值较大的一个值。IF XY Then Print XElse Print YEnd If也可以写成如下的单行形式:也可以写成如下的单行形式:IF XY Then Print X Else Print Y 双分支选择结构执行过程双分支选择结构执行过程 3.IfThenElseIf语句语句(多分支结构多分支结构)形式形式:If Then Else If The
17、n Else 语句块语句块 n+1 End If 例:输入一学生成绩,评定其等级。方法是:例:输入一学生成绩,评定其等级。方法是:90100分为分为“优秀优秀”,8089分为分为“良好良好”,7079分为分为“中等中等”,6069分为分为“及格及格”,60分以为分以为“不合格不合格”执行过程使用使用IF语句实现的程序段如下:语句实现的程序段如下:If x=90 thenPrint 优秀优秀ElseIf x=80 ThenPrint 良好良好ElseIf x=70 ThenPrint 中等中等ElseIf x=60 ThenPrint 及格及格ElsePrint 不及格不及格End If6.3.
18、2 Select Case语句(条件分支)语句(条件分支)形式:形式:Select Case 变量或表达式变量或表达式Case 表达式列表表达式列表1语句块语句块1Case 表达式列表表达式列表2语句块语句块2Case Else语句块语句块n+1End Select:与:与同类型的下面四种形式之一:同类型的下面四种形式之一:1.表达式表达式 A+52.一组枚举表达式一组枚举表达式(用逗号分隔用逗号分隔)2,4,6,8 3.表达式表达式1 To 表达式表达式2 60 to 1004.Is 关系运算符表达式关系运算符表达式 Is 60数值型或字符串表达式将例将例6.3 使用使用select cas
19、e.语句来实现的程序段如下:语句来实现的程序段如下:Select Case x Case 90 to 100 Print 优秀优秀 Case 80 to 89 Print 良好良好 Case 70 to 79 Print 中等中等 Case 60 to 69 Print 及格及格 Case Else Print 不及格不及格End Select补补充例题:充例题:设计一个由计算机来当小学低年级学生算术老师设计一个由计算机来当小学低年级学生算术老师的的VB应用程序,要求给出一系列的两个应用程序,要求给出一系列的两个110数的四则运算数的四则运算的算术题,学生输入该题的答案,计算机根据学生的答案判
20、的算术题,学生输入该题的答案,计算机根据学生的答案判断正确与否,并给出成绩,单击结束命令按钮,退出应用程断正确与否,并给出成绩,单击结束命令按钮,退出应用程序。序。分析分析:产生产生110操作数,可通过操作数,可通过Int(10*Rnd+1)实现实现 6.3.3 选择结构的嵌套选择结构的嵌套 在在IF语句的语句的Then分支和分支和Else分支中可以完整地嵌套另一分支中可以完整地嵌套另一IF语句或语句或Select Case语句,同样语句,同样Select Case语句每一个语句每一个Case分分支中都可嵌套另一支中都可嵌套另一IF语句或另一语句或另一Select Case语句。下面是两种语句
21、。下面是两种正确的嵌套形式:正确的嵌套形式:(1)IF Then .if Then Else .End If .Else .IF Then .Else .End If .End IF(2)IF Then .Select Case Case IF Then Else .End If Case.End Select .End IF注意:注意:只要在一个分支内嵌套,不出现交叉,满足结构只要在一个分支内嵌套,不出现交叉,满足结构规则,其嵌套的形式将有很多种,嵌套层次也可以任意规则,其嵌套的形式将有很多种,嵌套层次也可以任意多。多。对于多层对于多层IF嵌套结构中,要特别注意嵌套结构中,要特别注意IF与与
22、Else的配的配对关系,一个对关系,一个Else必须与必须与IF配结,配对的原则是:在写配结,配对的原则是:在写含有多层嵌套的程序时,建议使用缩进对齐方式,这样含有多层嵌套的程序时,建议使用缩进对齐方式,这样容易阅读和维护。容易阅读和维护。6.4 6.4 循环结构循环结构1.For循环语句循环语句(一般用于循环次数已知一般用于循环次数已知)形式形式 For 循环变量初值循环变量初值 to 终值终值 Step 步长步长 语句块语句块Exit For 语句块语句块 Next 循环变量循环变量 循环变量在终值内 图 1-3-13 For 循环语句 语句块 Exit For 语句块 循环变量加步长 T
23、 F 循 环 变 量 得 初值 循环体循环体 0 初值初值终值终值 =1 时时,可省略可省略终值终值=0 死循环死循环 步长步长循环次数循环次数)1(步长初值终值Int例例:For I=2 To 13 Step 3 Print I,Next I Print“I=“,I 4)1(3213Int循环执行次数循环执行次数 输出输出I的值分别为的值分别为:2 5 8 11 出了循环输出为出了循环输出为:I=14例例6.5 编程计算:编程计算:S=1+2+3+100Dim S%,I%S=0 累加前变量累加前变量S为为0For I=1 to 100 S=S+INext IPrint S=,S 当当N=10
24、0N=N+1打印打印SS=0,N=1S=S+N例例4-5的算法流程图的算法流程图形式形式1:(当型循环):(当型循环)Do While|Until 语句块语句块 Exit Do 语句块语句块 Loop 条 件 F T F T E x it D o 语 句 块 语 句 块 E x it D o 语 句 块 语 句 块 表 达 式 列 表 1 图 1-3-1 6 D o L o o p W h ile D o W h ile L o o p执 行 过 程 6.4.2 DoLoop循环语句循环语句 形式形式2:(直到循环)直到循环)Do 语句块语句块 Exit Do 语句块语句块Loop While
25、|Until 表 达 式 列 表 1 F T F T E x it D o 语 句 块 语 句 块 E x it D o 语 句 块 语 句 块 条 件 D o L o o p W h ile的 执 行 过 程 图 1-3-1 5 D o W h ile L o o p 条 件语句块语句块TFExit Do条 件语句块语句块TFExit Do Do UntilLoop执行过程执行过程 DoLoop Until执行过程执行过程 说明:说明:(1 1)当使用)当使用WhileWhile 构成循环时,当条件为构成循环时,当条件为“真真”则反复执行循环体,当条件为则反复执行循环体,当条件为“假假”,则
26、退出循环。,则退出循环。(2)当使用)当使用Until 构成循环时,当条件为构成循环时,当条件为“假假”,则反复执行循环体,直到条件成立,即为,则反复执行循环体,直到条件成立,即为“真真”时,时,则退出循环。则退出循环。(3 3)在循环体内一般应有一个专门用来改变条件表达式中)在循环体内一般应有一个专门用来改变条件表达式中 变量的语句,以使随着循环的执行,条件趋于不成立变量的语句,以使随着循环的执行,条件趋于不成立 (或成立),最后达到退出循环。(或成立),最后达到退出循环。(4)语句)语句Exit Do的作用是退出它所在的循环结构,它只能的作用是退出它所在的循环结构,它只能 用在用在DO/L
27、oop结构中,并且常常是同选择结构一起出现在循结构中,并且常常是同选择结构一起出现在循环结构中,用来实现当满足某一条件时提前退出循环。环结构中,用来实现当满足某一条件时提前退出循环。6.4.3 WhileWend语句语句使用格式如下:使用格式如下:While Wend 说明:说明:该语句的功能与该语句的功能与Do While.Loop实现实现的循环完全相同。的循环完全相同。例:用例:用doLoop语句改写前面的例题语句改写前面的例题6.5例例6.7 求两个整数的最大公约数、最小公倍数求两个整数的最大公约数、最小公倍数Dim n%,m%,nm%,r%m=Val(InputBox(m=)n=Val
28、(InputBox(n=)nm=n*mIf mn Then t=m:m=n:n=t r=m mod n Do While(r 0)m=n n=r r=m mod n LoopPrint 最大公约数最大公约数=,n Print 最小公倍数最小公倍数=,nm/n 算法使用转碾除法,流程图如右,算法使用转碾除法,流程图如右,实现的程序代码如下:实现的程序代码如下:6.4.4 循环的嵌套循环的嵌套多重循环结构多重循环结构 如果在一个循环内完整地包含另一个循环结构,则称如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,为多重循环,或循环嵌套,嵌套的层数可以
29、根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。嵌套一层称为二重循环,嵌套二层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:几种常见的二重嵌套形式:(1)For I=.For J=.Next J .Next I(2)For I=.Do While/Until.Loop .Next I(3)Do While.For J=.Next J .Loop(4)Do While/Until.Do While/Until.Loop .Loop例如例如:打印九九乘法表打印九九乘法表.For i=1 To 9 For
30、j=1 To 9 se=i&j&=&i*j Picture1.Print Tab(j-1)*9+1);se;Next j Picture1.Print Next i对于循环的嵌套,要注意以下事项:对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环不能从循环体外转向循环体内,也不能从外循环转向内循环.正正 确确错错 误误 For ii=1 To 10 For jj=1 To 20 Next ii Next jj
31、 For ii=1 To 10 For ii=1 To 20 Next ii Next ii For ii=1 To 10 For jj=1 To 20 Next jj Next ii For ii=1 To 10 Next ii For ii=1 To 10 Next ii 6.4.5 几种循环语句比较几种循环语句比较 For.toNextDo while/until.Loopdo.Loop While/until.循环类型当型循环当型循环直到循环循环控制条件循环变量大于或小于终值条件成立/不成立执行循环条件成立/不成立执行循环循环变量初值在 FOR 语句行中在 DO 之前在 DO 之前使循
32、环结束For 语句中无需专门语句必须用专门语句必须使用专门语句使用场合循环次数容易确定循环/结束控制条件易给出循环/结束控制条件易给出6.4.6 循环结构与选择结构的嵌套循环结构与选择结构的嵌套 在循环结构中可以完整嵌套选择结构即整个选择结在循环结构中可以完整嵌套选择结构即整个选择结构都属于循环体。在选择结构中嵌套循环结构时,则要构都属于循环体。在选择结构中嵌套循环结构时,则要求整个循环结构必须完整地嵌套在一个分支内,一个循求整个循环结构必须完整地嵌套在一个分支内,一个循环结构不允许出现在两个或两个以上的分支内。环结构不允许出现在两个或两个以上的分支内。(1)For I=IF Then End
33、 IF Next I(6)IF Then For I=End IF Next I(5)Select Case For I=Case Case Next I End Select(3)For I=IF Then Next I End IF(2)IF Then For I=Next I End IF0(4)For I=Select Case Case Case End Select Next I6.5 6.5 其它控制语句其它控制语句 6.5.1 Goto 语句语句 形式形式:Go To 标号标号|行号行号 作用是无条件地转移到标号或行号指定的那行语句作用是无条件地转移到标号或行号指定的那行语句.
34、标号是一个字符序列标号是一个字符序列,行号是一个数字序列。行号是一个数字序列。例例 求求100以内的素数以内的素数 判别某数判别某数m是否为素数最简单的方法是是否为素数最简单的方法是:对于对于m 从从i=2,3,m-1判别判别m能否被能否被i整除,只要有整除,只要有一个能整除一个能整除,m不是素数,否则不是素数,否则m是素数。是素数。For m=2 To 100 For i=2 To m-1 If(m Mod i)=0 Then GoTo NotNextM Next i Print m NotNextM:Next m6.5.2 Exit 语句语句 Exit 语句用于退出语句用于退出 Do.Lo
35、op、For.Next、Function或或Sub代码块。代码块。对应的使用格式为:对应的使用格式为:Exit Do、Exit For、Exit Function、Exit Sub。分别表示退出分别表示退出DO循环、循环、For循环、函循环、函数过程、子过程。数过程、子过程。例如:例如:下面的例子是使用下面的例子是使用 Exit 语句退出语句退出 For.Next 循环、循环、Do.Loop 循环及子过程。循环及子过程。Private Sub Form_Click()Dim I%,Num%Do 建立无穷循环。建立无穷循环。For I=1 To 100 循环循环 100 次。次。Num=Int(
36、Rnd*100)生成一个生成一个099的随机数。的随机数。Select Case Num Case 10:Exit For 退出退出 For.Next 循环。循环。Case 50:Exit Do 退出退出 Do.Loop 循环。循环。Case 64:Exit Sub 退出子过程。退出子过程。End Select Next I LoopEnd Sub6.5.3 End 语句语句 形式:形式:End 功能:结束一个程序的运行。功能:结束一个程序的运行。在在Visual Basic中还有多种形式的中还有多种形式的End语句,用于结语句,用于结束一个程序块或过程。束一个程序块或过程。其形式有:其形式有
37、:End If End Select End Type End With End Sub End Function等等它们与对应的语句配对使用。它们与对应的语句配对使用。6.5.4 暂停语句暂停语句 Stop语句用来暂停程序的执行,相当于在事件代码中语句用来暂停程序的执行,相当于在事件代码中设置断点。设置断点。语法格式为:语法格式为:Stop说明:说明:1.Stop语句的主要作用是把解释程序置为中断语句的主要作用是把解释程序置为中断(Break)模式,模式,以便对程序进行检查和调试。可以在程序的任何地方放置以便对程序进行检查和调试。可以在程序的任何地方放置Stop语句,当执行语句,当执行Sto
38、p语句时,系统将自动打开立即窗口。语句时,系统将自动打开立即窗口。2.与与End语句不同。语句不同。6.5.5 With.End With 语句语句 形式:形式:With 对象名对象名 语句块语句块 End With 说明:说明:With 语句可以对某个对象执行一系列的语句,语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。而不用重复指出对象的名称。例如,要改变一个对象的多个例如,要改变一个对象的多个属性属性,可以在可以在 With 控制控制结构中加上属性的赋值语句,这时候只是引用对象一次而不结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例
39、子显示了如何使是在每个属性赋值时都要引用它。下面的例子显示了如何使用用 With 语句来给同一个对象的几个属性赋值。语句来给同一个对象的几个属性赋值。例如,需要对同一对象设置几个属性。途径之一是使用多条例如,需要对同一对象设置几个属性。途径之一是使用多条语句。语句。Private Sub Form_Load()Command1.Caption=退出退出(E&xit)Command1.Top=500Command1.Left=4500Command1.Enabled=TrueEnd Sub使用使用With.End With 语句,上面程序的代码如下。语句,上面程序的代码如下。Private Su
40、b Form_Load()With Command1.Caption=OK.Top=500.Left=4500.Enabled=TrueEnd WithEnd Sub 6.6 应用程序举例应用程序举例6.6.1 素数与哥德巴赫猜想素数与哥德巴赫猜想 判断一个给定的整数是否为素数。判断一个给定的整数是否为素数。算法思路:素数指除了能被算法思路:素数指除了能被1和自身外,不能被其和自身外,不能被其他整数整除的自然数。判断整数他整数整除的自然数。判断整数N是不是素数的基本方是不是素数的基本方法是:将法是:将N分别除以分别除以2,3,N-1,若都不能整除,若都不能整除,则则N为素数。因为为素数。因为N
41、=Sqr(N)*Sqr(N),所以,当所以,当N能被能被大于等于大于等于Sqr(N)的整数整除时,一定存在一个小于等于的整数整除时,一定存在一个小于等于Sqr(N)的整数,使的整数,使N能被它整除,因此只要判断能被它整除,因此只要判断N能否能否被被2,3,Sqr(N)整除即可。整除即可。算法流程图如下算法流程图如下:Dim N%,I%,K%N=Val(InputBox(N=?)K=Int(Sqr(N)For I=2 To K If N Mod I=0 Then Exit ForNext IIf IK Then Print N;是素数是素数Else Print N;不是素数不是素数End If
42、验证哥德巴赫猜想验证哥德巴赫猜想:一个大于等于:一个大于等于6的偶数可以表示为两个素的偶数可以表示为两个素数之和。例如:数之和。例如:6=3+3 8=3+5 10=3+7 算法设计:算法设计:设设N为大于等于为大于等于6的的任一偶数,将其分解为任一偶数,将其分解为N1和和N2两两个数,使用个数,使用N1+N2=N,分别判断分别判断N1和和N2是否为素数,若都是,则是否为素数,若都是,则为一组解。若为一组解。若N1不是素数,就不必不是素数,就不必再检查再检查N2是否素数。先从是否素数。先从N1=3开开始,直到始,直到N1=N/2为止。算法流程图为止。算法流程图如图如图4-29所示。将程序代码写到
43、窗所示。将程序代码写到窗体的单击事件中。体的单击事件中。实现上面算法的程序代码如下:实现上面算法的程序代码如下:Private Sub Form_Click()Dim N%,N1%,N2%,I%,K1%,K2%N=Val(InputBox(输入大于输入大于6的偶数的偶数)For N1=3 To N 2 Step 2 K1=Int(Sqr(N1)For I=2 To K1 判断判断N1是否是素数是否是素数 If N1 Mod I=0 Then Exit For Next I If I K1 Then 如果如果N1为素数,将为素数,将N分解为分解为N1+N2 N2=N-N1 K2=Int(Sqr(
44、N2)For I=2 To K2 判断判断N2是否是素数是否是素数 If N2 Mod I=0 Then Exit For Next I If I K2 Then 如果如果N2也为素数,则打印输出也为素数,则打印输出 Print N&=&N1&+&N2 End If End If Next N1End Sub6.6.2 字符串处理字符串处理例例6.12 统计文本框中英文单词的个数。统计文本框中英文单词的个数。算法设计算法设计(1)从文本(字符串)的左边开始,取出一个字符;设逻)从文本(字符串)的左边开始,取出一个字符;设逻辑量辑量WT表示所取字符是否是单词内的字符,初值设为表示所取字符是否是单
45、词内的字符,初值设为False。(2)若所取字符不是若所取字符不是“空格空格”、“逗号逗号”、“分号分号”或或“感叹号感叹号”等单词的分隔符,再判断等单词的分隔符,再判断WT是否为是否为True,若若WT不为不为True,则表示新单词的开始,让单词数则表示新单词的开始,让单词数Nw=Nw+1;让让WT=True。(3)若所取字符是若所取字符是“空格空格”、“逗号逗号”、“分号分号”或或“感感叹号叹号”等单词的分隔符,则表示字符不是单词内字符,让等单词的分隔符,则表示字符不是单词内字符,让WT=False。(4)再依次取下一个字符,重复(再依次取下一个字符,重复(2)()(3)步直到文本结)步直
46、到文本结束。束。例例6.13 字符的加密和解密字符的加密和解密加密算法是:加密算法是:将每个字母将每个字母C加(或减)一序数加(或减)一序数K,即用它后的第即用它后的第K个字个字母代替,变换式公式:母代替,变换式公式:c=chr(Asc(c)+k)例如:设序数例如:设序数k为为5,这时,这时 A F,a f,B G 当加序数后的字母超过当加序数后的字母超过Z或或z则则 c=Chr(Asc(c)+k-26)例如:例如:You are good Dtz fwj ltti 解密算法:解密算法:解密为加密的逆过程解密为加密的逆过程 将每个字母将每个字母C减(或加)一序数减(或加)一序数K,即即 c=c
47、hr(Asc(c)-k),例如:序数例如:序数k为为5,这时,这时 ZU,zu,YT当加序数后的字母小于当加序数后的字母小于A或或a则则 c=Chr(Asc(c)-k+26)迭代法在数学上也称迭代法在数学上也称“递推法递推法”,凡是由一给定的初,凡是由一给定的初值,通过某一算法(公式)可求得新值,再由新值按照同值,通过某一算法(公式)可求得新值,再由新值按照同样的算法又可求得另一个新值,这样经过有限次即可求得样的算法又可求得另一个新值,这样经过有限次即可求得其解。其解。6.6.3 迭代法迭代法 例例6.14 用迭代法求某个数的平方根。用迭代法求某个数的平方根。已知求平方根的迭代公式为:已知求平方根的迭代公式为:)(21001xaxx算法思想如下:算法思想如下:设平方根的解为设平方根的解为x,可假定一个初值可假定一个初值x0=a/2(估计值估计值),根据迭代公式得到一个新的值根据迭代公式得到一个新的值x1,这个新值这个新值x1比初值比初值x0更更接近要求的值接近要求的值x;再以新值作为初值,即:再以新值作为初值,即:x1x0,重新重新按原来的方法求按原来的方法求x1,重复这一过程直到重复这一过程直到|x1-x0|(某一给定某一给定的精度的精度)。此时可将。此时可将x1作为问题的解。作为问题的解。作业:作业:课后选择、程序阅读做在书上课后选择、程序阅读做在书上