180 likes | 317 Views
第二章 程序的灵魂 —— 算法. 1+2+3 + • • • +100=? 法一: ((( 1+2 ) +3 ) + • • • 100 ) • • • =5050 法二: ( 1+99 ) + ( 2+98 ) + • • • ( 49+51 ) + • • • 100+50 =50*100+50 =5050. 算法的概念. def : 解决问题的方法或步骤 数值算法 ----- 做数值运算的算法 分类:
E N D
1+2+3+•••+100=? 法一: (((1+2)+3)+ •••100) ••• =5050 法二: (1+99)+(2+98)+ ••• ( 49+51)+ •••100+50 =50*100+50 =5050 算法的概念
def:解决问题的方法或步骤 数值算法-----做数值运算的算法 分类: 非数值算法-----做非数值运算的 算法 程序=数据结构+算法 算法的概念
算法的特性 (1)有穷性:算法包含的操作步骤有限 (2)确定性:算法中每一步的操作步骤都是确 定的,不能模棱两可 (3)有零个或多个输入:在执行算法时从外 界取的必要的信息 (4)有一个或多个输出:即算法的求解 (5)有效性:算法中每一个步骤都应当能 有效执行 算法的概念
醋 酱油 (1)自然语言表示法 算法的表示 Q:将分别装有醋和酱油的两个杯子里面的内容 交换。 分析:借用第三个杯子 (空杯) 2 1 3 Algorithm: Step1:将装有醋的杯子的内容倒入空杯 Step2:将装有酱油的杯子的内容倒入原装醋的杯 子里 Step3:将现装有醋的杯子的内容倒入原 装酱油的杯子里
(二)流程图表示法 算法的表示 起止框 用约定的一些图形符号描述操作步骤,直观形象,易于理解。 以下介绍三种基本结构:顺序、选择、循环。共同点:只有一个入口、只有一个出口、结构内的每一部分都有机会被执行到。 输入输出框 处理框 判断框 流程线 连接点 注释框
传统流程图之三种基本结构 开始 x1,x2 模块A 模块A Temp=x1 模块B X1=x2 模块C 模块C X2=Temp x1,x2 结束 顺序结构 开始 x1,x2 Temp=x1 Q:键盘输入两个数存储起来,要求交换后实现输出。 模块B x1=x2 x2=Temp x1,x2 结束
选择结构 开始 开始 传统流程图之三种基本结构 X1 x1 Y Y 条件P 条件P N N Q:键盘输入任意数并输出算术平方根。 Q:键盘输入任意数并输出算术平方根。 N N x1>=0 X1>=0 Y Y 模块A 模块A 模块B 模块B Y1=sqrt(x1) Y1=sqrt(x1) Y1 Y1 结束 结束
N 条件P N 模块A 模块A 条件P Y Y Y Y 模块A 条件P 条件P 模块A N N 循环结构 传统流程图之三种基本结构 或 (当型循环) (直到型循环) Sample 1 Sample 2
例一:当型循环 开始 I=1,Sum=0 Q:求表达式1+2+3+…+99的值并输出。 N I<100 Y Sum=Sum+I I=I+1 Sum 结束
例二: 直到型循环 开始 I=1,Sum=0 Q:求表达式1+2+3+…+99的值并输出。 Sum=Sum+I I=I+1 N I>99 Y Sum 结束
输入x1,x2 Temp=x1 X1=x2 模块A X2=Temp 模块B 输出x1,x2 模块C (三)N-S流程图表示法 算法的表示 顺序结构 Q:键盘输入两个数存储起来,要求交换后实现输出。 输入x1,x2 模块A Temp=x1 模块B x1=x2 模块C x2=Temp 输出x1,x2
x1>=0 条件P 成立 不成立 模块A 模块B 选择结构 输入x1 Q:键盘输入任意数并输出算术平方根。 成立 不成立 输出sqrt(x1)
循环结构 当条件P成立 直到条件P成立 模块A 或 模块A
nyear nyear能被4整除 实例分析 开始 键盘输入某一年份,判定是否是闰年 N Y nyear不能被100整除 N N Y nyear能被400整除 Y nyear不是闰年 nyear是闰年 结束
nyear nyear nyear nyear 是闰年 是闰年 不是闰年 不是闰年 输入年份nyear nyear能被4整除 y n nyear不能被100整除 N-S流程图 y n nyear能被400整除 n y
键盘输入10个数,找出其中的最大数并输出 输入x max=x I=1 I<10成立 输入x max<x y n max=x I=I+1 输出m
学生成绩管理系统 成绩录入 成绩查询 成绩统计 成绩打印 系统维护 基本思路:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。 具体采用以下方法保证得到结构化的程序: 自顶向下 逐步细化 模块化设计 结构化编码 结构化的程序设计方法 如:学生成绩管理系统