C程序设计第二章 算法

合集下载

C语言程序设计第二章算法

C语言程序设计第二章算法
If the counter is not equal to zero Set the average to the total divided by the counter Print the average
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语言程序设计(谭浩强版)第二章

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精选文档

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章

c程序设计 谭浩强 第2章
2.6结构化程序 设计方法 作业
我们的任务是用计算机解题,就是用计算机实现算法; 用计算机语言表示算法必须严格遵循所用语言的语法 规则。 【例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章

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章算法

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算法

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章算法

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语言程序设计第二章 算法

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程序设计第五版谭浩强课后答案 第二章答案

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程序设计谭浩强第二章习题与答案

(完整版).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语言程序设计-第二章

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章_算法

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章(谭浩强)

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语言程序设计教程

C第2章_算法 C语言程序设计教程
6
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  语言算法讲解
10
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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档