Download presentation
Presentation is loading. Please wait.
1
第4章 程序控制结构与算法基础
2
实验五说明 上机教材 实验 P137 实验3-5 素数的判定 算法3:由2~n/2之间的数去除 算法4:由2~ 之间的数去除
3
综合小例: 1.求 1!+2!+…+n! 2.在列表框显示1~100之间的所有 素数;而不是 素数的则显示在组合框中
3.将上例修改为在窗体上直接打印 要求:每显示8个则换行显示下一行内容
4
例: 三种基本结构 * 输出 移动的标签 除数为0的判定 密码登录验证 素数(质数)判定 随机计算题 顺序结构 分支(选择)结构 循环
5
代码书写规则 每个语句一行,以回车键结束; 多个语句可以写在同一行上,各语句之间用冒号(:)进 行分隔;
一条长语句可以分成多行书写,在除最后一行之外的其余 各行的末尾使用下划线(_)作为续行符,并且续行符与 它前面的字符之间至少要有一个空格; 所有语句中的变量名、函数名、关键字、对象名、对象属 性名、对象方法名等均不区分大小写,但保留定义时所使 用的大小写格式; 代码的物理行最多可含1023个字符,一个逻辑行最多可 由10个物理行组成。
6
自动语法检测 VB的IDE默认情况下具有自动语法检测功能。
如果用户输入有语法错误的语句,在按下回车键 后,系统将弹出一个出错提示框,并用红色标出 有语法错误的语句。
7
赋值语句 格式:变量|对象.属性名 =表达式 可以给一个变量(或对象的属性)多次赋值,但 变量中保留的是最后一次的值。 累加:B=B+N 累乘:C=C*N
8
交换两个变量的值 中间变量法 适合任何两个相同类型的变量 数值加减法 适合两个数值类型的变量 T=A A=B B=T A=A+B B=A-B
9
算法是解决问题的方法、步骤,是程序的 核心。 算法的特性
程序=数据结构+算法 算法是解决问题的方法、步骤,是程序的 核心。 算法的特性 确定性 能行性 有穷性 输入 输出
10
程序的三种基本结构 顺序结构:按语句书写顺序执行。 分支结构:也叫选择结构,根据一个条件决定程 序执行的走向。
循环结构:将某些语句重复执行有限次。
11
顺序结构 语句A 语句B
12
示例 输入正方形 边长,求其 周长与面积。 开始 Private Sub Command1_Click()
L=4*A S=A^2 输出L、S 结束 Private Sub Command1_Click() Dim A As Single, L As Single, S As Single A = Val(Text1.Text) '获取Text1中的内容 L = 4 * A S = A ^ 2 Text2.Text = L '在Text2中输出周长 Text3.Text = S ‘在Text3中输出面积 End Sub 输入正方形 边长,求其 周长与面积。
13
分支结构-If语句 If 条件 Then 分支1 [Else 分支2 End If 单行结构If语句 块结构If语句
If 条件 Then 语句A [Else 语句B] 块结构If语句 If 条件 Then 分支1 [Else 分支2 End If
14
If语句流程图 条件 语句A 语句B True False (a) (b)
15
示例 输入一个整数,若为偶数,则输出“偶数”,否则输出“奇数”。 开始 X>0 输入A 偶数 False True 结束 奇数
Private Sub Form_Click() Dim X As Integer X = Val(InputBox("输入一个整数A")) If X Mod 2 = 0 Then Print "偶数“ Else Print "奇数“ ENDIF End Sub
16
说明 单行结构的条件语句中不能有End If,而块结构 的条件语句中不能缺少End If。
If语句中的条件一般是一个逻辑表达式,也可以是一个返 回值为数值的表达式。如果是数值表达式,则0对应False, 非0的任何数对应True。 If语句中如果条件成立,则执行对应的语句或语句块,然 后便跳出条件语句结构。 在块结构的条件语句中,语句块中的语句不能与Then、 Else书写在同一行上。 单行结构的条件语句中不能有End If,而块结构 的条件语句中不能缺少End If。
17
例1 例2 除数判定 (结合val函数) 密码登录验证(结合msgbox函数) 移动的标签 改进的密码验证 (结合msgbox函数)
三角形面积(海伦公式) 单击窗体,判断输入的数是奇数还是偶数
18
改进1 1.用户名错误,则判定为“非法用户”,弹出对 话框后,退出 2.用户名正确 密码不正确 ,判定为“密码错误”
密码也正确 ,判定为“合法用户”, 并进入另一 个表单
19
改进2 用户名正确 密码不正确 ,判定为“密码错误”
如果密码错误,弹出对话框提示用户重新输入,如 果用户确认重新输入,则令密码框获取焦点,并清 空;否则退出程序
20
分支的嵌套 不允许交叉
21
例3:根据三角形的三条边求三角形的面积 输入三条边a, b, c ;
如果a+b>c且b+c>a且a+c>b则利用海伦公式计算 三角形的面积; 否则弹出错误信息后结束。
22
多分支语句-If-ElseIf If 条件1 Then 语句块1 ElseIf 条件2 Then 语句块2 ElseIf 条件3 Then
语句块3 …… [Else 语句块n+1] End If 条件1 语句块1 True False 条件2 语句块2 条件3 语句块3 语句块n+1 ElseIf中的Else与If之间不能有空格! ElseIf语句的数量没有限制! 前面的条件成立执行对应语句后结束!
23
行IF语句 块IF语句
24
多分支语句-Select Case Select Case 测试表达式 Case 表达式列表1 语句组1 [Case表达式列表2 语句组2]
语句组3] …… [Case Else 语句组n+1] End Select
25
Select Case语句功能 首先计算出测试表达式的值,然后自上而 下依次与各个表达式列表进行比较,如果 匹配,则执行相应的语句组,然后跳到End Select后面的语句继续执行;如果测试表达 式的值不能与给出的任何一个表达式列表 匹配,则执行Case Else之后的语句组。如 果缺省了Case Else部分,而测试表达式的 值不能与给出的任何一个表达式列表匹配, 则不执行任何语句组,直接跳到End Select 后的语句执行。
26
测试项的形式 具体的取值(表达式),值与值之间用逗 号分隔。如:1,3,5,A+B等。 连续的范围,范围是用关键字To连接的两 个值。如:10 To 20,”A” To “Z”。 使用Is关键字构成的比较表达式。如: Is>=10。 也可以是上述几种形式的组合,用逗号分 隔开。
27
示例 输入一个成绩, 输出此成绩相应 的等级。 注意 在Select Case语句中,各测试项执行的顺序是自上而下依次
CJ>=90 True False DJ=”良好” DJ=”中等” 开始 CJ>=80 CJ>=70 CJ>=60 DJ=”及格” DJ=”不及格” DJ=”优秀” 输出DJ 结束 输入CJ Private Sub Command1_Click() Dim CJ As Single, DJ As String CJ = Val(Text1.Text) '获取成绩 Select Case CJ '判断等级 Case Is >= 90 DJ = "优秀" Case Is >= 80 DJ = "良好" Case Is >= 70 DJ = "中等" Case Is >= 60 DJ = "及格" Case Else DJ = "不及格" End Select Text2.Text = DJ '输出等级 End Sub 示例 输入一个成绩, 输出此成绩相应 的等级。 注意 在Select Case语句中,各测试项执行的顺序是自上而下依次 判断的,如果执行到“Case Is >= 80”,说明“Is >= 90”已经不 成立,一定要注意书写的顺序,如果顺序混乱,可能导致 结果不正确。
28
练习 输入一个月份,输出该月有多少天。(略) 复选 框与分支结构
29
输入一个三位正整数,判断其是否为水仙 花数。
练习 输入一个年份,判断该年是否为闰年。 满足下列条件之一的年份即为闰年 年份能被4整除但不能被100整除 年份能被400整除 输入一个三位正整数,判断其是否为水仙 花数。 水仙花数:一个三位整数等于其各位数字的立 方和,如153=
30
IIf函数 If A>B Then MaxData=A Else 格式:IIf(逻辑表达式,值1,值2) MaxData=B
End If 可以简化为: MaxData=IIf(A>B,A,B) 格式:IIf(逻辑表达式,值1,值2) IIf函数的功能类似于有两个分支的If语句。当逻 辑表达式的值为True时,函数返回值1,当逻辑表 达式的值为False时,函数返回值2。
31
循环结构-For循环 For循环也叫计次循环,格式为: For 循环变量=初值 To 终值 [Step 步长] 循环体 [Exit For]
Next [循环变量]
32
说明-1 (1)循环变量。用做循环计数器的数值变量,不能是布尔类型或数组元 素。 (2)初值。循环变量的初始值,一般是一个数值表达式。 (3)终值。循环变量的终值,一般是一个数值表达式。 (4)步长。循环变量的增量,一般是一个数值表达式。其值可正可负, 但不能为0。步长可以省略,若省略,则步长为1。 (5)循环体。放在 For 和 Next 之间的一条或多条语句,它们将被执 行指定的次数。 (6)Exit For。退出当前一层For-Next循环。循环中可以在任何位置 放置任意个 Exit For 语句,随时退出循环。Exit For通常在条件判 断之后使用,例如 If...Then,并将控制权转移到紧接在 Next 之后的 语句。 (7)Next。循环结构的最后一个语句,其后的循环变量可以缺省,若 不缺省,则要与For语句中的循环变量一致。
33
说明-2 For-Next循环遵循“先检查后循环”的原则。 步长为正,循环变量初值大于终值时,不循环;
步长为负,循环变量初值小于终值时,不循环。
34
For循环的执行 把初值赋给循环变量; 检查循环变量值是否超过终值,若超过,则不 执行循环体而转到Next后一条语句执行,否则 转到3;
循环变量=初值 循环变量超过终值? False True 循环体 循环变量=循环变量+步长 Next后一条语句 For循环的执行 把初值赋给循环变量; 检查循环变量值是否超过终值,若超过,则不 执行循环体而转到Next后一条语句执行,否则 转到3; 执行一次循环体; 循环变量=循环变量+步长; 转到2。 超过有两种情况: 若步长为正,为循环变量值大于终值; 若步长为负,为循环变量值小于终值。
35
示例 求1+2+3+…+100。 Dim I As Integer, S As Integer For I = 1 To 100
False True S=S+I I=I+1 开始 S=0 输出S 结束 示例 求1+2+3+…+100。 Dim I As Integer, S As Integer For I = 1 To 100 S = S + I Next Print " ="; S 循环结束后I=?
36
思考 :求n! 注意变量类型
37
注意 如果在For循环中,循环变量的初值、终值及步长 是用变量表示的,则这些变量在循环体中的改变 不会影响循环次数。
问:如下程序循环多少次? Dim A As Integer, B As Integer Dim C As Integer, I As Integer A = 1: B = 10: C = 1 For I = A To B Step C A = A + 1 B = B - 1 C = C + 1 Next 答案:10次
38
如何实现 ?
39
练习 输入一个整数,判断其是否为素数。 随机生成10个两位整数并输出。 找出1000以内所有同构数。
素数:一个整数除了1与本身之外再无其他因子。 随机生成10个两位整数并输出。 找出1000以内所有同构数。
40
素数的判定算法 1 (1)输入整数 N( N>=2) (2)统计整数的因子个数的C,初值为0 (3)依次由1到N进行判定
如果N能够被中间任何一个数整除,则C=C+1 (4)若C最终的统计结果为2,则表示该 数仅能被 1和它本身两个数整除,结论:是素数 反之,不是
41
素数的判定算法 2 (1)输入整数 N( N>=2) (2)依次由2到N-1进行判定
反之,就不是素数
42
练习 随机生成10个两位整数并输出。 输入一个整数,判断其是否为素数。 找出1000以内所有同构数。
素数:一个整数除了1与本身之外再无其他因子。 随机生成10个两位整数并输出。 找出1000以内所有同构数。
43
在窗体上有一个列表框LIST1, 一个文本框 TEXT1,一个命令按钮COMMAND1;要求程序 运行后(FORM的LOAD事件),在列表框中自 动建立三个列表项,分别为“数学”,“语文”, “英语”。 如果选择列表框中的一项,则单击“复制”按钮 时,可以把该项复制到文本框中。
44
与循环有关的控件 列表框与组合框 List1 与 combo1 问题1: 随机生成20个[15, 89] 之间的整数并显示
随机生成20个[15, 89] 之间的整数并显示 到列表框或组合框中 问题2: 随机生成20个[15, 89] 之间的整数并显示在窗体上 每行显示5个
45
产生 [100, 800] 之间的水仙花数并显示 到列表框或组合框中
产生 [100, 800] 之间的水仙花数并显示 到列表框或组合框中 输入一个三位正整数,判断其是否为水仙 花数。 水仙花数:一个三位整数等于其各位数字的立 方和,如153= 理解:从判定一个整数~~~~~判定100~999之间的整数
46
循环结构-Do循环 Do循环有当型与直到型两种。 条件 循环体 T F 当型 直到型 Do While 条件 循环体 [Exit Do]
Loop Do Until 条件 循环体 [Exit Do] Loop 当型 直到型 Do 循环体 [Exit Do] Loop While 条件 Do 循环体 [Exit Do] Loop Until 条件
47
说明 (1)对于循环次数未知的情况下,Do-Loop循环 十分有用。 (2)在Do While循环中,当条件为真时,要继续 循环;在Do Until循环中,条件为真时,结束循 环。 (3)在Do-Loop循环中可以没有While或Until部 分,也称为无条件循环,但在循环体中一定要有 Exit Do语句,否则会造成死循环。与Exit For语 句一样,Exit Do语句通常在条件判断之后使用。 (4)Exit Do语句可以退出当前一层Do循环,把控 制权转移到Loop语句后的语句。
48
用do循环改写 (1) …+n (2) n!
49
练习 求任意两数的最大公约数 猜数字游戏(增加限定次数) 随机生成十个能被3整除但不能被5整除的三位整数。 注意:与随机函数RND有关的语句
RANDOMIZE ‘ 产生不同的随机数
50
示例 求两个整数的最大公约数。 经典算法:欧几里德算法
开始 输入M、N R<>0 M=N N=R 输出N 结束 True False R=M Mod N 示例 Dim M As Integer, N As Integer, R As Integer M = val(InputBox(“输入M”)) N =val(InputBox(“输入N”)) R = M Mod N Do While R <> 0 M = N N = R Loop Print "最大公约数为:"; N 求两个整数的最大公约数。 经典算法:欧几里德算法 思考 :如何求最小公倍数?
51
嵌套中的Exit语句 当有多个Do循环嵌套时,Exit Do语句只跳出当前一层Do 循环;当有多个For循环嵌套时,Exit For语句只跳出当前 一层For循环; 当Do循环与For循环嵌套时,使用Exit Do语句可退出Do 循环,若内层循环为For循环,则Exit Do语句同时跳出 For循环;使用Exit For语句可退出For循环,若内层循环 为Do循环,则Exit For语句同时跳出Do循环。
52
结构的嵌套 一个结构把另一个结构完全包含。 注意 嵌套的层数没有限制。 一个控制结构必须完全位于另一个结构之内。
正确的嵌套 错误的嵌套 一个结构把另一个结构完全包含。 注意 嵌套的层数没有限制。 一个控制结构必须完全位于另一个结构之内。 结构层次比较多时,应尽可能让程序呈现锯齿形。 多个循环结构嵌套时,注意循环控制变量的使用。
53
嵌套练习 :九九乘法表
54
级数 (do循环典型案例) 1+1/2+1/3+…..+1/n (直到最后一项为小于 10^-4为止)
1-1/2+1/3-1/4+….+(-1)(n-1)(1/n) (直到最后一项为绝对值为小于10^-4为止) P102 第9题
55
练习 用二分法求方程根 用矩形法求定积分。 计算π近似值。 返回
56
计数的算法 计数变量 c=0 计数时 c=c+1 例
57
求回文数 算法思想 回文数 (1)将数 转换为 字符
如11, 121, 1221, 12521 (1)将数 转换为 字符 (2)依次取出第1个字符与倒数第1个字符比较,第2个字 符与倒数第2个比较……比较次数为LEN(S)\2,一旦发 现第K个字符不等于倒数第K个字符,则停止,并断定其 不是回文数。 可以利用字符类函数方便的取字符的长度和子串 LEN( ) STR( ) TRIM( ) LEFT( ), RIGHT( ),MID( )
58
更简洁的算法 取出S的逆串(倒序串) 再与S比对,看是否相等 主要用函数STRREVERSE( ) 实验教材: P142 实验3-8
有点差别 实验教材用的取子串函数,作了一点处理,等效于STRREVERSE( )函数
59
本章算法 交换变量 奇数偶数判定 水仙花数 累加和 累乘积 素数的判定 “金字塔”*输出 随机数的产生与输出 组合框与列表框
最大公约数和最小公倍数 判断回文数 求级数 求方程根
60
建立如图程序
61
求同构数 算法思想 将数 转换为 字符 可以利用字符类函数方便的取字符的长度和子串 LEN( ) STR( ) TRIM( )
Similar presentations