内容正文:
镇雄长风中学 杨鹏
第二章 算法与问题解决
2.1 算法的概念及描述
必修1《数据与计算》
1
用计算机编程解决问题的一般过程:
抽象与建模
设计算法
编制程序
调试与运行
复习:计算机解决问题的一般步骤
分析问题
寻找解决问题的途径与方法
解决问题并
验证结果
解决问题的一般过程
解决问题类型
办公事务处理
管理信息处理
多媒体信息处理
过程控制
科学计算
…………
确定解题目标
必修一:数据与计算
算法与问题解决
计算机编程解决问题的一般过程
抽象与建模(分析问题)
设计算法
编写程序
调试与运行
解决问题
算法的含义
计算机解决问题的方法和步骤
算法的特征
有穷性
可行性
确定性
0个或多个输入(input)
1个或多个输出(output,print)
算法的三要素
数据(基础)
运算(核心)
控制转移(程序结构,赋值、输入、输出)
知识
复习
算法的分类
解析算法
枚举算法
其他算法(排序、递推、分治、动态规划、迭代、搜索、图算法、回溯、……)
必修一:数据与计算
1、今年起,某市开始实行新的阶梯电价,具体如下:
小明根据这一情况设计了一个程序,用于计算家庭用电情况。
(1)小明在分析统计出的电费标准后,确定利用分段函数来解决在一问题,并得到解决这一问题的计算模型:
这个过程属于编写程序解决问题中的____________________。
已知用户使用的电量为n度
n*0.424(0<n<=170)
money= n*0.474(171<n<=260)
n*0.773(n>261)
复习练习:计算机解决问题的一般步骤
每月用电量 一街梯
0~170千瓦时 二街梯
171~260千瓦时 三街梯
260千瓦时及以上
每度电费用 0.424 0.474 0.773
抽象与建模
分段函数
必修一:数据与计算
(2)小明通过 上一个步骤得到以下解决问题的过程:
这个过程属于解决问题中的___________________,他描述算法的方式是用 自然语言 来描述。
第一步:输入本月的用电量
第二步:判断是在一街梯范围内吗?是就乘以0.424。否则转第三步。
第三步:判断是在二街梯范围内吗?是就乘以0.474。否则转第四步。
第四步:判断是在三街梯范围内吗?是就乘以0.773。
第五步:输出计算出的实际电费。
设计算法
复习:计算机解决问题的一般步骤
必修一:数据与计算
(3)接下来小明应该进行的步骤是:_________________ 。
(4)当小明运行了自己编好的程序后,
出现了如右图所示的错误提示。这时他
针对程序错误进行了修改并运行成功,
这个步骤是__________________。
编写程序
调试与运行
复习:计算机解决问题的一般步骤
"invalid character“
表示代码中包含无效字符
1 n=int(input(“请输入本月电量(单位:度)”))
2 if n>0 and n<=170:
3 money=n*0.424
4 elif n<260:
5 money=n*0.474
6 money=n*0.773
7 print(“本月用电量为:”,money)
必修一:数据与计算
2、人们利用计算机解决问题的基本过程为( )
①调试运行程序
②分析问题
③设计算法
④问题解决
⑤编写程序
A. ①②③④⑤ B. ②④③⑤①
C. ④②③⑤① D. ②③⑤①④
练一练
D
计算机解决问题的一般过程
①抽象与建模(分析问题)
②设计算法
③编写程序
④调试运行程序
⑤问题解决
必修一:数据与计算
3、下列关于算法的特征描述不正确的是( )
A. 有穷性:算法必须在有限步之内结束
B. 确定性:算法的每一步必须有确切的含义
C. 输入:算法至少有一个输入
D. 输出:算法至少有一个输出
练一练
C
算法的特征
①有穷性
②可行性
③确定性
④0个或多个输入
⑤1个或多个输出
必修一:数据与计算
4、要输出整数 1到100之间所有的质数,最合适选用的算法是( )
A. 解析法
B. 穷举法
C. 搜索法
D. 排序法
B
练一练
必修一:数据与计算
5、上图是小丽设计的流程图,下列关于该流程图描述错误的是( )
A、该算法符合有穷性特征
B、该流程图中x=2x,y=y+1
体现了算法的确定性
C、该算法不需要用户输入数据
D、把x的初始值改为1,该算法
可以输出y的值
A
练一练(2023秋季学期学业水平考试)
必修一:数据与计算
10
百钱百鸡问题
酸菜鱼菜谱
扫地机器人
硬币分拣机
2.1.2算法的描述
情境导入
必修一:数据与计算
【例1】有三个硬币,其中一个是伪造的,另两个是真的,伪币与真币重量略有不同。现在提供一座天平,如何找出伪币呢?
2.1.2算法的描述
分析:设三个硬币分别为A、B、C,将硬币放在天平上,如果两端平衡则都是真,否则其一为假。如右图流程图所示。
将硬币A、B放上天平
A=B?
A=C?
取下硬币B将C放上天平
C是假币
B是假币
开始
A是假币
必修一:数据与计算
算法的描述
酒 ②
③果汁
①果汁
A
B
C
空杯
【例2】交换两个杯子中的液体。
1、用自然语言描述算法
A
B
将两个分别盛有果汁和酒的杯子进行互换,它的步骤是什么?
步骤1:先将A杯中的果汁倒在C杯中;
步骤2:再讲B杯中的酒倒在A杯中;
步骤3:最后将C杯中的果汁倒在B杯中。
2.1.2算法的描述
必修一:数据与计算
此问题可以抽象为数值运算中的交换两个变量的值,简化为:
①A → C ②B → A ③C → B
用Python语言描述为:
C=A A=B B=C
酒 ②
③果汁
①果汁
A
B
C
空杯
A
B
优点:通俗易懂
缺点:容易引起歧义
2.1.2算法的描述
必修一:数据与计算
【例3】一个农夫带一条狼一头山羊和一篮蔬菜要过河,但是只有一条小船。乘船时,农夫只能带一样东西。当农夫在场时,着三样东西相安无事。一旦农夫不在,狼会吃羊,羊会吃蔬菜。请设计一个算法,时农夫安全地将着三洋东西安全渡河。
同学们现在想一想,他们怎样渡过河去?请写一写你的渡河方案。举例说明算法的优劣。
分析:
题目已经描述得很清楚,狼和羊、羊和白菜不能单独在一起。所以我们的思路就是每次保证狼和羊、羊和白菜不能脱离农夫单独被带到对岸。
2.1.2算法的描述
必修一:数据与计算
【方案一】
第一步:农夫带羊过河,空手回来;
第二步:农夫带蔬菜过河,带羊回来;
第三步:农夫带狼过河,空手回来;
第四步:农夫带羊过河;
第五步:达到目的,结束。
【方案二】
第一步:农夫带羊过河,空手回来;
第二步:农夫带狼过河,带羊回来;
第三步:农夫带蔬菜过河,空手回来;
第四步:农夫带羊过河;
第五步:达到目的,结束。
一个农夫带一条狼一头山羊和一篮蔬菜要过河,但是只有一条小船。乘船时,农夫只能带一样东西。当农夫在场时,着三样东西相安无事。一旦农夫不在,狼会吃羊,羊会吃蔬菜。请设计一个算法,时农夫安全地将着三洋东西安全渡河。
2.1.2算法的描述
必修一:数据与计算
【思考与练习】(Page51)
1、用自然语言描述第40页“高一新生报道流程” 对应的算法。
参考答案:
(1)到所属班级的班主任处签到注册,领取高一新生校园手册;
(2)若已缴费直接转(3)否则先到财务处缴费再转(3);
(3)若需要住校转(4)否则直接转(5);
(4)凭缴费单到高一公寓领取生活用品,布置床铺,然后转(5);
(5)到所属班级教室休息;
(6)算法结束。
2.1.2算法的描述
必修一:数据与计算
某停车场每个车位上方都装有传感器(车位探测器)、前方装有车位指示灯(空车显示绿色,否则显示红色)。车位上方的传感器探测下方的车位是否为空,然后根据探测结果控制车位指示灯的颜色并向区域控制器发送该车位的状态信息(“空车位”或“非空车位”)
2.1.2算法的描述
停车场车位探测中的算法
分析:传感器每隔一段时间进行探测,在某个时刻,若传感器测得结果为空车位,则将指示灯设置为绿色,同时输出“空车位”的信息;否则将指示灯设置为红色,同时区域控制器输出“非空车位”的信息。
必修一:数据与计算
图形 名称 功能
开始/结束
算法的开始和结束
输入/输出
输入和输出信息
处理
计算与赋值
判断
条件判断
流程线
连接点
算法中的流向
表示算法中的转接
2、用流程图描述算法
2.1.2算法的描述
优点:直观易懂(结构清晰、寓意明确)
缺点:多分支时对流程线没有严格控制
上述问题用自然语言描述:
(1)输入变量flag的值。
(2)若flag的值为1,则设置指示灯为绿色,输出“空车位”;否则,设置指示灯为红色,输出“非空车位”
必修一:数据与计算
【思考与练习(Page51-52)】2、用智能电饭煲煮饭时,在算法的控制下,当饭煮熟时,智能电饭煲会自动停止高热煮饭。转为低热保温。这是因为锅底的温度传感器每隔一定时间(比如200毫秒)会将温度数据传递给算法,一旦发现温度达到103℃(此时锅中水已经蒸发完),算法就会控制继电器释放触点,让电饭锅停止烧饭,转入低热保温模式。
右图所示的流程图描述了某个时刻智能电饭煲根据输入的温度数据进行判断、处理夫人算法,则在流程图中①、②处填入的内容分别为①____________________
②____________________
继续高热烧饭
变为低热保温
2.1.2算法的描述
必修一:数据与计算
伪代码(Pseudocode)是一种非正式的,类似于英语结构的,用于描述模块结构图的语言。是一种比较直观简洁的、符号接近于计算机程序代码的算法描述方式。是一种介于自然语言和计算机语言之间的文字和符号,是表达算法的简单而实用的好方法。
【示例】输入3个数,打印输出其中最大的数。可用如下的伪代码表示:
Begin(算法开始)
input A,B,C
if A>B then
A→Max
else:
B→Max
IF C>Max then
C→Max
Print Max
End (算法结束)
伪码只是像流程图一样用在程序设计的初期,帮助写出程序流程。简单的程序一般都不用写流程、写思路,但是复杂的代码,最好还是把流程写下来,总体上去考虑整个功能如何实现。写完以后不仅可以用来作为以后测试,维护的基础,还可用来与他人交流。但是,如果把全部的东西写下来必定可能会浪费很多时间,那么这个时候可以采用伪代码方式。
优点:能被计算机部分识别
缺点:专业性强,无法执行
3、用伪代码描述算法
2.1.2算法的描述
必修一:数据与计算
【例1】 《张丘建算经》中描述 “百钱百鸡”问题:鸡翁一,值钱五;鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?”这是世界上首次提出三元一次不定方程及其一种解法。
分析:假设鸡翁为x只,鸡母y只,鸡雏z只,则下列式子成立:
如果单看一种鸡型,则还需在满足下列条件:
使用解析法和穷举法就可以罗列出X、Y、Z的值。
解析算法
枚举算法
2.1.2算法的描述
《张丘建算经》约成书于公元466—485年间,比《孙子算经》稍晚,作者张丘建,河北邢台市清河县人,南北朝时期北魏数学家。共三卷93题,包括测量、纺织、交换、纳税、冶炼、土木工程、利息等各方面的计算问题。其体例为问答式,条理精密,文词古雅,是中国古代数学史上的杰作,也是世界数学资料库中的一份宝贵的遗产。《张丘建算经》现传本有92问,比较突出的成就有最大公约数与最小公倍数的计算,各种等差数列问题的解决、某些不定方程问题求解等。该书虽为数学专著,但逻辑条理精密,语言文辞古雅,力求通俗易懂。其中的“百钱百鸡问题”是世界上首次提出三元一次不定方程及其一种解法,比欧洲发现和研究这个问题早1000多年。
4、用计算机程序语言描述算法
必修一:数据与计算
22
P
Y
T
H
O
N
语言解法
运行结果:
1
2
3
4
5
6
7
8
9
#百钱百鸡问题
n=0
for x in range(21): #公鸡数量不超过20只
for y in range(34): #母鸡数量不超过33只
z=100-x-y #小鸡数量不超过100只
if 5*x+3*y+z/3==100 and z%3==0: #条件一是公鸡母鸡小鸡的总只数得是100只,即 5 * x + 3 * y+ z/ 3 == 100;条件二是小鸡数量要能被3整除,即 z % 3 == 0。
print(“公鸡:“+str(x)+“只”,“母鸡:”+str(y) +“只”,“小鸡:” +str(z)+“只”) # 输出公鸡母鸡小鸡数量
n+=1 #找出一个结果+1
print(“一共有”+str(n)+“种方法。”) #输出解题结果
2.1.2算法的描述
优点:能被计算机识别执行
缺点:专业性强
必修一:数据与计算
23
VB语言解法
1 private Sub Command1_Click()
2 for x = 1 to 20
3 for y = 1 to 33
4 z = 100 - x * 5 - y * 3
5 if k >= 0 and z mod 3 = 0 then
6 Text1.Text = Text1.Text & "公鸡:" & i & "只" & "母鸡:" & j & "只" & "小鸡:" & k & "只" & Chr(13) &
7 Chr(10)
8 end if
9 next
10 next
11 end Sub
2.1.2算法的描述
必修一:数据与计算
#include <stdio.h>
void main()(c++用 int main)
{
int cock=0,hen,chick;
while(cock<=20)
{
hen=0;
while(hen<=33)
{
chick=100-cock-hen;
if(5.0*cock+3.0*hen+chick/3.0==100.0)
printf("公鸡%d只,母鸡%d只,小鸡%d只
",cock,hen,chick);
hens++;
}
cocks++;
}
}
运行结果:
C语言解法
2.1.2算法的描述
必修一:数据与计算
【2023秋季学期学业水平考试第28题 第3问】(3)养鸡合作社为推广养鸡业务,推出“百分百鸡”积分兑换活动,即用一百个积分恰好兑换一百只鸡。具体为:五个积分兑换一只公鸡,三个积分兑换一只母鸡,一个积分兑换三只小鸡。合作社编写了如下程序,用于计算满足“百分百鸡”条件可能出现的公鸡、母鸡和小鸡数量的各种组合。根据此完成下列要求。
程序中第3行下划线处应填入_________________________________;
程序中第3行下划线处应填入_________________________________;
1 for x in range(0,21) :
2 for y in range(0,34) :
3 z=__________________________
4 if _________________________:
5 print(“公鸡:”,x,“只”,“母鸡:”,y,“小鸡:”,z)
练习
100-x-y
5*x+3*y+z/3==100
100-x-y
5*x+3*y+z/3==100
必修一:数据与计算
通俗易懂,易引起歧义
直观、形象
计算机能识别和执行
能被计算机部分识别和执行
1、自然语言描述
2、用流程图描述
3、用伪代码描述
4、用计算机程序描述
2.1.2算法的描述
必修一:数据与计算
【练习】输入3个数,打印输出其中最大的数。
2.1.2算法的描述
分析:输入任意三个数字,先用任意两个数比较大小,拿出大数和第三个数比较,输出最大数。
1、用自然语言描述算法:
第一步:输入任意三个数字ABC;
第二步:用A和B比较,A大,则max=A;
第三步:用C和max比较,C大,输出C,否则输出max。
2、用流程图描述算法:
3、用计算机语言描述算法:
1 a = int(input("请输入第一个数:"))
2 b = int(input("请输入第二个数:"))
3 c = int(input("请输入第三个数:"))
4 if a > b:
5 max = a
6 else:
7 max = b
8 if c > max:
9 max = c
10 print("其中最大值为:", max)
开始
结束
输入A、B、C
输出Max
A<B?
Max<C?
Max=A
Max=B
Max=C
Y
Y
N
N
必修一:数据与计算
1. 思考教材“问题与讨论”中智能停车场车位引导系统,分别用自然语言和流程图描述该区域控制器的算法。
2.1.2算法的描述
思考
2. 智能农业大棚算法分析设计,分别使用自然语言和流程图描述算法。
3.(选做)思考教材“实践与体验”中“欧几里得”算法和“更相减损之术”算法,选择适当的方法描述该算法。
必修一:数据与计算
学好信息技术
拥抱未来生活
本节课到此结束
30
$