本资料来自于资源最齐全的21世纪教育网www.21cnjy.com
高一数学必修3算法初步
公式总结以及例题
秦九韶算法:通过一次式的反复计算逐步得出高次多项式的值,对于一个n次多项式,只要作n次乘法和n次加法即可。表达式如下:
例题:秦九韶算法计算多项式
答案: 6 , 6
理解算法的含义:一般而言,对于一类问题的机械的、统一的求解方法称为算法,其意义具有广泛的含义,如:广播操图解是广播操的算法,歌谱是一首歌的算法,空调说明书是空调使用的算法… (algorithm)
1. 描述算法有三种方式:自然语言,流程图,程序设计语言(本书指伪代码).
2. 算法的特征:
①有限性:算法执行的步骤总是有限的,不能无休止的进行下去
②确定性:算法的每一步操作内容和顺序必须含义确切,而且必须有输出,输出可以是一个或多个。没有输出的算法是无意义的。
③可行性:算法的每一步都必须是可执行的,即每一步都可以通过手工或者机器在一定时间内可以完成,在时间上有一个合理的限度
3. 算法含有两大要素:①操作:算术运算,逻辑运算,函数运算,关系运算等②控制结构:顺序结构,选择结构,循环结构
流程图:(flow chart): 是用一些规定的图形、连线及简单的文字说明表示算法及程序结构的一种图形程序,它直观、清晰、易懂,便于检查及修改。
注意:1. 画流程图的时候一定要清晰,用铅笔和直尺画,要养成有开始和结束的好习惯
2. 拿不准的时候可以先根据结构特点画出大致的流程,反过来再检查,比如:遇到判断框时,往往临界的范围或者条件不好确定,就先给出一个临界条件,画好大致流程,然后检查这个条件是否正确,再考虑是否取等号的问题,这时候也就可以有几种书写方法了。
3. 在输出结果时,如果有多个输出,一定要用流程线把所有的输出总结到一起,一起终结到结束框。
算法结构: 顺序结构,选择结构,循环结构
直到型循环 当型循环
Ⅰ.顺序结构(sequence structure ):是一种最简单最基本的结构它不存在条件判断、控制转移和重复执行的操作,一个顺序结构的各部分是按照语句出现的先后顺序执行的。
Ⅱ.选择结构(selection structure ):或者称为分支结构。其中的判断框,书写时主要是注意临界条件的确定。它有一个入口,两个出口,执行时只能执行一个语句,不能同时执行,其中的A,B两语句可以有一个为空,既不执行任何操作,只是表明在某条件成立时,执行某语句,至于不成立时,不执行该语句,也不执行其它语句。
Ⅲ.循环结构(cycle structure):它用来解决现实生活中的重复操作问题,分直到型(until)和当型(while)两种结构(见上图)。当事先不知道是否至少执行一次循环体时(即不知道循环次数时)用当型循环。
基本算法语句:本书中指的是伪代码(pseudo code),且是使用 BASIC语言编写的,是介于自然语言和机器语言之间的文字和符号,是表达算法的简单而实用的好方法。伪代码没有统一的格式,只要书写清楚,易于理解即可,但也要注意符号要相对统一,避免引起混淆。如:赋值语句中可以用 ,也可以用 ; 表示两变量相乘时可以用“*”,也可以用“”
Ⅰ. 赋值语句(assignment statement):用 表示, 如: ,表示将y的值赋给x,其中x是一个变量,y是一个与x同类型的变量或者表达式.
一般格式:“” ,有时在伪代码的书写时也可以用 “”,但此时的 “ = ”不是数学运算中的等号,而应理解为一个赋值号。
注: 1. 赋值号左边只能是变量,不能是常数或者表达式,右边可以是常数或者表达式。“ = ”具有计算功能。如: 3 = a ,b + 6 = a ,都是错误的,而a = 3*5 – 1 , a = 2a + 3
都是正确的。2.一个赋值语句一次只能给一个变量赋值。 如:a = b = c = 2 , a , b ,
c =2 都是错误的,而 a = 3 是正确的.
例题:将x和y的值交换
, 同样的如果交换三个变量x,y,z的值 :
Ⅱ. 输入语句(input statement): Read a ,b 表示输入的数一次送给 a ,b
输出语句(out statement) :Print x ,y 表示一次输出 运算结果x ,y
注:1.支持多个输入和输出,但是中间要用逗号隔开!2. Read 语句输入的只能是变量而不是表达式 3. Print 语句不能起赋值语句,意旨不能在Print 语句中用 “ = ”4. Print语句可以输出常量和表达式的值.5.有多个语句在一行书写时用 “ ; ”隔开.
例题:当x等于5时,Print “x = ”; x 在屏幕上输出的结果是 x = 5
Ⅲ.条件语句(conditional statement):
1. 行If语句: If A Then B 注:没有 End If
2. 块If语句: 注:①不要忘记结束语句End If ,当有If语句嵌套使用时,有几个If ,就必须要有几个End If ②. Else If 是对上一个条件的否定,即已经不属于上面的条件,另外Else If 后面也要有End If ③ 注意每个条件的临界性,即某个值是属于上一个条件里,还是属于下一个条件。④ 为了使得书写清晰易懂,应缩进书写。格式如下:
例题: 用条件语句写出求三个数种最大数的一个算法.
或者
注:1. 同样的你可以写出求三个数中最小的数。
2. 也可以类似的求出四个数中最小、大的数
Ⅳ.循环语句( cycle statement): 当事先知道循环次数时用 For 循环 ,即使是 N次也是已知次数的循环 当循环次数不确定时用While循环 Do 循环有两种表达形式,与循环结构的两种循环相对应.
说明:1. While循环是前测试型的,即满足什么条件才进入循环,其实质是当型循环,一般在解决有关问题时,可以写成While循环,较为简单,因为它的条件相对好判断. 2. 凡是能用While循环书写的循环都能用For 循环书写 3. While循环和Do循环可以相互转化 4. Do循环的两种形式也可以相互转化,转化时条件要相应变化 5. 注意临界条件的判定.
例题: (见课本)
友情提醒:1. 一定要看清题意,看题目让你干什么,有的只要写出算法,有的只要求写出伪代码,而有的题目则是既写出算法画出流程还要写出伪代码。
2. 在具体做题时,可能好多的同学感觉先画流程图较为简单,但也有的算法伪代码比较好写,你也可以在草稿纸上按照你自己的思路先做出来,然后根据题目要求作答。一般是先写算法,后画流程图,最后写伪代码。
3. 书写程序时一定要规范化,使用统一的符号,最好与教材一致,由于是新教材的原因,再加上各种版本,可能同学会看到各种参考书上的书写格式不一样,而且有时还会碰到我们没有见过的语言,希望大家能以课本为依据,不要被铺天盖地的资料所淹没!
Ex: 1.
2.
3.
答案:1 2. 3.
流程图: 伪代码:
或者
典型例题:
7. 市话话费计算方式为:自接通起。3分钟内(含3分钟)0.2元,超过3分钟的部分每分钟0.1元(不足1分钟按1分钟计),输入一个证书作为通话时长,用条件语句描述通话话费。
8. 某电视机厂2002年全年生产电视机60万台,计划从2003年开始每年的产量比上一年增长15%,设计一个算法,计算从哪一年开始,该厂的电视机产量超过300万台,只写出伪代码.
9. (斐波那契数列) 假定一对大兔子没一个月可以生一对小兔子,而小兔子出生后两个月就有生育能力,问从一对小兔子开始,一年后能繁殖多少兔子?这就是著名的斐波那契数列问题,其规律是从第三个月开始,每个月的兔子数量都是前两个月的兔子数量的和。用循环语句描述这一算法。
10. 一个三位数的十位和个位上的数字交换,得到一个新的三位数,新旧两个三位时都能被4整除,设计一个算法求满足条件的三位数的个数,并写出伪代码.
11.若是两个互质的数,则一定存在整数,使得
答案:1. 15 2. 求m , n 的最大公约数 3. 4. n的所有约数
5 . 计算1——100能被7整除的数的个数 6. a= 2 b= 3 c= 2
7. 解: 8. 解:
9.解:
或者
10.解:
11.解:
算法案例
这一节要求较低,但要掌握几个重要的算法,对于今后的进一步学习和提高数学的素养都有着重要的意义。(要求掌握的用矩形框框起来)
1.求最大公约数(greatest common factor) 辗转相除法----Euclid algorithm
辗转相除法-----VB程序
Private Sub Command1_Click()
Dim M As Long, N As Long, r As Long
M = Val(Text1.Text) '取数据 M
N = Val(Text2.Text) '取数据 N
If M <> Int(M) Or M < 1 Or N <> Int(N) Or N < 1 Then ' 检验数据合法性!
Text3.Text = "数据错误!"
Else
Do
r = M Mod N
M = N '求出最大公约数
N = r
Loop Until r = 0
Text3.Text = CStr(M)
End If
End Sub
Private Sub Command2_Click()
If Text1.Text <> "" Then Text1.Text = "" '清除文本框1
If Text2.Text <> "" Then Text2.Text = "" '清除文本框2
If Text3.Text <> "" Then Text3.Text = "" '清除文本框3
End Sub
Private Sub Command3_Click()
End
End Sub
★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Private Sub Command1_Click()
a = InputBox("输入第一个自然数")
b = InputBox("输入第二个自然数")
While a Mod b <> 0
r = a Mod b
a = b
b = r
Wend
MsgBox ("最大公约数为:" & b)
End Sub
Private Sub Command2_Click()
End
End Sub
2.孙子定理-----VB程序
Private Sub Command1_Click()
m = 2
While m Mod 3 <> 2 Or m Mod 5 <> 3 Or m Mod 7 <> 2
m = m + 1
Wend
MsgBox "不定方程的一个解为" & m
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Command3_Click()
m = 2
Do While m < 10000
Do
m = m + 1
Loop Until m Mod 3 = 2 And m Mod 5 = 3
And m Mod 7 = 2
Print m
Loop
End Sub
孙子问题-----Excel宏程序
Sub 孙子问题()
m = 2
While m Mod 3 <> 2 Or m Mod 5 <> 3 Or m Mod 7 <> 2
m = m + 1
Wend
MsgBox "不定方程的一个解为" & m
End Sub
它的运算涉及到数轮的知识,如数轮倒数,同余式等,这在以后的高校中会有更深入地介绍。
其表述有如下几种方式
意义为:
3. 二分法问题不作要求,有兴趣的同学可以自行阅读,它是一种很重的数学思想,我们以后在高校里会再学习。(见课本)
说明:里面出现了跳转语句的表达方法:也就是在各语句的前面标上标号,在需要运行跳转时就可用 “ Go to X ” ,其中X表示某行语句的标号。这种表达方式比较自由,在不知用何种语句才能实现想到达的地方时,就可以以Go to…直接跳转,方便易行,但在以后的编程终究要尽量少用这种跳转,因为特别是对于大型的程序设计,Go to语句用多了,就不易于检查,而且它破坏了语言结构的规范性,容易出错。由于我们高一阶段的要求比较低,所以也就不要有这种担心。,
一些常用的函数
1. Int(x) :求小于等于x的最大整数
2. Fix(x) :返回x的整数部分
3. Cint(x) :将x的小数部分四舍五入取整
4. Exp(x) :求e的x次方
5. Sqr(x) :求x的平方根
6. Sgn(x) :符号函数,即当x>0时,返回1;0;当x<0时,返回-1
7. RND(x) : 产生一个(0 ,1)之间的随机数,当x<0时,返回相同的随机数;当x>0时,返回随机系列的下一个随机数; 当x>0时,返回上一次生成的随机数
8. Int(Rand((上界-下界)+1))+1 产生上界——下界之间的随机数
说明:不要求大家都记忆,以后在计算机语言的学习中还会再学习
N
Y
A
p
Y N
N
p
A
Y N
A
B
p
A
B
If A Then
B
Else
C
End If
If A Then
B
Else If C Then
D
End If
Read a , b , c
If a≥b Then
If a≥c Then
Print a
Else
Print c
End If
Else
If b≥c Then
Print b
Else
Print c
End If
End If
Read a , b , c
If a≥b and a≥c Then
Print a
Else If b≥c Then
Print b
Else
Print c
End If
While A
…
End While While循环
For I From 初值 to 终值 Step 步长
…
End For For 循环
Do
…
Loop Until p 直到型Do循环
Do While p
…
Loop 当型Do循环
开始
输出S
N
Y
3. 与下列为代码对应的
数学表达式是
Read n
e0
S1
For I from 1To n
S= S*I
ee+1/S
End for
Print e
2. 下面的伪代码的目的是
10 Read m , n
20 If m/n = Int(m/n) Then Go to 70
30 c m -Int(m/n)*n
40 m n
50 n c
60 Go to 20
70 Print n
1. 下面的伪代码输出的结果是:
I 2
For n from 2 To 10 Step 2
I 2 I + 1
If I > 20 Then
I I - 20
End If
End for
Print I
4. 下面的程序输出的是
Read n
I 1
While I ≤ n
If n / I = Int( n / I ) Then
S I
I=I+1
End if
Print S
End while
5. I 0
For n From 1 to 100
If Int ( n / 7 ) = n / 7 then
I I+1
End If
End For
Print I
上面一段为代码的目的是:
6. a1
b2
c3
ab
b c
c a
Print a ,b ,c
a= b=
c=
Read a , b
While Mod (a , b ) ≠ 0
r = a Mod b
a = b
b = r
End While
Print b
Excel宏程序
Sub 求最大公约()
a = InputBox("输入第一个自然数")
b = InputBox("输入第二个自然数")
While a Mod b <> 0
r = a Mod b
a = b
b = r
Wend
MsgBox ("最大公约数为:" & b)
End Sub
说明:孙子问题被称为“孙生剩余定理”,或“中国剩余定理”,出自《孙子算经》,后来我国南宋数学家秦九韶作出比较完整的阐述,并发明“大衍求一术”,是解决一次同余式的关键。1592年明朝程大位的《算法统宗》里有一首“数学诗”暗示了孙子问题的解法:三人同行七十稀,五树梅花廿一枝,七字团圆正半月,除百零五便得知。
m2
While Mod( m , 3 ) ≠ 2 或
Mod (m , 5 ) ≠ 3或
Mod (m ,7 )≠ 2
m = m + 1
End While
Print m
m ≡ 2 (Mod 3 )
m ≡ 3 (Mod 5 )
m ≡ 2 (Mod 7 )
m Mod 3 = 2
m Mod 5 = 3
m Mod 7 = 2
Mod( m , 3 ) =2
Mod (m , 5 ) = 3
Mod (m ,7 )= 2
21世纪教育网 -- 中国最大型、最专业的中小学教育资源门户网站。 版权所有@21世纪教育网