C语言程序设计课件ppt及程序代码第2章算法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*
2.2 简单算法举例
【例2.5】对一个大于或等于3的正整数,判断它是不是一个素数。 S1: 输入n的值 S2: i=2 S3: n被i除,得余数r S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5: i+1→i 改进: S6:如果i≤ sqrt(n),返回S3;否则打印n“是素数”;然后算法结束
*
2.5结构化程序
例2.22 将1到1000之间的素数打印出来。埃拉托色尼筛法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ··· ···
\
2 3 5 7 9 11 13 15 17 ··· ···
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ··· ···
i=i+1
*
2.5结构化程序
将X1去掉(使X1=0)
i=2
当i<sqrt(n)的整数部分
如果Xi未去掉,则将Xi+1到Xn间的全部是Xi倍数的数去掉
i=i+1
将Xi+1到Xn间的全部是Xi倍数的数去掉
否
是
Xi=0
*
2.5结构化程序
j=i+1
j<=n
将能被Xi整除的Xj去掉
确实可以?
*
2.4 怎样表示一个算法
算法的三种基本结构--循环结构 ②直到型(Until)循环
直到型循环实现5个数的打印 输出用传统流程图算法实现
*
2.4 怎样表示一个算法
三种结构的共点: (1)只有一个入口 (2)只有一个出口. (3)结构内的每一部分都有机会被执行到 每一框内应有一条从入口到出口的路径通过 (4)结构内不能存在死循环
*
2.5结构化程序
输入1~n
把所有非素数去掉
打印全部素数ABC源自*2.5结构化程序
输入1~n
把所有非素数去掉
打印全部素数
A
B
C
输入n
i=1
当i<=n
Xi=i
i=i+1
*
2.5结构化程序
输入1~n
把所有非素数去掉
打印全部素数
A
B
C
将X1去掉(使X1=0)
i=2
当i<sqrt(n)的整数部分
如果Xi未去掉,则将Xi+1到Xn间的全部是Xi倍数的数去掉
*
2.4 怎样表示一个算法
算法的三种基本结构 (1) 顺序结构
*
2.4 怎样表示一个算法
算法的三种基本结构 (2) 选择结构
*
2.4 怎样表示一个算法
算法的三种基本结构--循环结构 ①当(while)型循环结构
当型循环实现5个数的打印 输出用传统流程图算法实现
*
*
2.2 简单算法举例
【例2.5】对一个大于或等于3的正整数,判断它是不是一个素数。 S1: 输入n的值 S2: i=2 S3: n被i除,得余数r S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5: i+1→i S6:如果i≤n-1,返回S3;否则打印n“是素数”;然后算法结束。
*
2.2 简单算法举例
例2.1:1×2×3×4×5 原始算法: S1:求1×2得结果2 S2:将2×3得结果6 S3:将6×4得结果24 S4:将24×5得结果120 上述方法虽正确,但较烦琐 解决此类问题的通用方法是: 设两个变量: p 存放被乘数和结果 i 存放乘数 S1:p=1 S2:i=2 S3:p×i→p S4:i+1→i S5:若i<=5 返回s3 否则算法结束。 此算法较上面的算法具有通用性和灵活性
【例2.6】将例2.1的算法用流程图表示。1×2×3×4×5
*
2.4 怎样表示一个算法
例2.9 用流程图算法求2.4
*
2.4 怎样表示一个算法
例 2.10: 用流程图算法判断素数
此处应该填写什么?
*
2.4 怎样表示一个算法
例 2.10: 用流程图算法判断素数
n-1,sqr(n)
*
*
2.4 怎样表示一个算法
用N--S流程图表示顺序结构
用N--S流程图表示选择结构
用N--S流程图表示循环结构
*
2.4 怎样表示一个算法
用N-S流程图表示算法讨论上述各例
*
2.4 怎样表示一个算法
算法用伪代码表示: 例2.16 求5! 算法用伪代码表示 BEGIN(算法开始) 1→t 2→i While i<=5 { t×i →t i+1 →i } print t END(算法结束)
*
2.4 怎样表示一个算法
自然语言: 世界上男人没有了女人就慌了。
世界上男人没有了,女人就慌了。
世界上,男人没有了女人,就慌了。
*
2.4 怎样表示一个算法
用流程图表示算法 ANSI规定的流程图符号,已为世界各国采用,用图框表示操作,用图形表示算法。
*
2.4 怎样表示一个算法
*
2.4 怎样表示一个算法
用计算机语言表示算法
*
2.5结构化程序
结构化程序:就是用高级语言表示的算法,三种基本结构组成的程序必然是结构化程序。 设计思路 –自顶向下、逐步细化、模块化设计、结构化编码。 •程序结构: –按功能划分为若干个基本模块,形成一个树状结构。 –各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。 –其模块化实现的具体方法是使用子函数(子程序)。
*
2.3 算法的特性
有穷性:有限的操作步骤和合理的计算时间。 确定性:不应当产生“歧义性”。 有零个或多个输入 有一个或多个输出:算法的输出不一定就是计算机的打印输出。 有效性:如除数不得为零。
*
2.4 怎样表示一个算法
自然语言表示 传统流程图表示 N-S流程图表示 伪代码表示 计算机语言表示
j=j+1
将Xi+1到Xn间的全部是Xi倍数的数去掉
否
是
Xi=0
*
2.5结构化程序
j=i+1
j<=n
将能被Xi整除的Xj去掉
j=j+1
是
否
是
否
使Xj=0
Xj=0
Xj能被Xi整除
*
2.5结构化程序
*
复习要点
对于一个给定的问题,懂得如何设计算法来解决,并用一种常用方法表示该算法; 了解面向过程的结构化程序设计思想,对于一个复杂的问题,懂得如何划分模块,设计算法; 程序设计语言是次要的,算法是关键算法是关键。
*
2.1 算法的概念
著名计算机科学家沃思提出一个公式: 数据结构+算法=程序 再加上程序设计方法和语言环境 程序=算法+数据结构+程序设计方法+语言工具和环境
*
2.1 算法的概念
做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。 计算机算法:计算机能够执行的算法。 计算机算法可分为两大类: 数值运算算法:求数值的解 ; 非数值运算算法:事务管理领域。
*
2.2 简单算法举例
例2.4 求1-1/2+1/3-1/4+...+1/99-1/100 算法如下 : S1: sign=1 S2: sum=1 S3: deno=2 S4: sign=(-1)×sign S5: term=sign×(1/deno) S6: sum=sum+term S7: deno=deno+1 S8: 若deno<=100返回s4,否则算法结束。
2 3 5 7 11 13 17 ··· ···
*
2.5结构化程序
例2.22 将1到1000之间的素数打印出来。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ··· ···
\
1)挖去1; 2)用下一个未被挖去的数 P 去除后面的各数,把 P 的倍数挖掉; 3)检查 P 是否小于 sqrt(n)的整数部分,如果是,则返回(2)继续执行,否则就结束。 4)纸上剩下的数就是素数。
2.1 算法的概念
程序通常包含的内容有: (1)数据的描述:指定数据的类型和组织形式(数据结构) (2)操作的描述:编程的操作步骤,也称算法(algorithm) 操作的目的:对数据进行加工处理,以便得到结果。 厨师做菜肴: (1)配料:制作菜肴所需的原料 (2)步骤:制作某项菜肴时将原料按规定的步骤加工成所需的菜肴
2.4 怎样表示一个算法
可以看出流程图所包含的部分: (1)图框:表示相应操作; (2)流程线:表示操作的先后顺序; (3)框内外必要的文字说明。 流程图表示算法: 优点:形象直观、表示清晰,各框之间逻辑关系清楚 缺点:流程图占篇幅较多,当算法复杂时,画流程图费时且不方便
2.2 简单算法举例
【例2.5】对一个大于或等于3的正整数,判断它是不是一个素数。 S1: 输入n的值 S2: i=2 S3: n被i除,得余数r S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5: i+1→i 改进: S6:如果i≤ sqrt(n),返回S3;否则打印n“是素数”;然后算法结束
*
2.5结构化程序
例2.22 将1到1000之间的素数打印出来。埃拉托色尼筛法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ··· ···
\
2 3 5 7 9 11 13 15 17 ··· ···
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ··· ···
i=i+1
*
2.5结构化程序
将X1去掉(使X1=0)
i=2
当i<sqrt(n)的整数部分
如果Xi未去掉,则将Xi+1到Xn间的全部是Xi倍数的数去掉
i=i+1
将Xi+1到Xn间的全部是Xi倍数的数去掉
否
是
Xi=0
*
2.5结构化程序
j=i+1
j<=n
将能被Xi整除的Xj去掉
确实可以?
*
2.4 怎样表示一个算法
算法的三种基本结构--循环结构 ②直到型(Until)循环
直到型循环实现5个数的打印 输出用传统流程图算法实现
*
2.4 怎样表示一个算法
三种结构的共点: (1)只有一个入口 (2)只有一个出口. (3)结构内的每一部分都有机会被执行到 每一框内应有一条从入口到出口的路径通过 (4)结构内不能存在死循环
*
2.5结构化程序
输入1~n
把所有非素数去掉
打印全部素数ABC源自*2.5结构化程序
输入1~n
把所有非素数去掉
打印全部素数
A
B
C
输入n
i=1
当i<=n
Xi=i
i=i+1
*
2.5结构化程序
输入1~n
把所有非素数去掉
打印全部素数
A
B
C
将X1去掉(使X1=0)
i=2
当i<sqrt(n)的整数部分
如果Xi未去掉,则将Xi+1到Xn间的全部是Xi倍数的数去掉
*
2.4 怎样表示一个算法
算法的三种基本结构 (1) 顺序结构
*
2.4 怎样表示一个算法
算法的三种基本结构 (2) 选择结构
*
2.4 怎样表示一个算法
算法的三种基本结构--循环结构 ①当(while)型循环结构
当型循环实现5个数的打印 输出用传统流程图算法实现
*
*
2.2 简单算法举例
【例2.5】对一个大于或等于3的正整数,判断它是不是一个素数。 S1: 输入n的值 S2: i=2 S3: n被i除,得余数r S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5: i+1→i S6:如果i≤n-1,返回S3;否则打印n“是素数”;然后算法结束。
*
2.2 简单算法举例
例2.1:1×2×3×4×5 原始算法: S1:求1×2得结果2 S2:将2×3得结果6 S3:将6×4得结果24 S4:将24×5得结果120 上述方法虽正确,但较烦琐 解决此类问题的通用方法是: 设两个变量: p 存放被乘数和结果 i 存放乘数 S1:p=1 S2:i=2 S3:p×i→p S4:i+1→i S5:若i<=5 返回s3 否则算法结束。 此算法较上面的算法具有通用性和灵活性
【例2.6】将例2.1的算法用流程图表示。1×2×3×4×5
*
2.4 怎样表示一个算法
例2.9 用流程图算法求2.4
*
2.4 怎样表示一个算法
例 2.10: 用流程图算法判断素数
此处应该填写什么?
*
2.4 怎样表示一个算法
例 2.10: 用流程图算法判断素数
n-1,sqr(n)
*
*
2.4 怎样表示一个算法
用N--S流程图表示顺序结构
用N--S流程图表示选择结构
用N--S流程图表示循环结构
*
2.4 怎样表示一个算法
用N-S流程图表示算法讨论上述各例
*
2.4 怎样表示一个算法
算法用伪代码表示: 例2.16 求5! 算法用伪代码表示 BEGIN(算法开始) 1→t 2→i While i<=5 { t×i →t i+1 →i } print t END(算法结束)
*
2.4 怎样表示一个算法
自然语言: 世界上男人没有了女人就慌了。
世界上男人没有了,女人就慌了。
世界上,男人没有了女人,就慌了。
*
2.4 怎样表示一个算法
用流程图表示算法 ANSI规定的流程图符号,已为世界各国采用,用图框表示操作,用图形表示算法。
*
2.4 怎样表示一个算法
*
2.4 怎样表示一个算法
用计算机语言表示算法
*
2.5结构化程序
结构化程序:就是用高级语言表示的算法,三种基本结构组成的程序必然是结构化程序。 设计思路 –自顶向下、逐步细化、模块化设计、结构化编码。 •程序结构: –按功能划分为若干个基本模块,形成一个树状结构。 –各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。 –其模块化实现的具体方法是使用子函数(子程序)。
*
2.3 算法的特性
有穷性:有限的操作步骤和合理的计算时间。 确定性:不应当产生“歧义性”。 有零个或多个输入 有一个或多个输出:算法的输出不一定就是计算机的打印输出。 有效性:如除数不得为零。
*
2.4 怎样表示一个算法
自然语言表示 传统流程图表示 N-S流程图表示 伪代码表示 计算机语言表示
j=j+1
将Xi+1到Xn间的全部是Xi倍数的数去掉
否
是
Xi=0
*
2.5结构化程序
j=i+1
j<=n
将能被Xi整除的Xj去掉
j=j+1
是
否
是
否
使Xj=0
Xj=0
Xj能被Xi整除
*
2.5结构化程序
*
复习要点
对于一个给定的问题,懂得如何设计算法来解决,并用一种常用方法表示该算法; 了解面向过程的结构化程序设计思想,对于一个复杂的问题,懂得如何划分模块,设计算法; 程序设计语言是次要的,算法是关键算法是关键。
*
2.1 算法的概念
著名计算机科学家沃思提出一个公式: 数据结构+算法=程序 再加上程序设计方法和语言环境 程序=算法+数据结构+程序设计方法+语言工具和环境
*
2.1 算法的概念
做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。 计算机算法:计算机能够执行的算法。 计算机算法可分为两大类: 数值运算算法:求数值的解 ; 非数值运算算法:事务管理领域。
*
2.2 简单算法举例
例2.4 求1-1/2+1/3-1/4+...+1/99-1/100 算法如下 : S1: sign=1 S2: sum=1 S3: deno=2 S4: sign=(-1)×sign S5: term=sign×(1/deno) S6: sum=sum+term S7: deno=deno+1 S8: 若deno<=100返回s4,否则算法结束。
2 3 5 7 11 13 17 ··· ···
*
2.5结构化程序
例2.22 将1到1000之间的素数打印出来。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ··· ···
\
1)挖去1; 2)用下一个未被挖去的数 P 去除后面的各数,把 P 的倍数挖掉; 3)检查 P 是否小于 sqrt(n)的整数部分,如果是,则返回(2)继续执行,否则就结束。 4)纸上剩下的数就是素数。
2.1 算法的概念
程序通常包含的内容有: (1)数据的描述:指定数据的类型和组织形式(数据结构) (2)操作的描述:编程的操作步骤,也称算法(algorithm) 操作的目的:对数据进行加工处理,以便得到结果。 厨师做菜肴: (1)配料:制作菜肴所需的原料 (2)步骤:制作某项菜肴时将原料按规定的步骤加工成所需的菜肴
2.4 怎样表示一个算法
可以看出流程图所包含的部分: (1)图框:表示相应操作; (2)流程线:表示操作的先后顺序; (3)框内外必要的文字说明。 流程图表示算法: 优点:形象直观、表示清晰,各框之间逻辑关系清楚 缺点:流程图占篇幅较多,当算法复杂时,画流程图费时且不方便