数学3(必修)—— 算 法 ALGORITHM 苏州大学数学科学学院 徐稼红 uuxjh@public1.sz.js.cn
内容 结构 一、《算法初步》主要内容与结构 算法的含义→流程图→基本算法语句→算法案例 流 程 图 算法的描述 算法 自然语言 顺序结构 选择结构 循环结构 输 语句 伪 代 码 循环语句 赋值语句 条件语句 入出
理解算法的含义; 掌握算法的三种基本结构; 会用算法语句解决简单的实际问题。 二、本章教学重点和难点 重点 理解算法的含义; 掌握算法的三种基本结构; 会用算法语句解决简单的实际问题。 难点 循环语句; 算法设计。
展开方式 特点 三、教材展开的方式和特点 自然语言 自然语言 流程图 自然语言 流程图 伪代码 自然语言 流程图 伪代码 Excel VBA 特点 螺旋上升、渐次递进 整合渗透、前引后连 三线合一、横向贯通 弹性处理、多样选择
第1节 算法的含义 四、内容解析 算法的含义 算法的特点 (广义)完成某项工作的方法和步骤 第1节 算法的含义 算法的含义 (广义)完成某项工作的方法和步骤 (教材)对一类问题的机械的、统一的求解方法 (计算科学)可以用计算机来解决的一类问题的程序和步骤 算法的特点 (教材)有限性、确定性 (其他)输入、输出、可行性、一般性
第1节 算法的含义 关于例1 例1 给出求1 + 2 +3 + 4 + 5的一个算法. 算法3? 算法1 按照逐一相加的程序进行. 第1节 算法的含义 关于例1 例1 给出求1 + 2 +3 + 4 + 5的一个算法. 算法1 按照逐一相加的程序进行. 第一步 计算1 + 2,得到3; 第二步 将第一步中的运算结果3与3相加,得到6; 第三步 将第二步中的运算结果6与4相加,得到10; 第四步 将第三步中的运算结果10与5相加,得到15. 算法2 可以运用公式1 + 2 + … + n = 直接计算。 第一步 取n = 5; 第二步 计算 ; 第三步 输出运算结果。 算法3?
第2节 流程图 四种图框类型 输入、输出框 处理框 判断框 起止框 第2节 流程图 四种图框类型 输入、输出框 处理框 判断框 起止框 ● N-S结构化流程图(1973年由美国学者I.Nassi和B.Shneiderman提出,N和S是这两位学者英文姓名的第一个字母)
第2节 流程图 三种基本算法结构 i) 顺序结构 ii) 选择结构 A B A B p Y N
第2节 流程图 三种基本算法结构 iii) 循环结构 A p Y N A Y N p (直到型) (当型)
第2节 流程图 循环结构示例 引例 N 开始 结束 输出该城市 投票 有一城市 得票超过总 票数一半 淘汰得票最少的城市 Y
第2节 流程图 循环结构 例4 (P12)求1×2×3×4×5。 开始 T←1 算法2 I←2 S1 T←1; S2 I←2; 第2节 流程图 循环结构 I > 5 N Y T←1 输出T I←2 T←T×I I←I + 1 开始 结束 例4 (P12)求1×2×3×4×5。 算法2 S1 T←1; S2 I←2; S3 T←T × I; S4 I←I + 1. S5 如果I不大于5,重新执行 S3、S4、S5;否则算法结束.
第2节 流程图 直到型与当型的转换 例4 I > 5 T←1 输出T I←2 T←T×I I←I + 1 I≤5 T←1 输出T 第2节 流程图 直到型与当型的转换 例4 I > 5 N Y T←1 输出T I←2 T←T×I I←I + 1 I≤5 Y N T←1 输出T I←2 T←T×I I←I + 1 辨别
第2节 流程图 学习流程图时学生可能出现的错误: n←3 p←x p←x,y←p,x←y x←y y←p (1)关于输入框 (2)关于处理框 第2节 流程图 学习流程图时学生可能出现的错误: (1)关于输入框 输入n 3 n←3 (2)关于处理框 p←x x←y y←p p←x,y←p,x←y (3)循环结构判断框中的条件
第3节 基本算法语句 伪代码 Excel VBA p ← x x ← y y ← p p = x x = y y = p 赋值语句 第3节 基本算法语句 例1 交换两个变量 x、y 的值 伪代码 Excel VBA p ← x x ← y y ← p p = x x = y y = p 赋值号 x、y、p的值各是多少?
第3节 基本算法语句 伪代码 Excel VBA 输入输出语句 例2 输入一个数,输出这个数的绝对值。 第3节 基本算法语句 例2 输入一个数,输出这个数的绝对值。 伪代码 Excel VBA Read a x ← | a | Print x a = Inputbox("请输入一个数") x = Abs(a) Msgbox x 其他输入、输出语句——input,output 英语单词的处理
第3节 基本算法语句 伪代码 Excel VBA 条件语句——单行 例3 输入三个数,输出最大数。 第3节 基本算法语句 例3 输入三个数,输出最大数。 伪代码 Excel VBA Read a, b, c x ← a If b > x Then x ← b If c > x Then x ← c Print x a = InputBox("输入a") b = InputBox("输入b") c = InputBox("输入c") x = a If b > x Then x = b If c > x Then x = c MsgBox "最大数" & x
算法的实现——条理化、逻辑化、精微化的过程 a = InputBox("输入a"): b = InputBox("输入b") c = InputBox("输入c") x = a If b > x Then x = b: If c > x Then x = c MsgBox "最大数为" & x 分别输入a = 12,b = 9,c = 5时,为什么输出最大数为9?
第3节 基本算法语句 伪代码 Excel VBA 条件语句——块 例4 输入x,计算 y = 的值。 第3节 基本算法语句 例4 输入x,计算 y = 的值。 伪代码 Excel VBA Read x If x≥0 Then y ← x2 Else y ← sin x End If Print y x = InputBox("输入一个数") If x >=0 Then y = x^2 Else y = sin(x) End If MsgBox y
第3节 基本算法语句 伪代码 Excel VBA 条件语句——嵌套 例5(P19)输入x,计算 y = 的值。 第3节 基本算法语句 例5(P19)输入x,计算 y = 的值。 伪代码 Excel VBA Read x If x > 0 Then y ← 1 Else If x = 0 Then y ← 0 Else y ← -1 End If Print y x = InputBox("输入一个数") If x > 0 Then y = 1 ElseIf x = 0 Then y = 0 Else y = -1 End If MsgBox y
第3节 基本算法语句 伪代码 Excel VBA 循环语句——For 第3节 基本算法语句 例6(P21)计算1 3 5 7 … 99。 伪代码 Excel VBA S ← 1 For I From 3 To 99 Step 2 S ← S I End For Print S S = 1 For I = 3 To 99 Step 2 S = S*I Next I MsgBox S
第3节 基本算法语句 伪代码1 伪代码2 循环语句——While 第3节 基本算法语句 例7(P21)求最小的奇数I,使 1 3 5 7 … I > 10 000。 伪代码1 伪代码2 S ← 1 I ← 3 While S≤10 000 S ← S I I ← I + 2 End While Print I S ← 1 I ← 1 While S≤10 000 I ← I + 2 S ← S I End While Print I
第3节 基本算法语句 Excel VBA-1 Excel VBA-2 循环语句——While 第3节 基本算法语句 例7(P21)求最小的奇数I,使 1 3 5 7 … I > 10 000。 Excel VBA-1 Excel VBA-2 S = 1 I = 1 While S <= 10000 I = I + 2 S = S*I Wend MsgBox I S = 1 I = 1 Do I = I + 2 S = S*I Loop Until S>10000 MsgBox I
例8(P22、例4)抛硬币试验。 伪代码 s ← 0 Read n For i From 1 To n If Rnd > 0.5 Then s ← s + 1 End For Print 出现正面的频率为s/n
Excel VBA s = 0 n = InputBox("输入试验次数") For i = 1 To n If Rnd > 0.5 Then s = s + 1 Next i MsgBox "出现正面的频率为" & s/n
第4节 算法案例 问题背景与分析 例1(P25、例1)孙子问题:“今有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二.问物几何?答曰:二十三.” 分析 “孙子问题”相当于求关于x,y,z的 不定方程组 的正整数解.
流程图 伪代码 m←2 While Mod(m, 3)≠2 或 Mod(m, 5)≠3 或 Mod(m, 7)≠2 m←m + 1 流程图 伪代码 N Y 输出m Mod(m, 3)≠2 m←m + 1 m←2 或Mod(m, 5)≠3 或Mod(m, 7)≠2 m←2 While Mod(m, 3)≠2 或 Mod(m, 5)≠3 或 Mod(m, 7)≠2 m←m + 1 End While Print m
Excel VBA-1 m = 2 While m Mod 3 < > 2 Or m Mod 5 < > 3 Or m Mod 7 < > 2 m = m + 1 Wend MsgBox "不定方程的一个解为" & m
Excel VBA-2 m = 1 Do m = m + 1 Loop Until m Mod 3 = 2 And m Mod 5 = 3 _ And m Mod 7 = 2 MsgBox "不定方程的一个解为" & m
第4节 算法案例 问题背景与分析 例2(P26)求两个整数a和b的最大公约数——欧几里得辗转相除法。 分析 求出列数: 第4节 算法案例 问题背景与分析 例2(P26)求两个整数a和b的最大公约数——欧几里得辗转相除法。 分析 求出列数: a,b,r1,r2,…,rn – 1,rn,0. 这列数从第三项开始,每项都是前两项相除所得的余数,余数为0的前一项rn即是a和b的最大公约数.这种方法称为“欧几里得辗转相除法”.
流程图 伪代码 Read a, b While Mod(a,b)≠0 r←Mod(a,b) a←b b←r End While 流程图 伪代码 输出b a←b Y N 输入a,b r←Mod(a,b) b←r Mod(a,b)≠0 Read a, b While Mod(a,b)≠0 r←Mod(a,b) a←b b←r End While Print b
Excel VBA-1 a = InputBox("输入第一个自然数") b = InputBox("输入第二个自然数") Do r = a Mod b a = b b = r Loop Until r = 0 MsgBox "最大公约数为" & a
Excel VBA-2 a = InputBox("输入第一个自然数") b = InputBox("输入第二个自然数") While a Mod b < > 0 r = a Mod b a = b b = r Wend MsgBox "最大公约数为" & a
第4节 算法案例 问题背景与分析 例3 用二分法求方程x3 - x - 1 = 0在区间 [1,1.5] 内的一个近似解(误差不超过0.001)。 第一步 确定有解区间[a, b] 第二步 取[a, b]的中点 第三步 计算函数在中点处的函数值 第四步 判断中点处函数值是否为0 第五步 判断新的有解区间的长度是否小于 给定的误差
流程图 伪代码 10 Read a, b, c 20 x0←(a + b)/2 30 f(a)←a3 – a – 1 流程图 伪代码 N 输出x0 x0←(a+b) f(x0)=0 输入a,b,c b←x0 f(a)f(x0)<0 |a – b| < c a←x0 f(a)←a3 - a - 1 f(x0)←x03 – x0 – 1 Y 10 Read a, b, c 20 x0←(a + b)/2 30 f(a)←a3 – a – 1 40 f(x0)←x03 – x0 – 1 50 If f(x0) = 0 Then Goto 120 60 If f(a)f(x0) < 0 Then 70 b←x0 80 Else 90 a←x0 100 End If 110 If |a – b|≥c Then Goto 20 120 Print x0
Excel VBA-1 10 a = Val(InputBox("输入区间左端点值")) 20 b = Val(InputBox("输入区间右端点值")) 30 c = Val(InputBox("输入误差点限制")) 40 x0 = (a + b) / 2 50 f1 = a^3 - a - 1 60 f2 = x0^3 - x0 - 1 70 If f2 = 0 Then Goto 140 80 If f1*f2 < 0 Then 90 b = x0 100 Else 110 a = x0 120 End If 130 If Abs(a – b) >= c Then Goto 40 140 MsgBox "方程的近似解为" & x0 Excel VBA-1
Excel VBA-2 a = Val(InputBox("输入区间左端点值")) b = Val(InputBox("输入区间右端点值")) c = Val(InputBox("输入误差限制")) Do x0 = (a + b) / 2 f1 = a^3 - a - 1 f2 = x0^3 - x0 - 1 If f2 = 0 Then Exit do If f1*f2 < 0 Then b = x0 Else a = x0 End If Loop Until Abs(a – b) < c MsgBox "方程的近似解为" & x0 Excel VBA-2
Excel VBA-3 a = Val(InputBox("输入区间左端点值")) b = Val(InputBox("输入区间右端点值")) c = Val(InputBox("输入误差限制")) Do x = (a + b) / 2 If f(x) = 0 Then Exit do If f(a)*f(x) < 0 Then b = x Else a = x End If Loop Until Abs(a – b) < c MsgBox "方程的近似解为" & x Excel VBA-3
谢谢!