回顾
? 语句的基本成分:
常量,变量,数组,记录
函数,运算符,表达式
? VB解题过程:
数学模型,确定算法
语句 ——程序(设计,调试,使用)
算法基础及 VB的基本语句 第 4章
? 算法及程序设计基础
? 赋值语句及 InputBox,MsgBox函数
? 分支结构与分支结构语句
? 循环结构与循环结构语句
? 程序示例
? 小结
算法及程序设计基础
? 算法的特征
? 算法的描述
? 基本算法结构
4.1
算法的特征
? 确定性
? 可行性
? 有穷性
? 输入性
? 输出性
算法的描述
? 流程图。
是使用规定的图形符号来描述算法的。
流程图使用的图形符号见 表 4-1。
? 图 4-1和图 4-2分别是两个算法示例的流程图。
图框内的文字用于说明具体的操作内容。
? 上例表现算法的五个特性
图形符号 名称 代表的操作
输入 /输出 数据的输入与输出
处理 各种形式的数据处理
判断 判断选择, 根据条件满足与否选择不同路径
起止 流程的起点与终点
特定过程 一个定义过的过程
流程线 连接各个图框, 表示执行顺序
连接点 表示与流程图其他部分相连接
基本算法结构
?,结构化程序设计方法”的核心是规定了算
法的三种基本结构:
顺序结构、分支结构和循环结构。 P58
? 三种基本结构的共同特点是:
1) 只有单一的入口和单一的出口;
2) 每个部分都可能被执行;
3) 结构内不存在永不终止的死循环 。
赋值语句及 InputBox,MsgBox函数
? 赋值语句
? InputBox函数
? MsgBox函数
4.2
习题,P81:第 6,7,8题
上机,P41实验 5.1,5.2
赋值语句
? 赋值语句的形式
? 不同数据类型数据的赋值
? 图 4-4 一个说明不同数据类型数据赋值
方式的简单程序示例
4.2.1
赋值语句的形式
? 赋值语句的一般形式是:
其中 var表示某个变量名或属性名。
先运算,后“赋值”。
? 赋值语句可使变量或某个对象的某属性获
得一个新值。 示例
? 赋值语句还可以获取一个对象的当前属性
值。例如,pw = texpass.text
var = <表达式 >
赋值语句示例
x = "This is” &, a flower"
number% = 72+23
Lable1.Text = "Filename is:"
Text.Font.Size = 12
Y = (a + b )/2
思考,如何将 A与 B交换内容?
不同数据类型数据的赋值
有数值意义的字符串, OK!
无数值意义的字符串出错!字符数值变量
True—”true”;False—”False” 逻辑值字符变量
Ture:变量的值将为 -1;
False:变量的值为 0 逻辑值整型变量
值转换为字符型赋给变量数值字符变量
先求值再转换为变量类型后再赋值数值数值变量
系统处理表达式类型变量类型
逻辑变量 数值 非 0值转换为 True赋变量,0则转换为 False赋变量
图 4-4 一个简单程序示例
InputBox函数
? InputBox函数
用来接受用户通过键盘输入的数据。
InputBox函数应用 示例 P61
4.2.2
N_student=inputbox(“请输入你的学号,,”程序示
例”,230001)
运行时,N_student的值为用户输入的学号值
MsgBox函数
? MsgBox函数用于向用户发布提示信息,并
要求用户作出必要的响应。
? MsgBox函数根据用户选择单击的按钮而返
回不同的值
? MsgBox函数有以下几种使用方法
4.2.3
MsgBox函数的几种使用方法
三种方法都可以获得如图所示画面。
但第二、三种用法将得不到用户点击不同按钮
的返回值(或没有返回值)。
Ans=msgbox(“非法数据 !”,48,“提示信息” )
print msgbox(“非法数据 !”,48,“提示信息” )
Msgbox,非法数据 !”,48,“提示信息”
1
2
3
参数 C1,C2,C3,C4见 P62
分支结构与分支结构语句
分支结构是程序的基本算法结构之
一。 VB提供了实现分支结构的相关语
句。
? If-Then-Else-End If 结构语句
? Select-Case-End Select 结构语句
4.3
习题, P81 第 2题
上机,P43实验 5.3到 5.7
If-Then-Else-End If 结构语句
? 该结构语句的一般形式
? 该结构的变形 1
? 该结构的变形 2
? [例 4-1] 已知三角形三个边的长度,设计求
此三角形面积的程序
? [例 4-2]一个有多个分支的示例程序
4.3.1
If结构语句的一般形式
If e Then
[A组语句 ]
Else
[B组语句 ]
End If
If 结构的变形 1
If e Then
A组语句
End if
If e Then <语句 >
If 结构的变形 2
If e1 Then
A1组语句
ElseIf e2 Then
A2组语句
...
End if
[例 4-1] 已知三角形三个边的长度,设
计求此三角形面积的程序
? 算法流程图
当 a+b>c 且 a+c>b 且
b+c>a 时, 三角形存在,
其面积
式中:
p=(a+b+c)/2
))()(( cpbpappS ????
[例 4-1] 算法流程图
[例 4-2]一个有多个分支的示例程序
? 程序代码
[例 4-2] 程序代码
Private Sub Command1_Click()
Dim x As Integer
x = Val(Text1.Text)
If x < 1 Then
Text2.Text =,这是小于 1的数,
ElseIf x <= 10 Then
Text2.Text =,这是 1到 10之间的数,
Else
Text2.Text =”这是大于 10的数,
End If
End Sub
Select-Case-End Select 结构语句
? 实现多分支结构的另一种方法。
? 例 4-2的程序代码也可使用本结构语句实现
4.3.2
Select Case e
Case c1
A组语句
Case c2
B组语句
...
Case Else
n组语句
End Select
e称为测试表达式;
c1,c2,...是测试项
(1)具体取值:如,3,5,7.2等 ( 当
测试表达式是算术表达式时 ) ;
(2)连续的数据范围:如,8 To 20;
BTo H等;
(3)满足某个判决条件:如,Is>20;
Is<="P"等。
例 4-2使用本结构语句实现
Private Sub Command1_Click()
Dim x As Integer
x = Val(text1.Text)
Select Case x
Case Is < 1
Text2.text = "这是小于 1的数 "
Case 1 To 10
Text2.Text = "这是 1到 10之间的数 "
Case Else
Text2.Text = "这是大于 10的数 "
End Select
End Sub
循环结构与循环结构语句
循环结构是程序的基本算法结构。
所谓循环,就是重复地执行某些操作。
? 当型循环和直到型循的不同执行方式
? Do-Loop循环结构语句
? For-Next循环结构语句
? 循环嵌套
4.4
习题, P81 第 3,4,5,9题
上机,P47实验 6.1到 6.6
回顾 ( 3.30)
? 赋值语句的 兼容 ( P60)
? IF语句的 多态 (举例)
? Elseif语句的 迷惑 (举例)
? 多路分支语句 select case的 妙用
? DO语句的 2种结构, 2种控制语句
? 关于 FOR语句
当型 循环和 直到 型循的不同执行方式
? 当型循环的不同执行方式
? 直到型循环的不同执行方式
Do-Loop循环结构语句
? Do-Loop循环结构语句的四种形式
? Exit Do语句
? [例 4-3] 求两个自然数的最大公约数程序
4.4.1
1.Do While e 2,Do
...,..
[Exit Do] [Exit Do]
...,..
Loop Loop While e
3.Do Until e 4.Do
...,..
[Exit Do] [Exit Do]
...,..
Loop Loop Until e
回顾 ( 4.27)补课问题
? 赋值语句的 兼容 ( P60)
? IF语句的 多态 (举例)
? Elseif语句的 迷惑 (举例)
? 多路分支语句 select case的 妙用
? DO语句的 2种结构, 2种控制语句
? 关于 EXIT DO语句
Exit Do语句
? 循环体中,执行到 Exit Do语句时,就会直
接退出本层循环,转而执行 Loop语句的下
一条语句。
? 最常用的形式是与 If-Then语句相结合,
即,If e Then Exit Do
? 表示,如果条件 e被满足,则执行 Exit Do语
句直接退出本层循环。
? 举例,P81 第 3题
[例 4-3] 求两个自然数的最大公约数程序
? 在程序中加入对数据的
合法性进行检验的部分;
? 数据类型可选用长整型。
? 使用 Mod运算符时,切
记应前后各加一个空格
? 程序代码
最小公倍数?
For-Next循环结构语句
? 如果事先已知循环次数,则可使用 For-
Next 循环结构语句。它的一般形式是:
?
For-Next循环结构语句的执行方式
? 注意
? [例 4-4] [例 4-5]
4.4.2
For v = e1 To e2 [Step e3]

[Exit For]

Next v
v是循环控制变量,
e1为初值 ;
e2为终值 ;
e3为步长。
当 e3=1时,可省略。
For-Next循环结构语句的执行方式
1.计算 e1,e2和 e3的值;
2.给 v赋初值; (1与 2只做一次 )
3.判 v的值是否 超过 e2,如果
未超过,则执行循 环体;
如果超过了,则退出循环。
4.做完循环体后,到 Next语句,
v增加一个步长;转 3:判别
操作。
注意
? 循环参数 e1,e2和 e3中包含的变量如果在循
环体内被改变,不会影响循环的执行次数;
但循环控制变量若在循环体内被重新赋值,
则循环次数有可能发生变化 (举例 P82,#4)
? 若使用非整型数做循环控制变量和循环参
数,那么循环次数就有可能发生意想不到
的变化。
[例 4-4]求 1到 10这十个数的和与连乘积
? 求若干个数之和或连乘积,可采用,累加,
或,累乘,法。
? 累加法是设置一个存放 和数 的变量,称为
“累加器”,初始值为 0,累加过程通过循
环实现;
? 累乘的算法设置的是“累乘器”,初始值
为 1,在循环体内,乘数应与累乘器相乘。
设置适当的数据类型。
? 程序代码
FOR语句的特例
? 关于正常情况下的循环次数
? 关于正常情况下循环结束后循环变量的值
? EXIT FOR语句
? 非正常情况下:循环变量的值!!
? 举例:
P81 #3 #4
循环嵌套
? 无论是 Do-Loop循环,还是 For-Next循环,都可
以在大循环中套小循环。注意:小循环一定要完
整地被包含在大循环之内。
Private Sub Form_Click()
For i = 1 To 9
For j = 1 To 9
Print i; "*"; j; "="; i * j;
Next j
Print
Next i
End Sub
[例 4-6]一个模拟摇奖的程序
4.4.3
小结
? VB的基本语法规则
? VB的基本元素(常量,变量,函数,运
算符,各种表达式)
? 结构化程序的三种结构(顺序,分支,
循环)
? 如何设计算法?
? 如何用 VB实现算法?
[例 4-5]大写字母逆序输出的程序
? 回顾几组函数,
Len(),Mid(),Left(),Right(),Chr,Asc()
? 本例利用 Mid函数可以从字符串中提取出单
个字符
? 如何 控制 循环过程?(使用 Len函数 );
? 如何 处理?(采用连接运算 )
? 如何 逆序输出?(程序设计技巧之一 )
? 程序代码
[例 4-6]一个模拟摇奖的程序
? 设有 100个人中签,要从中找出中奖人。由机器自
动随机产生 1000个 1到 100间 的数据,第 1000个随机
数据即为中奖人的号码。
? 如何产生 1~ 100之间的随机整数。可用以下公式:
Int((上限 -下限 lb + 1) * Rnd )+下限
? 调用 Rnd 之前,可先使用无参数的 Randomize 语
句初始化随机数生成器
? 程序代码
程序示例
? [例 4-7] 一个简易函数计算器程序 (P74)
? [例 4-8] 个人收入调节税应用程序 (P77)
? [例 4-9]牛顿迭代法程序设计 (P78)
? [例 4-10] 原码转换成反码的程序 (P79)
4.5
[例 4-7]一个简易函数计算器程序
? 预处理,
考虑在文本框中没有输入数据 ;输入的数据
超出函数的定义域时的出错处理。
? 程序中使用的 IsNumeric(s)函数用于检测自
变量 s是否是一个可转换成数值的数字串,
如果是,则返回逻辑值 True,否则返回
False。
? 程序代码
Private Sub cmd1_Click()
If Text1.Text = "" Then
MsgBox "请输入 X值 ! ",48 + vbOKOnly,"程序示例 "
Text1.SetFocus
ElseIf IsNumeric(Text1.Text) Then
X = Val(Text1.Text) ?求函数
Label2.Caption =,Exp(X)=:” ?换门牌
Text2.Text = Str(Exp(X)) ?送结果
Else
MsgBox "输入数据错误 ! ",48 + vbOKOnly,"程序示例 "
Text1.Text = "”
End If
End Sub
exp
效果?
初始界面
MsgBox,请输入 X值 !”,48 + vbOKOnly,"程序示例 "
显示结果
? 按月收入额计个人收入调节税的计税公式式
中,pay为纳税人的月收入。
程序代码
[例 4-8]个人收入调节税应用程序
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
??
??
??
??
??
??
??
?
???
???
???
???
???
???
???
??
?
4 5 0 0
4 5 0 04 0 0 0
4 0 0 03 5 0 0
3 5 0 03 0 0 0
3 0 0 02 5 0 0
2 5 0 02 0 0 0
2 0 0 01 5 0 0
1 5 0 01 0 0 0
1 0 0 0
7 0 04.0)4 5 0 0(
5 2 535.0)4 0 0 0(
3 7 53.0)3 5 0 0(
2 5 025.0)3 0 0 0(
1 5 02.0)2 5 0 0(
7515.0)2 0 0 0(
251.0)1 5 0 0(
05.0)1 0 0 0(
0
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
p a y
tax
或离退休
Private Sub Command1_Click()
Dim tax As Single,pay As Single
pay = Text1.Text
If Check1.Value = 1 or pay <= 1000Then
tax = 0
ElseIf pay <= 1500 Then
tax = (pay - 1000) * 0.05
ElseIf pay <= 2000 Then
tax = 25 + (pay - 1500) * 0.1
…………,..
Else ‘什么情况下执行
tax = 700 + (pay - 4500) * 0.4
End If
Text2.Text = tax
End Sub
思考:
1、判断顺序
2,if--then--elseif的结合?
3、改成 select case语句?
[例 4-9]利用牛顿迭代法求方程根
? xex - 1 = 0 at:x0 = 0.5 <=10-7
? 算法说明 P78
? 程序代码 P79
Option Explicit
Private Sub cmd1_Click()
Dim x As Single,x1 As Single,Eps As Single
x = InputBox("输入初始值 x:","牛顿迭代法 ")
Eps = InputBox("输入允许误差 Eps:","牛顿迭代法 ")
Do
x1 = x ?总把新符换旧符
x = x1 - (x1 * Exp(x1) - 1) / (Exp(x1) * (x1 + 1))
Loop Until Abs(x - x1) <= Eps
Text1.Text = Str(x)
End Sub
[例 4-10] 原码转换成反码的程序
? Mid函数的另外一个功能,
可以用在赋值语句中,其功能是用指定的字符替换字
符串中指定位置的内容。
? 例 s=“abcdef”
mid(s,4,3)=“xyz” ?s的结果为,abcxyz”
? 程序代码
Private Sub Command1_Click()
Dim Source As String,I As Integer
Source = Text1.Text
If Mid(Source,1,1) <> "1" Then
Text2.Text = "正数没有补码 "
Else
For I = 2 To Len(Source)
If Mid(Source,I,1) = "1" Then
Mid(Source,I,1) = "0"
Else
Mid(Source,I,1) = "1"
End If
Next I
Text2.Text = Source
End If
End Sub
Mid函数的新作用
本章小结
? 算法及程序设计基础
? 赋值语句及 InputBox,MsgBox函数
? 分支结构与分支结构语句
? 循环结构与循环结构语句
? 程序示例
? 习题 (P81--P83第 10--13题 )
? 上机 (P41--P55) (5月 16日交 )
END
2002年 4月 7日