程序的基本结构专题
任何正规的程序都可以分解为三种基本结构,即顺序结构、选择结构和循环结构。牢固掌握这三种基本结构,是学习程序设计的基本要求,是编写出结构清晰、易读易懂的程序的前提。通过学习,你应能做到:
■ 掌握顺序、选择、循环三种基本结构
■ 会画或补充三种基本结构的流程图
■ 能够使用三种基本结构编写简单的程序解决具体问题
(1)顺序结构
如图2 -22所示,有两个锥形瓶,1号瓶里面装的是溴水,2 号瓶里面装的是水,如果我们要交换两个瓶子里的液体,该怎么办?
一般我们是用一个空瓶子作为“中转”来解决这个问题的。同理,在程序设计中也使用这种方法来交换两个变量的值。
程序代码如下:
Private Sub cmdChang_ Click()
Dim a As Single, b As Single , c As Single
a = InputBox ( " 输入a")
b = InputBox ( " 输入b ")
Print "交换前:a = "; a,"b = "; b
c = a
a = b
b = c
MsgBox "交换后a = " & a & "b = " & b , vbOKOnly, " 交换结果"
End Sub
运行程序,不难发现代码是按照由上到下的顺序一行一行地执行。程序执行过程中没有分支、没有重复,我们把这种结构称为顺序结构。顺序结构是一种最基本的程序结构。
实践:
1、分析上面的程序,完善图2 -23流程图。
2. 你知道自己已经出生了多少天、多少小时吗?请编写一段程序,输入自己的出生日期,输出答案。
(2 ) 选择结构
由物理学知识可知:只有当飞船速度达到第一宇宙速度(7.91 千米/ 秒) 时,才可以在地球引力作用下,绕地球做匀速圆周运动。
编程实现以下功能:输入飞船速度,程序判断飞船是否能升空。分析解决问题的方法,完善图2 -25的流程图。
像这种根据不同的条件判断来决定程序执行走向的结构,我们叫它选择结构。
IF 语句有:单分支选择结构,形式为If …Then/End If ;双分支选择结构,形式为If …Then/ Else / End If ;多分支选择结构,形式为If …Then/ElseIF…Then/ Else /End If 。上例中使用的是双分支选择结构。
完整的程序代码参考如下:
Private Sub cmdOk _ Click()
Dim v As Single
v = InputBox (" 输入速度(km/s)")
If v > = 7 . 91 Then
lblShow .Caption = " 飞船成功飞行!"
Else
lblShow .Caption = " 输入数据错误!"
End If
End Sub
实践
1. 讨论:顺序结构与选择结构有何不同。
2. 编写程序:用计算机产生一个1 到100 之间的随机整数,然后判断这个数是奇数还是偶数,并输出该数及判断结果。
3.分析判断闰年的算法,编写程序,输入一个公元年号,输出是否是闰年。
拓展思考(select case语句了解即可)
在“ 神州 号”程序中,我们只判断了飞船成功飞行的条件。当飞船速度继续加大时,飞船将达到第二宇宙速度、第三宇宙速度……( 见表2 -11 ) 。
试编写程序,输入不同的飞船速度,判断它的各种飞行状况。
表 2 - 11
飞船速度(v) 单位(km/s)
飞行状况
7 .91 ≤v < 11.19
飞船绕地球近似做 匀速 圆周运动
11.19 ≤v < 16.67
飞船离开地球 的控制 ,围绕太阳转
V > 16.67
飞船挣脱太阳引力飞出太阳 系
当程序出现多分支选择时,用If 语句比较烦琐,而使用多分支选择Select
Case 语句就方便多了。
Select Case 的语法
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
为:
Select Case 表达式
Case 表达式列表1
语句块1
[Case 表达式列表2
语句块2]
……
[Case Else
语句块n]
End Select
例如,可用Select Case 语句编写程序判断“神州号”各种飞行状况,程序如下:
Private Sub cmdOk_Click()
Dim v As Single
v = InputBox (" 输入速度v(km/s)" )
Select Case v
Case Is >16.67
lblShow.Caption = " 飞出太阳系"
Case Is > = 11.19
lblShow.Caption = " 绕太阳运行"
Case Is > = 7.91
lblShow.Caption = " 绕地球运行"
Case Else
lblShow.Caption = " 输入错误!"
End Select
End Sub
(3) 循环结构
假设你从今年开始,1 月份为“希望
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
”存入1 元钱,2 月份存入2 元钱,3 月份存入3 元钱……依次类推,问:两年时间你将为“希望工程”存入多少钱?
我们假设n 为月数,intSum 是一个累加变量,且初始值为0,那么存入钱的累计数intSum 的计算方法是:
第1 个月:n= 1,n<=24条件成立,intSum =intSum +n,即intSum =0+1;
第2 个月:n=2,n<=24条件成立,intSum = intSum +n,即intSum =1+2;
第3 个月:n=3,n<=24条件成立,intSum = intSum +n,即intSum =3+3;
……
第24个月:n = 24, n <=24条件成立,intSum = intSum + n ,即intSum =276+24;
第25个月:n=25,n<=24条件不成立,不再累计。
由此,我们发现每次都重复执行intSum =intSum +n 这一语句,像这种需要重复执行某一段代码的程序,我们就需要使用循环结构。VB循环结构常用的语句是For…Next 语句和Do…Loop语句等。那么用程序如何解决上面的问题呢?
Private Sub cmdOk _ Click()
Dim n As Integer , intSum As Integer
intSum = 0
For n = 1 To 24
intSum = intSum + n
Next n
lblSum . Caption = " 两年共存入:" & intSum & " 元"
End Sub
上段代码中使用For/ Next 语句实现循环,变量n 的初始值为1,每执行一次循环,n 的值加1( 即循环步长为1) ,直到n> 24,退出循环。如果循环步长为2,那么,For 语句为:For n = 1 To 24 Step 2。
如果要计算多少月“希望工程”储蓄才能多于500 元,该怎么办呢?由于循环次数未知,使用 Do While/Loop语句实现更合适。
Private Sub Command1_ Click()
Dim n As Integer , intSum As Integer
n = 1
intSum = 0
Do While intSum < = 500
intSum = intSum + n
n = n + 1
Loop
lblSum . Caption = n & " 多少月才能为希望工程存款超过500 元?"
End Sub
从上段程序可以看出,Do While语句先判断While后面的条件表达式是否满足,如果满足,程序反复执行Do和Loop之间的语句,直到条件不满足为止。
For/Next 语句和Do While/ Loop语句在许多情况下是可以通用的,但是,For/Next 语句更适合用于循环次数容易确定的场合,而Do While/ Loop语句的使用则更灵活。
拓展:(循环嵌套了解即可)
开始
结束
图2 -23流程图
开始
结束
输入速度V
V>=
------------
----------------
Y
N
图2 -25 飞船运行状态流程图