C语言程序设计第二章算法
C语言程序设计教案第2讲 算法
<
>
二,表示算法的三种基本结构
1966年,Bohra和Jacopini提出了程序中需要的三种控 年 和 提出了程序中需要的三种控 制结构
顺序结构 选择结构 循环结构
成立
根据表达式的 值进行选择
A N P
不成立 成立
A
B
M
A B A
P
不成立
成立
P
不成立
P A
不成立 成立
B
A
<
>
三种结构的共同点
只有一个入口 只有一个出口
<
>
例 2-1 问题: 求5的阶乘 问题:对于任意正整数 N,如何计算 N! 计算5 计算5!=1*2*3*4*5
Step1: Step2: Step3: Step4: 计算 1 计算 2 计算 6 计算 24 * * * * 2 3 4 5
可以描述如下: 可以描述如下:
=> => => => 2 6 24 120
数去掉
使xj=0
j+1=>j i+1=>i 1=>i
当 i ≤ n
xi=0 打印所有素数 是 把未挖掉的x 打印出来 否 i
打印xi
<
>
i+1=>i
数制转换
进位计数制
定义:在采用进位计数的数字系统中, 定义:在采用进位计数的数字系统中,如果 只用r个基本符号 例如: 个基本符号( 只用 个基本符号(例如:0,1,2,…,r-1) 表示 数值,则称为基 数制 称为该数制的 数制, 称为该数制的" 数值,则称为基r数制,r称为该数制的"基 数",而数制中每一固定位置对应的单位值 称为"权". 称为"
C语言程序设计教案第2章4 -6
(3)关系或逻辑表达式的值只有两个:真(非零)和假(零)。
(4)分析复杂表达式时,应先找优先级别最高的运算符,同时,注意”()”的优先级别很高,它往往可以改变表达式的运算次序。通过分析复杂表达的运算逻辑,推导出短路原则。
(5)编写一个输出复杂表达式的值及每个参与变量的值的程序。预估程序结果,然后与实验结果对比,从而深入理解短路原则及表达式的运算规律。
【问题】ppt中的程序有哪些错误
【实践】基于强制类型范围缩放数据处理技术的成绩分档程序的设计与实现
授课阶段总结
本节内容以实践为主,以当前所学的知识点,学生可以组织起一个逻辑上相对完整的程序,所以本小节以程序设计思维的训练为重点内容。首先,引导学生设计一个可以进行人机交互的界面—编写一个计算器的菜单,通过选择进行计算,把第一章的计算语句copy到适当的位置(增量开发)。然后,运用本章的知识点,设计具有一定的容错能力和设计技巧(强制类型转换与归一化处理)的学生成绩分档程序。两个例子都用到了本章所介绍的if和switch嵌套句型。
2.4 应用实例(1学时)
教学内容
(1)计算器程序设计。
(2)强制类型转换。首先讲解数据类型之间的转换规则,然后讲解转换的方法及用途。
(3)学生成绩档案管理—成绩等级划分。
讲解思路
(1)本小节主讲设计思想,所以每一个例题都必须有流程图来表达设计思想,通过讲解流程图帮学生梳理思路。然后,把对编程实现时用到技巧及难点进行讲解。
(2)掌握switch多路选择语句,在解决问题时,能够正确选择switch和if语句。
(3)掌握选择语句的流程图的算法描述方法
重点:if选择结构和switch选择结构。
C语言程序设计(谭浩强版)第二章
不应是中断程序的执行,而应是返回一个
表示错误或错误性质的值,以便在更高的
抽象层次上进行处理。
算法设计的原则
4.高效率与低存储量需求
通常,效率指的是算法执行时间; 存储量指的是算法执行过程中所需 的最大存储空间, 两者都与问题的规模有关。
算法设计的原则
算法的时间复杂度
第二章 程序的灵魂——算法
2.1 算法的概念 2.2 算法的简单举例
2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化程序设计方法
算法的概念
计算机应用: 提取数学模型—设计算法— 编程—测试—应用
程序设计=数据结构+算法
数据结构:对数据的描述 算法:对操作的描述 除此之外程序设计还包括:程序设计方法, 和程序设计语言
怎样表示一个算法
例4的伪代码表示法如下 开始 读入整数n 置sum的初值为0 置k的初值为1 执行下面的操作: 如果k为奇数,置item=1/k 如果k为偶数,置item=-1/k sum=sum+item 直到k>n 打印sum的值 结束
算法设计的原则
算法设计的原则
设计算法时,通常应考虑达到以下目标: 1.正确性 2.可读性 3.健壮性 4.高效率与低存储量需求
从算法中选取一种对于所研究的问题 来说是 基本操作 的原操作,以该基 本操作 在算法中重复执行的次数 作 为算法运行时间的衡量准则。
结构化程序设计方法
采用结构化算法写成的计算机程序是结构 化程序。要编写出结构化程序,经常采用 的方法是结构化程序设计方法。这种方法 的基本思路是: 把给定的问题按层次(纵方向)、分阶段 (横方向)分解为一系列易于编程解决的 小问题,然后对应着这些分解的小问题, 设计结构化的算法,最后采用语言将算法 描述出来。这样一种程序设计方法就是结 构化程序设计方法。
C语言程序设计教程第2章程序流程
流程图
算法
确定
程序结构
变量类型
程序语句
(7)调试
调试
C语言程序设计
第二章 程序设计和程序结构
良好的程序编写风格会大大缩 短调试过程,附录4介绍了C语言程 序的一般书写风格,附录11介绍了 一些常见的错误。
C语言程序设计
第二章 程序设计和程序结构
2.1.2 算法
在实际的编程过程中要注意:
1、避免拿起题目就开始写程序的 2、应该先设计出合适的算法
第二章 程序设计和程序结构
本章概述
2.3程序结构 2.1程序设计与算法 2.4流程图及程序例子 2.2流程图
C语言程序设计
第二章 程序设计和程序结构
本章概述
• 本章主要介绍了C语言的程序结构、 流程图的绘制和程序设计的过程。 • 学习目标: • 1、理解程序的开发、设计过程 • 2、掌握C语言程序结构
C语言程序设计
第二章 程序设计和程序结构
其中最后一行的“Press any key to
continue”是VC6.0自动添加在每个
程序运行结果后面的一句提示信息,它
表示当程序执行结束时,操作者可以按
任意键返回到编辑界面。在后面的程序 运行结果中,将不再给出这一信息。
C语言程序设计
第二章 程序设计和程序结构
scanf("%d",&num1);
printf("Input the 2nd integer number: "); scanf("%d",&num2); sum=num1+num2; printf("sum=%d\n",sum); }
C语言程序设计
C语言 第2章 算法
例2.5 判断一个大于等于3的正整数是否为素数。
素数:只能被1和其本身整除的数。 S1:输入n的值
流程图表示见教材P23图2.12
N-S图表示见教材P28图2.35
S2:i=2(i作为除数)
S3:n被i除,得余数r
S4:若r=0,不是素数,算法结束;否则执行S5 S5:i+1→i S6:若i≤n-1,返回S3;否则是素数,结束。 实际上只需判断n能否被2~ n 之间的整数整除即可。所以S6 可改为: S6:若i≤ ,返回S3;否则是素数,结束。 n
3. 算法的组成要素
• 操作。如算术运算、逻辑运算、关系运算、函数运算等。 • 控制结构。用于控制组成算法的各操作的执行顺序。结构 化程序设计中,顺序、选择和循环3种基本结构能组成任何结 构的算法。 4. 用流程图表示算法 1)顺序结构
常用传统流程图符号 见教材P19图2.3
结构化流程图 A B
A
B
2)选择结构(又称选取结构、分支结构)
真
假
P
A B
结构化流程图
真 A
P
假 B
只能执行A或B之一,两条路径汇合在一起然后出口。
3)循环结构(又称重复结构)
分为当型循环结构和直到型循环结构。 P 真 A
假 假
A P 真
当P为真 A
A 直到P为真
当型(while型)循环结构 直到(until型)型循环结构
第 2 章
程序的灵魂-算法
一个程序应包括以下两个方面的内容: (1)对数据的描述 在程序中要指定数据的类型和数 据的组织形式,即数据结构。
(2)对操作的描述 即操作步骤 算法。 数据是操作的对象,操作的目的是对数据进行加工处 理,以得到预期的结果。
第二章-C语言算法PPT课件
❖ 练习: 求2+4+6+……+200的和。
2021/4/8
15
❖例 求1-1/2+1/31/4+…+1/99-1/100。
2021/4/8
16
❖例 对一个大于 或等于3的正整数, 判断它是不是一 个素数。
2021/4/8
17
§2.4.3 用N-S流程图表示算法
传统流程图的弊端
传统的流程图用流程线指出各框的执行顺序,对流程线 的使用没有严格限制。因此,使用者可以不受限制地使 流程随意地转来转去,使流程图变得毫无规律。
通用灵活4
❖ 例2.2 对一个大于或等于3的正整数,判断它是
不是一个素数。
S1:输入n的值 S2:2=>i (i作为除数) S3:n被i除,得余数r S4:如果r=0,表示n能被i整除, 则打印n“不是素数”,算法结束; 否则执行S5 S5:i+1=>i S6:如果i≤n-1,返回S3;否则 打印 n “是素数”,然后结束。
25
§2.4.6 用计算机语言表示算法
❖ 例(求5!)用C语言表示。
main( ) {int i,t; t=1; i=2; while(i<=5)
{t=t*i; i=i+1; } printf("%d",t); }
2021/4/8
26
§ 2.5 结构化程序设计方法
❖ (1) 自顶向下; ❖ (2) 逐步细化; ❖ (3) 模块化设计; ❖ (4) 结构化编码。
第2章 程序的灵魂——算法
❖ 2.1 算法的概念 ❖ 2.2 简单算法举例 ❖ 2.3 算法的特性 ❖ 2.4 怎样表示一个算法 ❖ 2.5 结构化程序设计方法 ❖ 总结
c语言程序设计c第2章算法
• 选择结构
成立
不成立
条件P
A
B
虚线框内是一个选择结构,也称为分支 结构。
此结构包括一个选择框,框中写有一个 条件,根据给定的条件是否成立,从而 选择执行A框还是B框。
开始 1=>p
1=>i p× i=>p
i+2=>i 真
i≤11 假
输出p的值
结束
2020/4/18
第2章 程序的灵魂-算法
13
ห้องสมุดไป่ตู้
用流程图表示算法举例
例2.2 有两个数a,b, 按从大到小的顺序打印 它们。
步骤1:输入a,b的值; 步骤2:如果a≥b,则先打印 a,再打印b;否则,先打印 b,再打印a;算法结束。
开始 输入a,b的值
假
真
a≥b
输出b,a的值
输出a,b的值
结束
2020/4/18
第2章 程序的灵魂-算法
14
三种基本结构-顺序结构
• 顺序结构:
虚线框内是一个顺序结构。
A
AB两个框是顺序执行的:
按图中所画的框的顺序,先执
B
行A操作,再执行B操作。
2020/4/18
第2章 程序的灵魂-算法
15
三种基本结构-选择结构
计算机算法可分为两大类:
数值算法
求方程的根
求函数的定积分
非数值算法
图书检索 算法解决"做什么"和"怎么做"的问题。
人事管理
程序中的按一定顺序列出的操作语句,就是算法的体现。
2020/4/18
第2章 程序的灵魂-算法
5
2.2 简单算法举例
C语言程序设计课件及程序代码第2章算法
13
2.4 怎样表示一个算法
例2.9 用流程图算法求2.4
C语言程序设计课件及程序代码第2章算法
14
2.4 怎样表示一个算法
例 2.10: 用流程图算法判断素数
此处应该填写什 么?
C语言程序设计课件及程序代码第2章算法
15
2.4 怎样表示一个算法
例 2.10: 用流程图算法判断素数
C语言程序设计课件及程序代码第2章算法
程序的灵魂——算法
算法的概念 简单算法举例 算法的特性 怎样表示一个算法 结构化程序方法 总结
C语言程序设计课件及程序代码第2章算法
1
2.1 算法的概念
程序通常包含的内容有:
(1)数据的描述:指定数据的类型和组织形式(数据结构) (2)操作的描述:编程的操作步骤,也称算法(algorithm)
数”;然后算法结束 C语言程序设计课件及程序代码第2章算法
8
2.3 算法的特性
有穷性:有限的操作步骤和合理的计算时 间。
确定性:不应当产生“歧义性”。 有零个或多个输入 有一个或多个输出:算法的输出不一定就
是计算机的打印输出。 有效性:如除数不得为零。
C语言程序设计课件及程序代码第2章算法
C语言程序设计课件及程序代码第2章算法
17
2.4 怎样表示一个算法
算法的三种基本结构 (1) 顺序结构
C语言程序设计课件及程序代码第2章算法
18
2.4 怎样表示一个算法
算法的三种基本结构 (2) 选择结构
C语言程序设计课件及程序代码第2章算法
19
2.4 怎样表示一个算法
算法的三种基本结构--循环结构 ①当(while)型循环结构
C语言程序设计课件及程序代码第2章算法
C语言程序设计_第二章算法概述
计算机算法:是计算机为解决一个问题而采用
的方法和步骤。 计算机算法的两大类:
2004-9-15
数值运算算法:目的求数值解 非数值运算算法:应用广泛
简单算法举例
例2.1 求5!
思考:给定正整数n,求n 应具有通用性、 灵活性 累加,累乘等运算问题的基本算法
累计结果(total):需要设定初值; 变化量(i):正确确定每次参与运算的变化量 累次计算,直到i到达预期范围
total = total OPERATOR(运算符) i; 改变i值,重复计算
应用:例2.4
2004-9-15
简单算法举例
例2.3判断2000-2500年中的每一年是否闰年,
将结果输出。
仔细确定判断条件,逐步缩小判断范围 对范围的确定要保证无遗漏
2004-9-15
算法的特性
移
a A A B
B
b 流程图表示法
N-S图表示法
2004-9-15
选择结构(选取结构、分支结构)
选择结构:有分支,需条件判断 无论条件p是否成立,只能执行A,B两个分支中的一支 A、B分支中,可以有一支是“空语句”(图2.16)
a
Yes/成立
p
NO/不成立
p 成立 不成立 A B B
A
只有一个入口 只有一个出口 结构内部每一部分都能被执行到 结构内不存在“死循环”
由基本结构所构成的算法属于”结构化”的算
法
不存在无规律的转向,只在结构内部才存在分 支和跳转
2004-9-15
伪代码(pseudo code)
伪代码:用文字和符号描述算法
c语言程序设计-第2章_算法
C程序设计(第三版)
例2.7 将例2.2的算 法用流程图表示。打 印50名 学生中成绩在 80分以上者的学号和 成绩。
C程序设计(第三版)
如果如果包括 这个输入数据 的部分,流程 图为
C程序设计(第三版)
例2.8 将例 2.3判定闰 年的算法用 流程图表示
用流程图表示算法要比 用文字描述算法逻辑清 晰、易于理解。
完整的程序设计应该是:
数据结构+算法+程序设计方法+语言工具
C程序设计(第三版)
2.1 算法的概念
广义地说,为解决一个问题而采取的方 法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤 例: 求
n
n 1
100
• 方法1:1+2,+3,+4,一直加到100 加99次 • 方法2:100+(1+99)+(2+98)+…+(49 +51)+50 = 100 + 49×100 +50 加51次
C程序设计(第三版)
2.4 算法的表示
可以用不同的方法表示算法,常用的有: –自然语言 –传统流程图 –结构化流程图 –伪代码 –PAD图
C程序设计(第三版)
2.4.1 用自然语言表示算法 自然语言就是人们日常使用的语言,可 以是汉语或英语或其它语言。用自然语言 表示通俗易懂,但文字冗长,容易出现“ 歧义性”。自然语言表示的含义往往不大 严格,要根据上下文才能判断其正确含义 ,描述包含分支和循环的算法时也不很方 便。因此,除了那些很简单的问题外,一 般不用自然语言描述算法。
S2:如果≥80,则打印和,否则不打印。 S3:i+1 → i S4:如果i≤50,返回S2,继续执行。否则算法结束
c语言程序设计第2章(谭浩强)
第2章程序的灵魂——算法1. 概念:为解决某一特定问题而采取的具体工作步骤和方法。
2. 举例◆计算1+2+3+……+100的值◆计算1×2×3×……×1000的值◆有50个学生,要求输出他们之中成绩在80分以上的学号和成绩◆判定2000-2500年中的每一年是否闰年3. 算法的表示(1) 自然语言(2) 流程图表示法(3) 伪代码表示法(4) 计算机语言表示法(2) 流程图表示法顺序结构、选择结构和循环结构流程图这三种基本结构有以下共同的特点:1. 只有一个入口;2. 只有一个出口;3. 结构中的每一部分都有被执行到的机会;4. 结构内没有死循环。
用上述基本结构的顺序组合可以表示任何复杂的算法结构,但是基本结构中的流程线使流程图显得较乱,于是1973年美国学者提出了一种新的流程图形式。
在这种流程图中,完全去掉了带箭头的流向线,全部算法写在一个矩形框内。
下面是三种控制结构的N-S图。
例1 求四个数的和算法一:在内存中设一累加用的存储单元S。
第1步:将存储单元S清零。
第2步:输入第1个数a1。
第3步:把a1加到存储单元S中。
第4步:输入第2个数a2。
第5步:把a2加到存储单元S中。
第6步:输入第3个数a3。
第7步:把a3加到存储单元S中。
第8步:输入第4个数a4。
第9步:把a4加到存储单元S中。
第10步:把存储单元S中的结果输出。
算法二:在内存中设一累加用的存储单元S和一计数用的单元I。
第1步:将累加单元S清零。
第2步:将计数单元I清零。
第3步:输入一个数A。
第4步:把A加到累加单元S中。
第5步:计数单元I的值增加1,即I+1=>I。
第6步:若I<4则转去执行第3步,否则,继续执行第7步。
第7步:输出存储单元S中的结果。
开始结束S+A=>S 0=>S 0=>I 输入A I+1=>I I<4输出S 0=>s0=>I输入A S+A=>S I+1=>I 直到I=4输出结果S N-S 图Y例2 求5!开始结束T*i=>t 1=>t 2=>i i+1=>i i>5输出S N例3 将50名学生中成绩在80分以上练习1:交换两个单元的内容。
《C语言程序设计》课后习题答案第四版谭浩强
第1章程序设计和C语言 1 1.1什么是计算机程序 1 1.2什么是计算机语言 1 1.3C语言的发展及其特点 3 1.4最简单的C语言程序 51.5运行C程序的步骤与方法1 2 1.6程序设计的任务14 1-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.3C语句573.4数据的输入输出65习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。
C语言第2章算法
第2章程序的灵魂——算法本章重点:1、初步掌握如何设计一个算法2、掌握结构化的程序设计方法——传统的流程图和N-S流程图。
程序=算法(叙述:对操作的描述)+数据结构(叙述:数据类型及组织形式)+程序设计方法+语言工具和环境。
C程序的设计:包括分析问题,写出算法,用C语句(叙述:包括定义语句,控制语句,函数调用,表达式语句,空语句,复合语句)写出程序(设计程序),上机运行。
算法是程序设计的关键。
2.1算法的概念算法:为解决一个问题而采取的方法和步骤。
简单地说就是:解决问题需要做什么并且怎么做。
2.2 简单算法举例高级语言程序设计均是结构化的设计方法。
结构化的设计方法:使用结构清晰,便于阅读的程序结构;体现为自顶向下,逐步细化。
先理解:i=i+1同理:如i=2,p=1, p=p×i通过以下五个例子逐步熟悉算法的设计方法:P14~18例2.1求5!例2.2假设一个班有50个学生,将成绩为80分以上的学生学号及成绩打印出来。
例2.3判断2000~2500年中的哪些年是闰年,并输出结果。
见P17图的分析例2.4求1-1/2+1/3-1/4+...+1/99-1/100例2.5判断≥3的正整数是否为素数。
2.3 算法的特性1、有穷性。
若有循环,则需要有使程序结束的条件;避免死循环。
2、确定性。
算法中每一步骤都应当是确定无误的,不能模棱两可,否则产生歧义性。
3、有0或多个输入。
即程序中可以没有输入语句。
4、有一个或多个输出。
即至少要有一个输出。
5、有效性。
如设计的算法中避免用零做除数。
2.4 怎样表示一个算法本节主要介绍三种方法:自然语言,传统流程图,结构化流程图:N-S流程图。
一、用自然语言:表述要清楚、确定。
2.2节例子就是用它表示的。
缺点:需根据上下文理解正确含义,若断章取义则会失去本身含义。
二、用流程图●美国国家标准化协会ANSI规定常用的流程图符号:P20图2.3●第二节中的例子用流程图表示的结果:P20~23●传统流程图的缺点:复杂问题流程线多,容易绕糊涂,象走迷宫。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else Print “No grade were entered”
31
初始化变量阶段 输入数据值和对程序中 的变量作相应调整阶段 计算打印最终结果阶段
2020/8/13
三种基本结构
15
1966年,Bohra和Jacopini提出了以下 三种基本结构,作为表示一个良好算法的 基本单元。
顺序结构 选择结构 循环结构 A
B
成立
P
A
不成立
B
不成立
P
成立
循环体A
B
顺序结构
选择结构
循环结构
2020/8/13
16
当型(While型)循环结构
– 它的功能是当给定的条件p1成立时,执行A框操作,执行完A后,再 判断条件p1是否成立执行A ,如果仍然成立,再执行A框,如此反复 框,直到某一次p1条件不成立为止,此时不执行A框,而从b点脱离 循环结构。
total = total + grade; counter= counter +1; printf("Enter Grade:"); scanf("%d",&grade); } /* --终止阶段--*/ if( counter != 0 ){ average=(float)total/counter; printf("Class average is %.2f\n", average ); } else printf("No grads were entered\n"); getch(); }
编写 程序
调试和运行
翻译
程序
(编译或解释)
输入 程序
得到 运行结果
2020/8/13
什么是程序?
4
著名的计算机科学家沃思提出: 数据结构+算法=程序
描述数据类型, 组织形式
描述对数据的 操作步骤
算法是计算机为求解某一问题而采用的方法,步骤.
2020/8/13
算法的概念
5
例如:读入三个数,找出并打印其中的最大数 算法:
作业:用C写出描述比较两个数的大小, 输出大的一个数的算法。
2020/8/13
结构化程序设计方法
25
程序的三种基本结构 –顺序结构程序:按照书写顺序依次执行语句 –选择结构程序:按照条件判断选择执行语句 –循环结构程序:通过条件控制循环执行语句
三种基本结构的共同点: • 都是只有一个入口和一个出口; • 结构内的每一个框都有机会被执行; • 结构内没有死循环。
b)确定性。算法的每一步都应当是明确无误的,不能 含义模糊,使执行者无所适从。
c)有零个或多个输入
d)有一个或多个输出
e)有效性。算法中的每一步都应该能有效的执行,执 行算法最后应该能得到确定的结果。
2020/8/13
怎样表示一个算法
9
算法的描述方式 – 用自然语言描述算法 – 用流程图描述算法 – 用N-S结构图描述算法 – 用伪代码描述算法 – 用计算机语言描述算法
2020/8/13
结构化程序设计的基本原则:
26
如果一个程序仅包含这三种基本结构(由这些基 本结构顺序组成),则称为结构化程序。
结构化程序设计的基本原则:
–采用自顶向下、逐步细化的方法进行设计;
–采用模块化原则和方法进行设计。即将大型 任务从上向下划分为多个功能模块,每个模 块又可以划分为若干子模块,然后分别进行 模块程序的编写;
getch(); }
29
2020/8/13
实例研究2
30
用自顶向下、逐步细化的方法制定算法开 发一个求全班平均成绩的程序,程序在每 次运行时都能够处理任意个数的成绩。
2020/8/13
实例分析2
顶层:determine the class average for the quiz 第一步求精: Initialize variables Input,sum,and count the quiz grades Calculate and print the class average 第二步求精 Initialize total to zero Initialize counter to zero
17
打印5个数:1,2,3,4,5。
2020/8/13
三种基本结构的特点
18
以上三种基本结构,有以下共同特点: (1) 只有一个入口。 (2) 只有一个出口。 (3) 结构内的每一部分都有机会被执行到。 (4) 结构内不存在“死循环”(无终止的循环)。
已经证明,任何复杂的问题都可以三种基本算 法结构来描述:顺序、选择、循环。因此用计 算机语句描述的程序也包含三种基本结构。
直到型(Until型)循环
– 它的功能是先执行A框,然后判断给定的p2条件是否成立,如果p2条 件不成立,则再执行A,然后再对p2条件作判断,如果p2条件仍然不 成立,又执行A……如此反复执行A,直到给定的p2条件成立为止, 此时不再执行A,从b点脱离本循环结构。
2020/8/13
当型循环、直到型循环的应用例子
例如:输出两个数中的最大数
2020/8/13
用自然语言描述算法
10
第一步:输入x和y的值
第二步:比较x和y的值,如果x大于y,则 输出x的值,否则输出y的值。
易于理解,但 冗长,不够精 确,难于描述 复杂算法。
例如当描述“输出10个 数中最大数”的算法时, 会冗长、难于理解
2020/8/13
用流程图描述算法
第一步求精:
Initialize variables
Input,sum,and count the quiz grades
Calculate and print the class average
第二步求精:
Initialize total to zero Initialize counter to zero
2020/8/13
用伪代码描述算法
23
用介于自然语言和计算机语言之间的文字 和符号来描述算法.
用伪代码描述比较两个数的大小,输出大的 一个数的算法:
Main() { a=第1个数; b=第2个数; If (a>b)
输出a ; Else 输出b; }
2020/8/13
用计算机语言描述算法
24
要完成一件工作,包括设计算法和实现 算法两个部分。设计算法的目的是为了 实现算法。因此,不仅要考虑如何设计 一个算法,也要考虑如何实现一个算法。
Input the first grade While the user has not as yet entered the sentinel
Add this grade into the running total Add one to the grade counter Input the next grade(possibly the sentinel)
–每个模块都是用结构化程序实现,即都只能 由三种基本结构组成,并通过计算机语言的 结构化语句实现。
2020/8/13
实例研究1
27
1.怎样制定算法
–某个班有10个学生,已知他们参加某次 考试的成绩,求全班同学在这次考试中 的平均成绩。
2020/8/13
实例分析1
28
顶层:determine the class average for the quiz
初始化变量阶段
While student counter is less than or equal to ten Input the next exam grade Add this grade into the running total Add one to the student counter
B
A
B
A
B
直到P成立
顺序
选择
循环
2020/8/13
用N-S结构图描述算法
21
输入x、y的值
x>y
T
F
z=x z=y
输出z的值
用N-S结构图描述的算法
2020/8/13
22
利用N-S图进行详细设计具有以下优点: (1) 功能域明确。 (2) 不可能任意控制转移。 (3) 很容易确定全局和局部数据的作用域。 (4) 很容易表现嵌套关系,也可以表示模块 的层次结构起止框 开始输入/输出框 输入x和y
判断框
Y
x >y ?
处理框 z= x
N z= y
流程线
输出z
结束 图1.5 用流程图描述算法
2020/8/13
传统流程图的弊端
14
传统流程图的弊端
传统的流程图用流程线指出各框的执行顺 序,对流程线的使用没有严格限制。
这种算法难以阅读,也难以修改,从而使 算法的可靠性和可维护性难以保证。
2020/8/13
实例2
#include <stdio.h> void main() {
float average; int counter, grade, total; /* --初始化阶段--*/ total = 0;counter = 0; /* --处理阶段--*/ printf("Enter Grade, -1 to end.\n"); scanf("%d", &grade ); while( grade != -1 ){
① 输入X1,X2,X3 ② 将X1与X2的大数存于MAX中 ③ 将X3与MAX的大数存于MAX中 ④ 输出MAX