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语言程序设计教案第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语言程序设计课件ppt及程序代码第2章算法
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)结构内不能存在死循环
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 程序设计(谭浩强完整版)第二章解析
一般变量都是用匈牙利命名法命名的。 int nCount; char chChoice;
整型数据
整型常量:
常量是根据其表面形式来判定,整型量即是没有小数点的 整数,范围:-231~(231-1) ,有三种形式: 1)十进制(默认方式)
2)八进制 以0开头
43 1345 87654
043, 056, 011
1
0
0
0
0
0
1
非打印字符
有些ASCII的字符代表某些操作,不能打印出来, 如回车、退格等,可用两种方式表示这些字符。 1)用ASCII码的形式 2)用转义字符 char re=13; char re=‘\n’;(p15)
转义字符 \a \n \t \b \r \f \v
含 响铃
义
ASCII代码 7 10 9 8 13 12 8
不同类型的整型数据间 { unsigned short a;的赋值归根到底就是一 short int b= -1; 条:按存储单元中的存 储形式直接传送。
void main() a=b; cout<<"a="<<a<<endl; unsigned short a;
}
结果:65535
a 1111111111111111
3)十六进制 以0x开头 0xdf(举例说明)
0x12
0xa3
0x34
#include<iostream.h>
void main(void)
{ int int10,int8,int16; //定义3个整型变量 int10=10; int8=010; int16=0x10; //默认为十进制 //八进制 //十六进制 输出 int10=10 int8=8 int16=16
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.1算法的概念及特性
2.1.1算法的概念
2.1.2算法的特性
2.2算法的流程图表示
2.2.1传统流程图
起止框
处理框
输入输出框
判断框
流程线
连接点
注释框
图2.1 常用的流程图符号
图2.2 求解例2.1的流程图
2(x 0)
2x 3y 0
(x 0)x 1
(x 0)
>⎧+⎪==⎨
⎪+<
⎩
图2.3 求解例2.2的流程图 图2.4 求解例2.3的流程图
2.2.2 结构化程序的3种基本结构
图2.5 顺序结构图2.6 分支结构图2.7 当型循环结构图2.8 直到型循环结构2.2.3结构化流程图
A B
p
成立不成立
A B
当条件p成立
A
直到条件p成立
A
图2.9 顺序结构图2.10 分支结构图2.11 当型循环结构图2.12 直到型循环结构
输入x
x>0?
是否
y=2*x+3 是否
y=0 y=x*x+1
x==0?
输出y aver=0;count=0
输入x
aver=aver+x;count=count+1;
输入x
当x≠0时
aver=aver/count
输出aver
图2.13 例2.2的N-S图图2.14 例2.3的N-S图
习题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--程序设计第二章解析教学讲义ppt课件
C++程序设计
• 关系表达式
– 由关系运算符连接的表达式。是一种简单的逻辑表达式。值为true 或false。
例如: a+b>c+d /*等同于(a+b)>(c+d),结果为0或1*/ y=a>b /*计算a>b的值0或1赋给y,y的值为0或1*/ a>b>c /*等同于(a>b)>c,先求a>b 的值,
❖ 嵌套在if分支中: if (<表达式1>) if (<表达式2>) <语句1>; else<语句2>;
❖ 嵌套在else分支中: if (表达式1) 语句1; else if (表达式2) 语句2; else if … else 语句n;
C++程序设计
配对关系实例:2.2.2
if
语句的嵌套 • else和if的配对关系 – ”就近配对“原则,相距最近且
//语句1: if(n%3==0)
还没有配对的一对if和else首先 配对
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
else cout<< n<<″是3的倍数但不是5的倍数″<<endl;
//语句2:
if(n%3==0)
{
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
float a,b,c; float delta,x1,x2; cout<<"输入三个系数a(a!=0), b, c:"<<endl; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t‘<<"c="<<c<<endl; delta=b*b-4*a*c;
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
C语言程序设计学习指导与实践教程——第2章习题和实验解答2.1 C语言概述1.【习题解答】1结构化程序有三大基本结构:顺序、分支和循环.2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
有穷性:一个算法应包含有限的操作步骤而不能是无限的。
确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。
有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。
对于程序设计人员,必须会设计算法,并根据算法写出程序。
可以用自然语言、流程图、伪代码和计算机语言表示算法。
3.C语言的主要特点有:语言简洁、紧凑,使用方便、灵活。
ANSI C一共只有32个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用C语言写的程序可移植性好。
4.用传统流程图表达如下:5. 计算机硬件系统的组成:计算机硬件系统主要由运算器、控制器、存储器、输入设备和输出设备构成,运算器和控制器合称为中央处理器(CPU),输入设备和输出设备统称为外部设备。
6.计算机网络常用的传输介质:分为有线介质和无线介质;有线介质包括光纤、同轴电缆和双绞线;无线介质包括红外信号、微波等。
2.2 数据类型与表达式1.【习题解答】一、选择题1.D2.B3.A4.B5.A6.B7.D8.D9.C二、填空题1.整型、实型、字符型、枚举类型2.3.5000003.逗号运算符4.三,自右向左5.1,06.32767三、编程题1.已知球的半径为1.5cm,计算球的体积。
C语言程序设计—算法
算法步骤
S1: sign=1
sign:表示当前项的数值符号
term:表示当前项的值
sum:表示当前项的累加和
deno:表示当前项的分母
S2: sum=1
S3: deno=2
S4: sign=(-1) sign
S5: term=sign
(1/deno)
S6: sum=sum+term
S7: deno=deno+1
数”
结束
N
传统流程图的弊端
传统的流程图用流程线指出各框的执行顺序,对
流程线的使用没有严格限制。因此,使用者可以
不受限制地使流程随意地转来转去,使流程图变
得毫无规律,阅读时要花很大精力去追踪流程,
使人难以理解算法的逻辑。
三种基本结构
真
假
P
假
P
A
A
B
真
B
A
顺序结构
选择结构
循环结构
三种基本结构的特点
g1:表示第一个学生的成绩
gi:表示第i个学生的成绩
N
算法步骤
n:表示学生学号
n1:表示第一个学生的学号
i+1=>i
Y
S1: 1=>i
S2: 如果gi≥80,则输出ni和gi,否则不输出
S3: i+1=>i
i>50
Y
1=>i
gi≥80
输出ni、
gi
S4: 如果i≤50,返回到S2,继续执行,否则,
算法结束
向计算机语言算法(即程序)过渡。
算法的流程图表示举例
【例2.16】求5!,用伪代码表示。
begin
C语言程序设计【第二-五章复习】
多重 if 结构
真
假
真
假
嵌套 if 结构
嵌套 if 结构就是将整个 if 块插入另一个 if 块中
if (表达式1)
if (表达式2) 真 真 真 假
if (表达式3)
语句;
else
语句;
30
嵌套 if 结构
if (x > 0) if (y > 1) z = 1; else /*这个 else 部分属于哪个 if?*/ z = 2; C语言规定,每个 else 部分总属于前面最近的那 个缺少对应的 else 部分的 if 语句。 提倡使用大括号括起来以避免看起来有二义性。
counter = 0; counter == 10; counter ++; 工作原理 inum = 1; inum < 25; inum = inum + 1; 1、计算表达式1的值,通常为循环变量赋初值; cnt = 100; cnt >0 cnt-2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行
while 循环的一般语法: 工作原理
do { 语句; } while (表达式);
它先执行循环体中的语句, 然后再判断条件是否为真, 如果为真则继续循环;如果 为假,则终止循环。
示例
do { ... ... scanf(“%c”,&a); } while (a != ‟n‟);
37
do-while 循环示例
25
条件结构
if-else 语句的一般形式为:
if (<条件>) { <语句块> } else { <语句块> }
如果条件为真,执行 if 后面的一个语句或一组语句; 如果条件为假,则执行 else 后面的语句。
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)。
一. 算法的基本概念
程序 = 数据结构 + 算法。 算法。 算法:简而言之,就是解决问题的方法与步骤。 算法:简而言之,就是解决问题的方法与步骤。 程序设计语言:是程序开发工具, 程序设计语言:是程序开发工具,即是将算法转化为 程序的开发工具。 程序的开发工具。 程序:算法的具体实现。 程序:算法的具体实现。 学习C语言,不仅要熟练掌握其语言本身的特点、 学习C语言,不仅要熟练掌握其语言本身的特点、 语法规则等意义外,更重要的就是掌握分析问题、 语法规则等意义外,更重要的就是掌握分析问题、解决 问题的方法,就是锻炼分析、分解, 问题的方法,就是锻炼分析、分解,最终归纳整理出算 法的能力。 法的能力。
9 8 1
这种递推的方法在计算机解题中经常用到。另一方面,这九步运算从 这种递推的方法在计算机解题中经常用到。另一方面, 形式上完全一样,不同的只是a 的下标而已。由此, 形式上完全一样,不同的只是ai的下标而已。由此,我们引入循环的处 理方法,并统一用a 表示前一天的桃子数, 表示后一天的桃子数。 理方法,并统一用a0表示前一天的桃子数,a1表示后一天的桃子数。
首先,得先有个地方装这三个数,我们定义三个变量A、B、C, 首先,得先有个地方装这三个数,我们定义三个变量A 将三个数依次输入到A、 A、B 另外,再准备一个MAX装最大数 装最大数。 将三个数依次输入到A、B、C中,另外,再准备一个MAX装最大数。 由于计算机一次只能比较两个数,我们首先把A 由于计算机一次只能比较两个数,我们首先把A与B比,大的数放 MAX中 再把MAX与 又把大的数放入MAX中 入MAX中,再把MAX与C比,又把大的数放入MAX中。 最后, MAX输出 此时MAX中装的就是A、B、 输出, 最后,把MAX输出,此时: 中装的就是A、B、C三数中最大 算法最后可以写成: 算法最后可以写成 MAX中装的就是A、B、C 的一个数。 的一个数。
【例2】猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一 猴子吃桃问题:有一堆桃子不知数目, 觉得不过瘾,又多吃了一只,第二天照此办理, 半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的 一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了, 一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了, 问这堆桃子原来有多少个? 问这堆桃子原来有多少个?
二. 算法的表示方法: 算法的表示方法:
可以用不同的方法表示算法,常用的有: 可以用不同的方法表示算法,常用的有:
–自然语言 –传统流程图 –结构化流程图(N-S图) 结构化流程图(N (N–伪代码 –源代码(源程序) 源代码(源程序)
例: 求1×2×3×4×5 × × × ×
方法一: 方法一: 用自然语言表示算法
程序对数据的处理流程: 程序对数据的处理流程: 程序的主要功能就是对数据的处理, 程序的主要功能就是对数据的处理,其整个流程主要包 括数据的输入、数据的处理、数据的输出。 括数据的输入、数据的处理、数据的输出。
数 据 输 入
数 据 处 理
数 据 输 出
C程序中如何实 现数据输入? 现数据输入?
C程序中如路: 总体思路: 算法最后可以写成: 算法最后可以写成: 假设第一天开始时有a 只桃子,第二天有a 假设第一天开始时有a1只桃子,第二天有a2只,……,第9天有a9只, (1) a1 = 1 {第10天的桃子数,a1的初值} 10天的桃子数 a1的初值 ……, 天有a 天的桃子数, 的初值} 10天是 i = 9 天是a ,……, 1是知道的 现要求a 是知道的, 第10天是a10只,在a1,a2,……,a10中,只有a10 = 1是知道的,现要求a1, 计数器初值为9 只有a {计数器初值为9} 而我们可以看出, ,……, 之间存在一个简单的关系: 而我们可以看出,a1,a2,……,a10之间存在一个简单的关系: (2) ( a= 2 * 计算当天的桃子数} a9 = 2 * a0 10 + 1 )( a1+ 1 ) {计算当天的桃子数} (3) ( a= 1 将当天的桃子数作为下一次计算的初值} a8 = 2 * a1 9 +a0 ) {将当天的桃子数作为下一次计算的初值} ┇ (4) i = i - 1 a1 = 2 * 若i >= ) ,转(2) (5) ( a2 + 1 1 1, 也就是: 也就是:ai = a * ( ai+1 + 1) i = 9,8,7,6,…,1 (6) 输出 20的值 输出a 这就是此题的数学模型。 这就是此题的数学模型。 其中(2) 其中(2) 再考察上面从a ~(5)步为循环 直至a 的计算过程,这其实是一个递推过程, 再考察上面从a ,a(5)步为循环 直至a 的计算过程,这其实是一个递推过程,
一个算法应该具有以下特征:
• 有穷性:包含有限的操作步骤 有穷性: • 确定性:算法中的每一个步骤都应当是确定的 确定性: • 有零个或多个输入:输入是指在执行算法时需要从外界取得必要 有零个或多个输入: 的信息 • 有一个或多个输出:算法的目的是为了求解,“解” 就是输出 有一个或多个输出:算法的目的是为了求解, • 有效性:算法中的每一个步骤都应当能有效地执行,并得到确定 有效性:算法中的每一个步骤都应当能有效地执行, 的结果 。
4. 结构化程序的标准: 结构化程序的标准:
• 由三种基本结构构成: 顺序,分支,循环; 由三种基本结构构成: 顺序,分支,循环; • 程序中没有随意跳转; 程序中没有随意跳转; • 不论程序大小, 只能有一个入口,一个出口; 不论程序大小, 只能有一个入口,一个出口; 无死语句, 无死循环; 无死语句, 无死循环; • ……
T
i≥1
输出MAX 输出 结 束 【例1】的算法的流程图
输出a 输出 0 结 束 【例2】的算法的流程图
算法的结构化描述 (1) 顺序结构
T
(2) 分支结构
条件
F T
条件
F
A A B C B A
(3) 循环结构
A
T
A 条件
F
条件
F
T
4. 计算机程序设计的基本方法
面向过程的结构化程序设计 面向对象的程序设计 自顶向下、逐步求精、 自顶向下、逐步求精、模块化
(1) 输入A,B,C。 输入A 具体步骤: 具体步骤: (2) 若A > B,则MAX ← A;否则MAX←B。 B, A;否则MAX←B MAX←B。 (1) 输入A、B、C。 输入A MAX, C。 (3) 若C > MAX,则 (2) A与B中大的一个放入MAX中MAX ← C。 A与 中大的一个放入MAX中。 输出MAX MAX即为最大数 MAX, (4) 输出MAX,MAX MAX中。 (3) 把C与MAX中大的一个放入即为最大数 MAX中大的一个放入 中大的一个放入MAX中
程序应具有下列特性: 程序应具有下列特性
• 目的性 • 分步性 • 有限性 • 有序性 • 分支性
一个好的程序应该具有: 一个好的程序应该具有: 良好的结构,容易阅读和理解. 良好的结构,容易阅读和理解.
清晰第一,效率第二! 清晰第一,效率第二!
三. 设计算法举例
【例1】输入三个数,然后输出其中最大的数 。 输入三个数, 总体思路: 总体思路:
(4) 输出MAX,MAX即为最大数。 输出MAX,MAX即为最大数。 即为最大数 其中的(2)、(3)两步仍不明确,无法直接转化为程序语句, 其中的(2)、(3)两步仍不明确,无法直接转化为程序语句,可以继 两步仍不明确 续细化: 续细化: (2) 把A与B中大的一个放入MAX中,若A > B,则MAX ← A;否则 中大的一个放入MAX中 B, A; MAX ← B。 B。 (3) 把C与MAX中大的一个放入MAX中,若C > MAX,则MAX ← MAX中大的一个放入 中大的一个放入MAX中 MAX, C。
方法三: 方法三
用N-S图表示算法 图表示算法
方法四: 方法四
用C原代码表示 原代码表示
#include <stdio.h> main ( ) { int i,t; for (t=1,i=1; i<=5; i++) t=t*i; printf(“5!=%d\ printf(“5!=%d\n”, t); }
流程图与算法的结构化描述
流程图
开 始 输入A, 输入A, B, C T 起止框 A> B 判断框 F MAX ← B 连接点 i=i-1 流程线 a = 2*(a1+1)
1 0
开 始 i=9 输入、 输入、输出框 注释框 a1 = 1
MAX ← A 处理框 C > MAX
T
F
MAX ← C
0 _____常见流程图符号 _____常见流程图符号 a =a
步骤1:先求1 步骤1:先求1×2,得到结果2 ,得到结果2 步骤2:将步骤1得到的乘积2再乘以3,得到结果6 步骤2:将步骤1得到的乘积2再乘以3,得到结果6 步骤3:将6再乘以4,得24 步骤3:将6再乘以4,得24 步骤4:将24再乘以5,得120 步骤4:将24再乘以5,得120
方法二: 方法二 用流程图表示算法
第二讲 算法
要点: 要点: • 算法的概念
• 计算机算法的表示方法 • 算法的特点(特征)及算法设计的要求 算法的特点(特征) • 计算机程序设计的基本方法
广义地讲, 广义地讲,为解决问题而采取的方 法和步骤就称为算法 计算机中的算法是指用计算机语言 解决问题的方法和步骤
• 计算机中的算法分为两大类: 计算机中的算法分为两大类: 数值运算算法 非数值运算算法