VB讲课笔记07:控制结构

VB讲课笔记07:控制结构

学习目标:掌握顺序结构,选择结构和循环结构,以及与三种基本结构相关的 VB 语句的用法,掌握结构化程序设计与面向对象程序设计中,程序的组织和控制方式,掌握 VB 编程的方法和步骤。

一、结构化设计概述
结构化程序设计=数据结构+算法
数据结构(数据结构)主要指数据的存贮组织方式,即采用何种数据类型来存贮程序中将要处理的数据。
算法(运算法则)是指计算机解决问题的方法和步骤。算法是程序设计的灵魂,没有算法,就不能进行程序设计。
(一)算法概述
1、算法的定义
        算法是在有限步骤内解决问题的方法和步骤。不同的问题有不同的求解算法,例如求二元一次方程的根与求 N !,而同一个问题,可能存在多种方法,这时就要选择简单,运算步骤少,效率高的方法。

( 1 )有穷性:算法的执行步骤是有限的。
( 2 )确定性:每一操作步骤的内容和顺序有确切含义。
( 3 )有效性:每一步操作应当有效地执行,并得到确定的结果。
( 4 )有零个或多个输入:为数据获取信息。
( 5 )有一个或多个输出:没有输出的算法没有意义。

2、算法的描述
算法可以用自然语言、流程图、 N-S 图、伪代码和程序设计语言等来描述。用自然语言来描述算法,文字冗长,容易出现岐意。下面介绍用流程图,N-S 图来表示算法。


表示sum=1+2+3+ …+10的算法

1、传统流程图


2、N-S流程图


(二)VB程序控制结构

1、顺序结构

有一个入口和一个出口。按从上向下依的顺序执行各语句。


2、选择结构

程序发生分支,根据判断框内的条件是否被满足来选择执行一块还是执行 B 块。无论条件是否被满足,只能选择执行一或 B 中之一,不能执行完一块后又执行 B 块无论走哪条路径,都要经过 C 点,然后脱离本选择结构框。




3、循环结构

也叫“重复结构”,反复执行某段代码。

当型循环结构:当条件成立时,执行循环体。  

直到型循环结构:当条件成立,退出循环体。





4、三种结构的共同点

( 1 )只有一个入口;

( 2 )只有一个出口;

( 3 )结构内的每一部分都有机会被执行,对每一个虚线框都应有一条从入口到出口的路径,即没有死语句(永远执行不到的语句);

( 4 )结构内没有死循环(不能终止的循环);

由三种基本结构实现程序的组织和控制,可以描述任何复杂的问题在具体编程时,每种结构中都可以包含若干条语句。

二、顺序结构

顺序结构主要由赋值语句,输入、输出等语句组成,是三种基本结构中最简单的一种结构。在顺序结构的程序中,按各语句出现的顺序依次执行程序,程序中不出现分支情况。即要执行第 n 条语句,必须先执行第 n-1 条语句。

1、赋值语句

赋值语句是程序中最基本的语句。

(1)格式:[Let ]<变量名 > = <表达式 > 或 [<对象名 >. ]<属性名 > = <表达式 >

(2)功能:将赋值号右边表达式的值赋给左边的变量。

(3)赋值运算的优先级最低。在VB中,若有 a = b = 5 ,a = ?

(4)“表达式“可以是常量、变量、函数调用或 VB 中的各种表达式。

(5)赋值语句有计算的功能。执行赋值语句时,首先计算赋值号右边表达式的值,然后将此值赋给左边的变量或对象属性。

2、注释语句

格式 1 :Rem <注释内容 >
格式 2 :'注释内容
功能:为程序加上注释内容,便于理解程序。


3、暂停语句

Stop语句,暂停程序执行,并打开立即执行窗口。Stop可以放在程序的任何位置。当程序执行碰到停止语句,系统会暂停执行,同时打开立即执行窗口,以便跟踪程序。当程序调试完毕,生成可执行文件(. exe 文件)前,应删除所有停止语句。

4、结束语句

End语句,结束程序运行。结束语句能强行中止程序执行,释放所有变量,关闭所有数据文件。

5、With …End With命令 
(1)格式
With 对象名
            [ 语句序列 ]

End With

(2)功能    

    With语句可以对某个对象执行一系列语句,而不用重复指出对象名称。


三、选择结构

(一)If语句
If 语句是选择结构主要使用的语句。If 语句有四种形式:行If语句、块If语句、If嵌套、If延拓。

1、行 If 语句
(1)格式:If <条件 > Then < 语句 1>[ Else < 语句 2>]
(2)功能:如果条件成立,执行Then后面的语句,否则执行Else后面语句或下一条语句。

选择题真题操练


2、块If语句

(1)格式

If <条件 > Then
  < 语句组 1 >
[ Else
< 语句组 2 >]
End If
(2)功能
当条件为“真”,执行语句组 1 ,否则执行语句组 2。
(3)说明
  • 块结构增加了End If作为块的结束语句;
  • Then和Else后面必须断行。
案例:闰年判断





3、If嵌套结构
If < 条件 1> Then
If < 条件 2> Then
...
End If
[Else
...]
End If

4、If延拓结构
If < 条件 1>  Then
<语句组 1>
ElseIf< 条件 2> Then
<语句组 2>
ElseIf< 条件 3> Then
<语句组 3>
...
[Else
[语句组 N+1]
End If

选择题真题演练


教学案例:判定成绩等级

(1)设计用户界面


(2)编写事件处理代码



(3)运行程序,测试效果





3、IIf 函数
(1)格式
IIf (条件表达式,值 1 ,值 2 )
(2)功能
    由条件表达式的值是否被满足来决定返回值 1 还是返回值 2 。
(3)用法
变量名 =IIf(条件表达式,值1,值2)
        若条件成立,将值 1 赋给变量,条件不成立,将值 2 赋给变量。


4、Choose函数

(1)Choose函数的格式

Choose(索引表达式,选择项目 1[, 选择项目 2,... [,选择项目 n]])

(2)Choose函数的功能
    根据索引表达式的值,从可选项目列表中选择并返回一个值。
(3)Choose函数的用法
    变量名 =Choose(表达式,选项 1 ,选项 2 ,…)
    若表达式的值为 1 ,将选项 1 的值赋给变量,若为 2 ,将选项 2 的值赋给变量…。













5、情况测试结构
(1)格式
        Selete Case <测试表达式 >
             Case <测试值 1>
          <语句组 1>
               Case <测试值 2>
          <语句组 2>
        ……
       Case < 测试值 n>
          <语句组 n>
        [Case Else
          < 语句组 n+1>]
          End Select

(2)功能
    测试指定表达式的值。若表达式的值与某一Case给出的测试值一致,执行Case语句下面的语句组,执行完后跳过End Select语句,执行下一个语句。
(3)说明
“测试表达式”可以是数值表达式或字符串表达式。“ 测试值” 必须与测试表达式的类型相同。当测试表达式的值与某个测试值相同时,执行该Case分支的语句。该语句与If延拓结构相似,对多个能满足的值,只执行第一个Case下面的语句序列。
(4)测试值三种情况
① 常量 1[ ,常量 2] … 表示某个值
② 常量 1 To 常量 2 表示范围
③ Is 表达式 表示条件

案例:利用情况测试结构判定成绩等级





这个程序有一个小Bug,你能找出来吗?

选择题真题演练
四、循环结构
在指定条件下重复执行的一组语句的程序控制结构称为循环结构,多次重复执行的一组语句叫循环体。在 VB 中每一种循环控制方式都涉及三个方面的内容:循环初始条件、循环继续条件及循环的控制、循环体的算法。
1、While …Wend循环语句(当型循环)
(1)格式
      While < 循环条件 >
  [ 循环体 ]
Wend
(2)功能
    当条件满足时执行循环体,条件不满足则不执行循环。

2、Do-Loop循环
(1)Do While格式(前测试当型循环)
Do While < 循环条件 >
    < 循环体 > 
    [ Exit Do ]        
Loop

(2)Do Until格式(前测试直到型循环)
        Do Until < 循环条件 >
< 循环体 > 
    [ Exit Do ]        
Loop

(3)Loop While格式(后测试当型循环)
        Do 
    < 循环体 > 
    [Exit Do ]        
Loop While < 循环条件 >

(4)Loop Until格式(后测试直到型循环)
        Do 
< 循环体 > 
    [ Exit Do ]        
Loop Until < 循环条件 >

3、For...Next循环(计数循环)
(1)格式
For  X = a To b [Step c]
[ …… ]
[ Exit For ]
[ …… ]
      Next [ X ]
(2)功能
    以指定次数来重复执行循环体。 

说明:当型循环是条件满足时执行循环,条件不满足时结束循环;直到型循环相反,条件不满足时执行循环,条件满足时结束循环。前测试循环可以一次循环也不执行,而后测试循环至少要执行一次循环。

案例1:利用各种循环格式计算1+2+……+100。

(1)创建工程,更名为“利用各种循环进行等差数列求和”,添加五个按钮,设置名称和标题属性


(2)编写【利用While Wend循环求和】按钮单击事件处理代码


(3)编写【利用Do While循环求和】按钮单击事件处理代码


(4)编写【利用Do Until循环求和】按钮单击事件处理代码


(5)编写【利用Loop While循环求和】按钮单击事件处理代码


(6)编写【利用Loop Until循环求和】按钮单击事件处理代码


(7)运行程序,测试效果







4、循环嵌套

在一个循环结构的循环体中包含另外一个循环结构,称为循环嵌套(或称多重循环)。
(1)内外循环不能相交。循环嵌套时,内层循环的结束语句必须放在外层循环的结束语句之前。下表中列出了循环嵌套正确和不正确的几种情况。
(2)循环嵌套中,每个循环的循环控制变量是唯一的。
(3)当程序中For…Next和Goto语句同时存在时,只能从内层循环转到外层循环,不能从外转向内。

案例1:打印九九表
(1)创建工程,更名为“打印九九表”,添加一个按钮,设置名称与标题属性

(2)编写【打印】按钮单击事件处理代码


(3)运行程序,单击【打印】按钮


案例2:百钱买百鸡问题

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

(1)创建工程,更名为“求解百钱买鸡问题”


(2)编写【求解】按钮单击事件处理代码


(3)运行程序,单击【求解】按钮


案例3:打印100以内的全部素数。


选择题真题演练




第1次循环,i=6,Arr(6)=6-3=3

第2次循环,i=7,Arr(7)=7-3=4

第3次循环,i=8,Arr(8)=8-3=5

第4次循环,i=9,Arr(9)=9-3=6

第5次循环,i=10,Arr(10)=10-3=7

Arr(6) + Arr(Arr(6) + Arr(10))=3+Arr(3+7)=3+Arr(10)=3+7=10


单击命令按钮Command1,输入2355270224,输出结果是( )。

本题涉及到循环、数组、字符串截取等知识点。

输入2355270224,则x="2355270224"

Len(x)=10,for循环要进行10次循环。

第1次循环,k=1,b=Mid(x,1,1)="2",a(2+1)=a(2+1)+1,那么a(3)=a(3)+1=0+1=1

没有必要傻傻地这样循环下去,应该理解这次循环究竟干了什么事情。截取的数字是2,那么a(3)就要累加1,那么我们看看整个输入的字符串里包含了多少个“2”,结果发现有4个2,因此,最后a(3)应该是4。我们浏览一下四个选项,发现第三个数组元素为4的只有选项A,因此我们很容易得到正确的选择。