内容正文:
镇雄长风中学 杨鹏
第二章 算法与问题解决
必修1《数据与计算》
2.2 2.3 用算法解决问题的过程
1
算法的三种基本结构
算法基本是由顺序结构、分支结构、循环结构这三种基本结构组合而成。
大程序采用“自上而下,逐步细化”的方法,把大任务拆分成若干个小任务组成,每一个小任务再分解为若干个子任务,逐级分解,直至三种基本结构。
必修一:数据与计算
抽象与建模
设计算法
描述算法
用算法解决问题的过程
算法要素(变量)、计算模型
算法特征、结构化程序设计思想
自然语言、流程图及伪代码
必修一:数据与计算
实例
任意输入三个数,输出其中最小数(用流程图描述算法)。
自然语言描述:
1:输入3个数a,b,c;
2:比较a和b;
3:若a>b,则执行5,否则转向4
4:若b>c,则输出c;否则输出b。
5:若a>c,则输出c;否则输出a。
必修一:数据与计算
设计一个算法,根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
输入两行,第一行输入一个整数代表邮件的重量;
第二行输入一个字符表示是否加急,其中字符 'y’
表示加急;字符 'n' 表示不加急。
输出一行,包含一个整数,表示邮费。
实例
必修一:数据与计算
按照用算法解决问题的过程分析如下:
(1)抽象与建模
已知数据:邮件的重量w,加急标记字符f,其中'y'表示加急;'n'表示不加急。
求解目标:邮费cost。
计算模型:
cost=[(w-1000)÷500]X4
必修一:数据与计算
按照用算法解决问题的过程分析如下:
(2)设计算法
①输人邮件的重量w和加急标记字符f。
②初始化邮费cost为8。
③若w>=1000,则cost =cost=[(w-1000)÷500]X4
,其中cost不足500按500算。
④若f= 'y',则cost = cost + 5。
⑤输出变量cost的值。
必修一:数据与计算
#include "stdio.h"
int cost(weight,emergent)
{
int price=8;
weight -= 1000;
if(emergent == 'y' || emergent == 'Y')
price += 5;
if(weight > 0)
{
price += weight/500 * 4;
if(weight%500 != 0)
price += 4;
}
return price;
}
int main(){
int weight;
char emergent;
printf("Please Enter the weight and emergent state.(eg:100 y):");
scanf("%d %c",&weight,&emergent);
printf("You need to pay RMB: %d",cost(weight,emergent));
return 0;
}
此为C++语言代码
Python语言代码
运行结果
(3)描述算法
#计算邮费
import math
w=int(input(“请输入重量:”))
flag=input(“是否加急?y:n”)
cost=8
if flag==“y”:
cost=cost+5
If (w>1000):
w=w-1000
cost=cost+math.ceil(w/500)*4
Print(“邮费:{}”.format(cost))
输入重量:2100
是否加急?y:ny
邮费:25
必修一:数据与计算
本章小结
抽象与建模、设计算法、描述算法
用算法解决问题的过程
算法的三种基本结构
顺序结构、选择结构(分支结构)、循环结构
流程图符号
开始框、输入输出框、判断框、处理框、流程线、结束框、连接框
算法的基本特征
算法的描述方法
有穷性、确切性、可行性、有0个或者多个输入、有1个或者多个输出
自然语言、流程图、伪代码、计算机程序语言
必修一:数据与计算
巩固练习
1.下面流程图是什么功能?
开始
结束
s=s+i
N
s=0,i=1
Y
i=i+1
i<=100
输出s
该流程图为计算:1+2+3+……+100的值。
利用for循环语句Python代码如下:
s=0
i=1
For i in range(1,101):
s=s+i
i=i+1
Print(s)
必修一:数据与计算
2.下列关于算法错误的是( ) :
A.算法的基本特征是:有穷性,确定性,可行性,有零个或多个输入,至少产生一个输出
B.算法独立于具体的程序设计语言,一个算法可以用多种程序设计语言来实现
C.算法就是程序,设计算法的过程就是程序设计的过程
D.常见的四种算法描述方法是自然语言法、流程图法、伪代码法和计算机程序设计语言
C
巩固练习
必修一:数据与计算
巩固练习
3. 以下哪个步骤不属于用算法解决问题的过程( )
A.抽象与建模
B.问题界定
C.设计算法
D.描述算法
B
必修一:数据与计算
巩固练习
4. 如图所示,是求绝对值的算法,其描述方式分别是( )
A. 自然语言、流程图
B.伪代码、流程图
C.自然语言、伪代码
D.流程图、自然语言
A
必修一:数据与计算
巩固练习
5.将两位同学的身高放入变量a和b中,比较这两个变量的大小,最后把其中较大的数放到变量c中并输出,流程图如图所示。①中应填( )
A.a<b
B.a>b
C.a=b
D.a<>b
B
必修一:数据与计算
巩固练习
6.(开放题)为了鞭策自己能每天早起,小明参加了一个为期100天的“早起打卡赚积分”活动。每天早上5:00-6:00参加活动打卡赚积分,100天后根据积分领取奖金。具体的赚取积分规则如下:
①每天打卡成功可以获得1积分;
②连续3天打卡成功,从第4天起打卡积分翻1倍(每天2积分)。翻倍期间若有1天没有打卡(即连续每天打卡行为中断),则翻倍权益取消,重新连续3天打卡成功才能继续翻倍。
③连续10天打卡成功,可获得1次抽奖机会,有1/10的概率获得100积分;连续20天打卡成功,可获得1次抽奖机会,有1/9的概率获得100积分;以此类推,连续90天打卡成功,可获得1次抽奖机会,有1/2的概率获得100积分;连续100天打卡成功,可获得1次抽奖机会,有1/1的概率获得100积分。
请你根据上述描述,为“早起打卡赚积分”活动设计一个算法,根据小明每天的打卡情况,计算100天后他获得的积分情况。
必修一:数据与计算
本题是对教材“动动有奖”APP项目的一个模仿,已知数据包含了每天是否成功打卡的标记。因为这些数据在事先都是不确定的,所以需要通过输人将数据传递给算法,我们用F表示每天是否成功打卡( 1表示成功打卡,0表示没有打卡)。问题的解决目标比较直接,就是统计100天过去后,小明共拥有的积分总和。
解决该问题的计算模型如下:
已知100组数据: Fi (1 ≤ i ≤ 100),计算积分总和total。
解
析
巩固练习
必修一:数据与计算
本节课到此结束
学好信息技术
拥抱未来生活
$