C程序设计第二章 算法
C语言程序设计第二章算法
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(); }
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语言程序设计(包云)c第2章算法-PPT精选文档
本门课程重点讲述算法的设计。(注意数据结构这门课程)
2019/3/15
第2章 程序的灵魂-算法
4
2.1 算法的概念
3.算法的概念
广义地说,为解决一个问题而采取的方法和步骤,就称为
算法。(用计算机解决问题的步骤,即计算机算法。) 计算机算法可分为两大类:
数值算法 求方程的根 求函数的定积分 非数值算法 算法解决"做什么"和"怎么做"的问题。 图书一些常用的流程图符号:
起止框 输入输出框 判断框 或 处理框 流程线 连接点 注释
2019/3/15
第2章 程序的灵魂-算法
12
用流程图表示算法举例 例2.3 计算1x3…x11的值
步骤1:令p=1
步骤2:令i=1 步骤3:使p x i,并将乘积放入p
开始 1=>p
#include “stdio.h” void main( ) { int a,b,c; scanf("%d,%d",&a,&b); if (a>b) c=a; else c=b; printf(“max=%d\n",c); }
数据和操作的关系:
对操作的描述:即操作步 骤,也就是算法。
数据是操作的对象,操作的目的是对数据进行加工,以得到期望的结果。
• 顺序结构:
虚线框内是一个顺序结构。
A
AB两个框是顺序执行的: 按图中所画的框的顺序,先执 行A操作,再执行B操作。
B
2019/3/15
第2章 程序的灵魂-算法
15
三种基本结构-选择结构
• 选择结构
成立 条件P 不成立
虚线框内是一个选择结构,也称为分支 结构。 此结构包括一个选择框,框中写有一个 条件,根据给定的条件是否成立,从而 选择执行A框还是B框。
c程序设计 谭浩强 第2章
我们的任务是用计算机解题,就是用计算机实现算法; 用计算机语言表示算法必须严格遵循所用语言的语法 规则。 【例2.7】求1×2×3×4×5用C语言表示。 main() { int i,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf(“%d”,t); }
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
15
将例2.2的算用流程图表示。
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
2.5.6计算机语 言
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
14
【例2.6】将例2.1求5!的算用流程图表示。
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
18
三.三种基本结构和改进的流程图
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
顺序结构:
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
2.6结构化程序 设计方法 作业
如果,n表示学生学号,ni表示第i个学生学号; g表示学生成绩,gi表示第i个学生成绩; 则算法可表示如下: S1: 1→i S2: 如果gi≥80,则打印ni和gi,否则不打印 S3: i+1→i S4:若i≤50, 返回S2,否则,结束。
C程序设计第四版第2章
例2.4 求
1 1 1 1 1 1 2 3 4 99 100
sign—当前项符号 term—当前项的值 sum—当前各项的和 deno—当前项分母
S1:sign=1 S2:sum=1 S3:deno=2 -1 S4:sign=(-1)*sign -1/2 S5:term=sign*(1/deno) 1-1/2 S6:sum=sum+term 3 S7:deno=deno+1 满足,返回S4 S8:若deno≤100返回S4;否则算法结束
选择结构
例2.11将例2.1的求5!算法用N-S图表示。
1t
2i
t*it
i+1i
直到i>5 输出t
例2.12 将例2.2的算 法用N-S图表示。将 50名学生中成绩高 于80分者的学号和 成绩输出。
1t 输入ni、gi i+1i 直到i>50 1i gi≧80
是 输出ni,gi
否
i+1i 直到i>50
(3) 结构内的每一部分都有机会被执行到。也就是 说,对每一个框来说,都应当有一条从入口到出 口的路径通过它 (4) 结构内不存在“死循环”
2.4.4 用N-S流程图表示算法
N-S流程图用以下的流程图符号:
p Y A N B 当p1成立 A 循环结构 (当型)
A
B 顺序结构
A
直到p2成立 循环结构 (直到型)
2.4.3 三种基本结构和改进的流程图
2.三种基本结构 (1) 顺序结构
A B
2.4.3 三种基本结构和改进的流程图
2.三种基本结构 (2) 选择结构
Y A
p N
Y B A
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算法
补充:等级考试中上机考试类型: 1.两个数相交换 2.循环计算 3.递归计算 4.素数的判断 5.找最大数 6.整数的计算 7.查找与排序
8.统计处理 9.最大公约数 10.进制转换 11..斐布那契数列 12.串及应用 13.记录与数组 14.递归记录与链表
1.两个数相交换 概念:使两个变量的值相交换 特征:变量依旧,值已对换 2.循环计算 概念:通过循环计算到所求的值(N!,累加求和,数 列前N项之和) 特征:可用累加器和循环结构来处理 3.递归计算 概念:函数直接或间接地调用自己 特征:必须有进行递归调用的选择结构;必须有递 归变量,并可取得其递归终止值
4. 伪代码
介于计算机语言和自然语言之间的文字及符号来描述算法 方便、易懂、便于向计算机语言过渡
5. 计算机语言
算法表示—— 专用工具:流程图
流程图符号
连接点:将画在不同地方的流程线连接起来。
1 3
2 3 1 1 2
N-S图:
P
T
当P1成立 F B A
A B
A
A 直到P1成立
例1:计算 S
自然语言描述:
=>S S+N=>S N+1=>N N+1=>N => N≤100? N≤100?
T
输出S
F 输出S 结束
流程图符号表示的算法实例:
问题:求5!
开始 1=>p 2=>i p*i=>p
Y
开始 1=>i 输入ni gi i+1=>i ni, gi为第I个学生 的学号和成绩
问题:将50名 学生中成绩在 80分以上者的 学号和成绩打 印出来
用计算机语言写出程序
#include <stdio.h> 变量定义、变量初始化 void main() { 循环结构 int cocks = 0, hens , chicks; while (cocks <= 19) 赋值语句 { hens = 0; 选择结构 while( hens <= 33 ) { chicks = 100 - cocks - hens;
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语言程序设计第二章 算法
2021/7/13
9
三、算法的表示
用自然语言表示算法 用流程图表示算法 三种基本结构和改进的流程图 用N-S流程图表示算法 用伪代码表示算法 用计算机语言表示算法
2021/7/13
10
(1)用自然语言表示算法
用自然语言表示通俗易懂,但文字冗长,容易出现歧义性 用自然语言描述包含分支和循环的算法,不很方便 除了很简单的问题外,一般不用自然语言
2021/7/13
C程序设计
主讲人:袁丽
燕大里仁基础教学部
燕大里仁学院基础教学部
第二章:算法—程序的灵魂
1
什么是算法
2
算法的特性
3
算法的表示
4
结构化程序设计方法
2021/7/13
2
一个程序主要包括两方面的信息:
对数据的描述:在程序中要指定用到哪些数据以及这些数据 的类型和数据的组织形式。即数据结构(data structure)
(2)用流程图表示算法
流程图是用一些图框表示各种操作。
2021/7/13
11
一个入口
Y x≧0 N
两个出口 ……
……
菱形框的作用是对一个给定的条件进行判断,根据给定的条件 是否成立决定如何执行其后的操作。
2021/7/13
12
位置不够
防止交叉
连接点(小圆圈)是用于将画在不同地方的流程线连接起来。
2021/7/13
3
一个程序除了算法和数据结构这主要要素外,还应当采用结 构化程序设计方法进行程序设计,并且用某一种计算机语言表 示
算法、数据结构、程序设计方法和语言工具是一个程序设计 人员应具备的知识
算法是解决“做什么”和“怎么做”的问题 程序中的操作语句,是算法的体现 不了解算法就谈不上程序设计
C程序设计第五版谭浩强课后答案 第二章答案
3. 把大象放进冰箱
先打开冰箱门,然后将大象放进冰箱,关冰箱。
2. 什么叫结构化的算法?为什么要提倡结构化的算法?
结构化算法:由一些顺序、选择、循环等基本结构按照顺序组成,流程的转移只 存在于一个基本的范围之内。 结构化算法便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机 会,提高了程序的可靠性,保证了程序的质量,因此提倡结构化的算法。
1. 依次将 10 个数输入,要求输出其中最大的数。
解析: 先输入 10 个整数,将第一个整数给 max,然后依次取剩余整数与 max 进行比 较,如果某个整数大于 max,将该整数交给 max,直到所有剩余整数全部比较 完,max 中保存的即为最大整数,将 max 值输出。
3. 有 3 个数 a,b,c, 要求按大小顺序把他们输出。
108.
2. 有两个相等的实根;
begin
109.
input a
110.
input b
111.
input c
112.
113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130.
b*b - 4*a*c => p if p < 0 {
有实根。
5. 用 N-S 图表示第 4 题中各题的算法
1. 有两个瓶子 A 和 B,分别盛放醋和酱油,要求将他们互换(即 A 瓶原来盛醋,现在盛酱油,B 瓶则相反)。
2. 依次将 10 个数输入,要求输出其中最大的数。 3. 有 3 个数 a,b,c, 要求按大小顺序把他们输出。
(完整版).c程序设计谭浩强第二章习题与答案
习题2.1什么是算法?是从日常生活中找三个例子,描述他们的算法?答:对操作的描述,即操作步骤,就是算法。
广义的说;为解决一个问题而采取的方法和步骤,就称为“算法”。
例:(略)2.2什么叫结构化的算法?为什么要提倡结构化的算法?答:由基本节构所构成的算法属于“结构化”的算法。
结构化的算法便于编写、阅读、便于修改和维护。
这就减少了程序出错的机会、提高了程序的可靠性,保证了程序的质量。
2.3试述三种基本结构的特点,你能否自己另外设计两种基本结构(要符合基本结构的特点)。
答:基本结构有以下共同点:1:只有一个入口。
图2-14-------2-17中的a点为入口。
2:只有一个出口。
图2-14-------2-17中的b点为出口。
注意,一个判断框有两个出口,但一个选择结构只有一个出口。
不能混淆。
3:结构内的每一部分都有被执行到的机会。
也就是说,对每一个框来说,都应当有一条到出口的路径通过它。
图2-20中就没有一条从入口到出口的路径通过A框。
4:结构内不存在死循环(无终止的循环)。
图2-21就是一个死循环。
需要说明的是基本结构并不一定只限于以上3中,只要有以上四种特点就可以。
人们可以自己定义之。
例:如下两图2.4用传统流程图表示求解一下问题的算法。
(1)有两个瓶子A和B,分别放醋和酱油,要求将他们互换。
#include<stdio.h>void main(){int a;int b;int c;a=10;b=5;printf("%d,%d\n",a,b);c=a;a=b;b=c;printf("%d,%d\n",a,b);}(2)一次将10个数输入,要求将将其中最大的数输出。
#include<stdio.h>void main(){int a[10];int i;int max;printf("input 10 numbers.\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");max=a[0];for(i=1;i<10;i++)if(max<a[i]) max=a[i];printf("the max is: %d\n",max) ;}(3)有3个数a b c,要求安大小顺序把他们输出。
C语言程序设计-第二章
数据结构+算法=程序 对 对 操 数 作 据 的 的 描 描 述 述 算法的特点: 1。有穷性 2 确定性 3 有零个或多个输入 4 有1个或多个输出 5 有效性
算法的表示
算法的实现
用自然语言:通俗易懂,但是文 用计算机语言实现 字冗长,易二义性 用流程图:简洁明了,形象直观, (三种结构 顺序 选择 循环) 传统 N-S:取消箭头,更易画 用伪代码:便于向计算机语言过 渡
பைடு நூலகம் 输出x的绝对值的算法描述
自然语言:输入x 值, Input x 如果大于等于0就输 If x 为正 ouput x 出x,否则输出取反 Else 输出-x 输出-x 流程图 N-S流程图 伪代码
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第2章_算法 C语言程序设计教程
7
美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:
起止框
判断框
处理框
输入/输出框
注释框
流向线
连接点
8ቤተ መጻሕፍቲ ባይዱ
小结:
流程图是表示算法的较好的工具。 一个流程图包括以下几部分 :
(1)表示相应操作的框; (2)带箭头的流程线; (3)框内外必要的文字说明。
19
模块设计的方法:
•模块化设计的思想实际上是一种“分而治之” 的思想,把一个大任务分为若干个子任务,每一 个子任务就相对简单了。 •在拿到一个程序模块以后,根据程序模块的功 能将它划分为若干个子模块,如果这些子模块的 规模还嫌大,还再可以划分为更小的模块。这个 过程采用自顶向下方法来实现。 •子模块一般不超过50行。 •划分子模块时应注意模块的独立性,即:使一 个模块完成一项功能,耦合性愈少愈好。
16
2.5 结构化程序设计方法
一个结构化程序就是用高级语言表示的结构化 算法。用三种基本结构组成的程序必然是结构 化的程序,这种程序便于编写、便于阅读、便 于修改和维护。
结构化程序设计强调程序设计风格和程序结构 的规范化,提倡清晰的结构。
结构化程序设计方法的基本思路是:把一个复 杂问题的求解过程分阶段进行,每个阶段处理 的问题都控制在人们容易理解和处理的范围内。
第二章
2.3算法的特征
有穷性 确定性 有零个或多个输入 有一个或多个输出 有效性
4
2.4怎样表示一个算法
用自然语言表示算法 用流程图表示算法 用N-S流程图表示算法 用伪代码表示算法 用计算机语言表示算法
5
设y为被检测的年份,算法可表示如下 S1:2000 → y S2:若y不能被4整除,则输出y “不是闰年”。然后转
C 语言算法讲解
C语言程序设计
2.2 算法的表示
可以用不同的方法表示算法,常用的有: 自然语言 传统流程图 结构化流程图 伪代码 PAD图
11
C语言程序设计
一、用自然语言表示算法
自然语言就是人们日常使用的语言,可以是 汉语或英语或其它语言。用自然语言表示通俗 易懂,但文字冗长,容易出现“歧义性”。自 然语言表示的含义往往不大严格,要根据上下 文才能判断其正确含义,描述包含分支和循环 的算法时也不很方便。因此,除了那些很简单 的问题外,一般不用自然语言描述算法。
28
C语言程序设计
N-S流程图用以下的流程图符号:
(1)顺序结构 (2)选择结构
(3)循环结构
29
C语言程序设计
用三种N-S流程图中的基本框,可以组成复杂的N-S 流程图。图中的A框或B框,可以是一个简单的操作, 也可以是三个基本结构之一。 A框可以是一个选择结构
B框可以是一个循环结构
30
这种如同乱麻一样的算法称为BS型算法,意为 一碗面条(A Bowl of Spaghetti),乱无头绪。
19
C语言程序设计
2.三种基本结构
Bohra和Jacopini提出了以下三种基本结构: 顺序结构、选择结构、循环结构 用这三种基本结构作为表示一个良好算法的基本 单元。
20
C语言程序设计
三种基本结构的图示:
C语言程序设计
例2.11 将例 2.1的求5!算 法用N-S图表 示
31
C语言程序设计
例2.12 将例 2.2的算法用 N-S图表示。 (打印50名学 生中成绩高于 80分的学号和 成绩)
没有输入数据
32
C语言程序设计
例2.12 将例 2.2的算法用 N-S图表示。 (打印50名学 生中成绩高于 80分的学号和 成绩) 有输入数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Y 2.4.2用流程图表示算法 N
起止框
输入输出框
判断框
处理框
流程线
连接点
注释框
①
2.4.2用流程图表示算法
③ ② 流程图是用一些图框来表示各种操作
③
用图形表示算法,直观形象,易于理解
③ 位置不够 ① 起止框 输入输出框 判断框 防止交叉 处理框
②
流程线
连接点
注释框
开始
例2.6 将例2.1的算 法用流程图表示。 求 1× 2× 3× 4× 5 如果需要将最后结果 输出:
2.4.1 用自然语言表示算法
2.2节介绍的算法是用自然语言表示的 用自然语言表示通俗易懂,但文字冗长,容 易出现歧义性
用自然语言描述包含分支和循环的算法,不 很方便
除了很简单的问题外,一般不用自然语言
一个入口
x≧0 两个出口 …… 流程图是用一些图框来表示各种操作 …… 用图形表示算法,直观形象,易于理解
year不能 被4整除 非闰年 闰年 year被100 整除,又能 被400整除
year被4整 除,但不能 被1 1 1 1 1 例2.4 求 1 2 3 4 99 100
规律:
①第1项的分子分母都是1
② 第2项的分母是2,以后每一项的分母子都是 前一项的分母加1
sign—当前项符号 term—当前项的值 sum—当前各项的和 deno—当前项分母
1 1 1 1 1 例2.4 求 1 2 3 4 99 100
S1:sign=1 S2:sum=1 1 S3:deno=2 S4:sign=(-1)*sign 1/3 S5:term=sign*(1/deno) 1-1/2+1/3 S6:sum=sum+term 4 满足,返回S4 S7:deno=deno+1 S8:若deno≤100返回S4;否则算法结束
sign—当前项符号 term—当前项的值 sum—当前各项的和 deno—当前项分母
1 1 1 1 1 例2.4 求 1 2 3 4 99 100
S1:sign=1 99次循环后sum的值 就是所要求的结果 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;否则算法结束
S1:输入n的值 S2:i=2 (i作为除数) S3:n被i除,得余数r S4:如果r=0,表示 n能被 n“ 可改为 n/2 i整除,则输出 n 不是素数”,算法结束;否则执行S5 S5:i+1i S6:如果i≤n-1,返回S3;否则输出n “是素 数”,然后结束。
2.3算法的特性
一个有效算法应该具有以下特点:
③ 笫2项前的运算符为“-”,后一项前面的运 算符都与前一项前的运算符相反
1 1 1 1 1 例2.4 求 1 2 3 4 99 100
S1:sign=1 S2:sum=1 -1 S3:deno=2 S4:sign=(-1)*sign -1/2 S5:term=sign*(1/deno) 1-1/2 S6:sum=sum+term 3 满足,返回S4 S7:deno=deno+1 S8:若deno≤100返回S4;否则算法结束
第2章 算法---程序的灵魂
著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式: 算法 + 数据结构 = 程序
2.1 什么是算法 2.2 简单的算法举例
2.3 算法的特性
2.4 怎样表示一个算法 2.5 结构化程序设计方法
2.1 什么是算法
广义地说,为解决一个问题而采取的方 法和步骤,就称为“算法” 对同一个问题,可以有不同的解题方法 和步骤 为了有效地进行解题,不仅需要保证算 法正确,还要考虑算法的质量,选择合 适的算法
1 t 2 i t*it i+1i 直到i>5 输出t
例2.12 将例2.2的 算法用N-S图表示 。将50名学生中成 绩高于80分者的学 号和成绩输出。
改进的算法:
设变量p为被乘数 变量i为乘数 用循环算法求结果
2.2简单的算法举例
S1:使p=1,或写成1p
S2:使i=2,或写成2i
S3:使p与i相乘,乘积仍放在变量p中,可表 若是1000,求什么? 示为:p*ip S4:使i的值加1,即i+1 i S5:如果i不大于5,返回重新执行S3;否则 ,算法结束 最后得到p的值就是 5!的值
开始
输入n 2 i n%ir r=0 N i+1i N Y 输出n是素数
i> n Y 输出n是素数 结束
通过以上几个例子可以看出流程图是表示 算法的较好的工具
一个流程图包括以下几部分:
(1) 表示相应操作的框 (2) 带箭头的流程线 (3) 框内外必要的文字说明
流程线不要忘记画箭头,否则难以判定各 框的执行次序
若求 1 ×3×5×7×9×11 2.2 简单的算法举例
S1:使p=1,或写成1p
S2:使i=2 3 ,或写成2 3i
S3:使p与i相乘,乘积仍放在变量p中,可表 相当于i ≦11 示为:p*ip S4:使i的值加1 2 i 2,即i+1 S5:如果i不大于5 ,返回重新执行S3;否则 11 ,算法结束 最后得到p的值就是11 5!的值
2.4.3 三种基本结构和改进的流程图
1.传统流程图的弊端 传统的流程图用流程线指出各框的执行顺 序,对流程线的使用没有严格限制
使用者可以毫不受限制地使流程随意地转 来转去,使人难以理解算法的逻辑
2.4.3 三种基本结构和改进的流程图
2.三种基本结构 (1) 顺序结构
A
B
2.4.3 三种基本结构和改进的流程图
如果包括输入数据部分 开始
1 i
开始
1 i
Y
gi≧80
N
输入ni、gi
i+1i N
输出ni、gi i+1i N
i>50
i>50
Y 结束
①
Y
如果包括输入数据部分 开始
1 i
①
1 i
Y
gi≧80
N
输入ni、gi
i+1i N
输出ni、gi i+1i N
i>50
i>50
Y 结束
①
Y
例2.8 例2.3判定闰年的算法用流程图表 示。判定2000—2500年中的每一年是否 闰年,将结果输出。
开始
2000year year不能 被4整除 N year不能 被100整除 Y year是闰年 year+1year year>2500 结束 Y
Y
year 不是闰年
N
Y
year不能 被400整除
N
year不是闰年
year是闰年
N
例2.9 将例2.4的算法用流程图表示。求
1 1 1 1 1 1 2 3 4 99 100
例2.5 给出一个大于或等于3的正整数,判 断它是不是一个素数。 所谓素数(prime),是指除了1和该数本 身之外,不能被其他任何整数整除的数
例如,13是素数,因为它不能被2,3,4 ,…,12整除。
判断一个数n(n≥3)是否素数:将n作为 被除数,将2到(n-1)各个整数先后作为除 数,如果都不能被整除,则n为素数
N
1 t
2 i
t*it i+1i
i>5
Y 结束
开始
例2.6 将例2.1的算 法用流程图表示。 求 1× 2× 3× 4× 5 如果需要将最后结果 输出:
N
1 t
2 i
t*it i+1i
i>5
Y 输出t
结束
例2.7 例2.2的算法用流程图表示。有50 个学生,要求将成绩在80分以上的学生的 学号和成绩输出。
2.2简单的算法举例
例2.1 求1×2×3×4×5× …×1000 可以用最原始的方法进行:
太繁琐 步骤1:先求1*2 ,得到结果2。
步骤2:将步骤1得到的乘积2再乘以3,得 到结果6。
步骤3:将6再乘以4,得24。
步骤4:将24再乘以5,得120。这就是最 后的结果。
2.2简单的算法举例
2.三种基本结构 (2) 选择结构
Y A
p
N
B A
Y
p
N
2.4.3 三种基本结构和改进的流程图 输出1,2,3,4,5
2.三种基本结构 (3) 循环结构
① 当型循环结构 p1 Y A N
0 x
x<5 Y 输出x的值 x+1x N
2.4.3 三种基本结构和改进的流程图 输出1,2,3,4,5
2.三种基本结构 (3) 循环结构
② 直到型循环结构 0 x x+1x 输出x的值 N x≧ 5 Y
A N
p2 Y
以上三种基本结构,有以下共同特点:
(1) 只有一个入口
(2) 只有一个出口
一个判断框有两个出口 一个选择结构只有一个出口 (3) 结构内的每一部分都有机会被执行到。也 就是说,对每一个框来说,都应当有一条从入 口到出口的路径通过它 (4) 结构内不存在“死循环”
例2.2 有50个学生,要求将成绩在80分 以上的学生的学号和成绩输出。
用ni代表第i个学生学号,gi表示第i个学生成绩
S1:1i S2:如果gi≥80, 则输出ni和gi,否则不输出 S3:i+1i