课件38张PPT。苏州大学数学科学学院 徐稼红数学3(必修)——算 法ALGORITHMuuxjh@public1.sz.js.cn一、《算法初步》主要内容与结构? 内容算法的含义→流程图→基本算法语句→算法案例? 结构二、本章教学重点和难点? 重点? 理解算法的含义;? 掌握算法的三种基本结构;? 会用算法语句解决简单的实际问题。? 难点? 循环语句; ? 算法设计。三、教材展开的方式和特点? 展开方式? 特点? 螺旋上升、渐次递进 ? 整合渗透、前引后连 ? 三线合一、横向贯通
? 弹性处理、多样选择自然语言四、内容解析第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;
第二步 计算 ;
第三步 输出运算结果。第1节 算法的含义算法3?? 四种图框类型第2节 流程图 ● N-S结构化流程图(1973年由美国学者I.Nassi和B.Shneiderman提出,N和S是这两位学者英文姓名的第一个字母) ? 三种基本算法结构i) 顺序结构ii) 选择结构第2节 流程图? 三种基本算法结构iii) 循环结构第2节 流程图(直到型)(当型)? 循环结构示例第2节 流程图引例? 循环结构第2节 流程图例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辨别第2节 流程图学习流程图时学生可能出现的错误:(1)关于输入框输入n ? 3(2)关于处理框p←x,y←p,x←y(3)循环结构判断框中的条件? 赋值语句第3节 基本算法语句? 伪代码? Excel VBA例1 交换两个变量 x、y 的值p ← xx ← yy ← pp = xx = yy = p? 赋值号? x、y、p的值各是多少?? 输入输出语句? 伪代码? Excel VBA例2 输入一个数,输出这个数的绝对值。Read ax ← | a |Print xa = Inputbox("请输入一个数")x = Abs(a)Msgbox x? 其他输入、输出语句——input,output
? 英语单词的处理第3节 基本算法语句? 条件语句——单行? 伪代码? Excel VBA例3 输入三个数,输出最大数。Read a, b, cx ← aIf b > x Then x ← bIf c > x Then x ← cPrint xa = InputBox("输入a")b = InputBox("输入b") c = InputBox("输入c") x = aIf b > x Then x = bIf c > x Then x = cMsgBox "最大数" & x第3节 基本算法语句? 算法的实现——条理化、逻辑化、精微化的过程a = InputBox("输入a"): b = InputBox("输入b") c = InputBox("输入c") x = aIf b > x Then x = b: If c > x Then x = cMsgBox "最大数为" & x? 分别输入a = 12,b = 9,c = 5时,为什么输出最大数为9?? 条件语句——块? 伪代码? Excel VBA例4 输入x,计算 y = 的值。Read xIf x≥0 Then y ← x2Else y ← sin xEnd IfPrint yx = InputBox("输入一个数")If x >=0 Then y = x^2Else y = sin(x)End IfMsgBox y第3节 基本算法语句? 条件语句——嵌套? 伪代码? Excel VBA例5(P19)输入x,计算 y = 的值。Read xIf x > 0 Then y ← 1Else If x = 0 Then y ← 0Else y ← -1End IfPrint yx = InputBox("输入一个数")If x > 0 Then y = 1ElseIf x = 0 Then y = 0Else y = -1End IfMsgBox y第3节 基本算法语句? 循环语句——For? 伪代码? Excel VBA例6(P21)计算1 ? 3 ? 5 ? 7 ? … ? 99。S ← 1For I From 3 To 99 Step 2 S ← S ? IEnd ForPrint SS = 1For I = 3 To 99 Step 2 S = S*INext IMsgBox S第3节 基本算法语句? 循环语句——While? 伪代码1例7(P21)求最小的奇数I,使 1 ? 3 ? 5 ? 7 ? … ? I > 10 000。S ← 1I ← 3 While S≤10 000 S ← S ? I I ← I + 2 End WhilePrint IS ← 1I ← 1 While S≤10 000 I ← I + 2 S ← S ? IEnd WhilePrint I? 伪代码2第3节 基本算法语句? Excel VBA-1例7(P21)求最小的奇数I,使 1 ? 3 ? 5 ? 7 ? … ? I > 10 000。S = 1I = 1 While S <= 10000 I = I + 2 S = S*I WendMsgBox I? Excel VBA-2S = 1I = 1 Do I = I + 2 S = S*I Loop Until S>10000 MsgBox I? 循环语句——While第3节 基本算法语句? 伪代码例8(P22、例4)抛硬币试验。s ← 0Read n For i From 1 To n If Rnd > 0.5 Then s ← s + 1 End ForPrint 出现正面的频率为s/n? Excel VBAs = 0n = InputBox("输入试验次数") For i = 1 To n If Rnd > 0.5 Then s = s + 1 Next iMsgBox "出现正面的频率为" & s/n例1(P25、例1)孙子问题:“今有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二.问物几何?答曰:二十三.”分析 “孙子问题”相当于求关于x,y,z的
不定方程组 的正整数解.? 问题背景与分析第4节 算法案例m←2
While Mod(m, 3)≠2 或 Mod(m, 5)≠3 或 Mod(m, 7)≠2
m←m + 1
End While
Print m? 伪代码? 流程图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-1m = 1
Do
m = m + 1
Loop Until m Mod 3 = 2 And m Mod 5 = 3 _
And m Mod 7 = 2
MsgBox "不定方程的一个解为" & m? Excel VBA-2例2(P26)求两个整数a和b的最大公约数——欧几里得辗转相除法。? 问题背景与分析分析 求出列数:
a,b,r1,r2,…,rn – 1,rn,0.
这列数从第三项开始,每项都是前两项相除所得的余数,余数为0的前一项rn即是a和b的最大公约数.这种方法称为“欧几里得辗转相除法”.第4节 算法案例? 伪代码Read a, b
While Mod(a,b)≠0
r←Mod(a,b)
a←b
b←r
End While
Print b ? 流程图a = InputBox("输入第一个自然数")
b = InputBox("输入第二个自然数")
Do
r = a Mod b
a = b
b = r
Loop Until r = 0
MsgBox "最大公约数为" & a? Excel VBA-1a = InputBox("输入第一个自然数")
b = InputBox("输入第二个自然数")
While a Mod b < > 0
r = a Mod b
a = b
b = r
Wend
MsgBox "最大公约数为" & a? Excel VBA-2例3 用二分法求方程x3 - x - 1 = 0在区间 [1,1.5] 内的一个近似解(误差不超过0.001)。? 问题背景与分析第一步 确定有解区间[a, b]
第二步 取[a, b]的中点
第三步 计算函数在中点处的函数值
第四步 判断中点处函数值是否为0
第五步 判断新的有解区间的长度是否小于 给定的误差第4节 算法案例? 伪代码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 ? 流程图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-1a = 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-2a = 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谢谢!