C语言(第3章_简单算法制定).ppt
C语言程序设计教程 (第2版),第3章 简单算法设计,第3章 程序的简单算法制定,本章主要内容 1. 结构化程序的算法设计 2. 结构化算法的性质及结构 3. 结构化算法的描述方法 4. 结构化算法流程图,第3章 程序的简单算法制定,算法 解决问题的方法和要遵循的步骤。 算法描述了程序要执行的操作及操作的步骤顺序。 程序的功能是通过算法来描述的。 C语言程序是一种结构化的程序。 结构化程序 问题可以分解成相互独立的几个部分。 每个独立部分可以通过简单的语句或结构来实现。 分问题解的过程就是算法设计的过程。 重点掌握分析问题、解决问题的方法。,3.1 结构化程序的算法设计,【例3-1】 要求从键盘输入3个数,找出其中最小的那个数,将其输出到屏幕。请给出解决这个问题的算法。 分析程序对于从键盘输入的3个数必须用3个变量来保存,分别为a,b,c代表输入的3个数,另外,还需要一个变量min来保存最小的那个数。 1.先比较a和b的值,把数值小的放入min中; 2.再将min与c比较,又把数值小的放入min中。 3.经过两次比较,min中已存放的是a,b,c 3个数中最小的数。把min的值输出就是所需结果。,3.1 结构化程序的算法设计,算法步骤 1输入3个数,其值分别赋给3个变量a,b,c; 2把a与b中较小的那个数放入变量min中; 3把c与min中较小的那个数放入变量min中; 4输出最后结果min的值。 改进上面的算法描述,将第2步和第3步的算法具体化。 1输入三个数,其值分别赋给三个变量a,b,c; 2比较a与b的值,如果ab,则mina;否则minb; 3比较c与min的值,如果cmin,则minc; 4输出最后结果min的值。 通过算法描述的步骤,可以很方便地用程序语言来实现。,3.2 结构化算法的性质及结构,3.2.1 结构化算法性质 1算法名称 给算法命名,是为了方便算法的描述,在C语言中,算法的名字通常就是函数名。 2输入 算法应有输入的数据或初始条件。 3输出 算法通常会有一个或多个输出,是对输入数据加工后的结果。 4有效性 算法的每一步都是可执行的,可通过人工计算的。 5正确性 算法的结果必须是正确的,可验证的。 6有限性 任何算法必须在执行有限条指令后结束。,3.2 结构化算法的性质及结构,3.2.2 结构化算法的结构 在C语言算法的主要结构有如下3种。 1顺序结构 顺序结构的特点 程序在执行过程中是按语句的先后顺序来执行的,每一条语句都代表着一个功能, 2分支结构 分支结构的特点 程序在执行过程中,会根据条件的不同有选择的执行不同的功能。 3循环结构 循环结构的特点 程序在执行过程中,在一定的时间段内或一定的条件下,重复地执行某个功能,直到时间已到或条件不再满足。,3.2 结构化算法的性质及结构,程序设计要解决的两个主要问题 (1)按什么顺序或步骤来执行; (2)用什么语句来实现。 算法设计是核心问题。,提示,3.3 结构化算法的描述方法,常用的描述方法有自然语言、流程图、伪代码等。 3.3.1 自然语言 用类自然语言表示算法。 如汉语、英语或其他语言。 特点通俗易懂,简单明了。,3.3 结构化算法的描述方法,【例3-2】 从键盘输入两个变量的值a、b,请按输入值从小到大的顺序将这两个变量的值输出到屏幕。请写出这个问题的算法描述。 算法描述 第1步输入变量a和b的值; 第2步比较a和b的值; 如果a大于等于b,则先输出a,再输出b; 否则,先输出b,再输出a; 第3步算法结束。,3.3 结构化算法的描述方法,【例3-3】 几何级数求和sum12345n1n。请写出该问题的算法。 算法描述 第1步给定一个大于0的正整数n的值; 第2步定义一个整型变量i,设其初始值1; 第3步定义整型变量sum,其初始值设置为0; 第4步如果i小于等于n,则转第5步,否则执行第8步; 第5步将sum的值加上i的值后,重新赋值给sum; 第6步将i的值加1,重新赋值给i; 第7步执行第4步; 第8步输出sum 的值; 第9步算法结束。,3.3 结构化算法的描述方法,3.3.2 流程图 流程图是一种算法的形象表示。 流程图是由流程线和几何图形框连接而成的。 算法流程图的符号采用美国国家标准化协会ANSI规定的一些常用符号流程线,算法流程图的3种基本结构 顺序结构、分支结构、循环结构 1.顺序结构 顺序结构是一种简单的线性结构,根据流程线所示的方向,按顺序执行各矩形框的指令。 基本流程图注 指令A、指令B、指令C可以是一条或多条指令。 执行顺序ABC。,3.3 结构化算法的描述方法,3.3 结构化算法的描述方法,2.分支结构 分支结构要对给定的条件进行判断,看是否满足给定的条件,根据条件结果的真假而分别执行不同的执行框。 基本流程图有两种注 1 虚线框表示可将分支结构看成一个矩形框。 2指令A、指令B可以是一条或多条指令,也可以是分支结构。3.3 结构化算法的描述方法,3.循环结构 分支结构是在条件为真的情况下,重复执行某个执行框中的内容。 基本流程图有两种注1 虚线框表示可将循环结构看成一个矩形框。 2 指令A称为循环体,可以是一条或多条指令,也可以是其 他分支或循环结构。 3 do_while结构可以转化成while结构。1 while 循环,2 do_ while 循环,3.3 结构化算法的描述方法,循环结构的特点 在循环体指令A中必须要有对条件的值进行修改的语句,使得经过有限次循环后,循环一定能结束。 while型循环中循环体可能一次都不执行,而do_while型循环则至少执行一次循环。 do_while型循环可以转化成为while型循环结构,但while型循环不一定能转化为do_while型循环。,3.3 结构化算法的描述方法,关于结构化流程图的规则 1. 可分别将顺序结构、分支结构、循环结构的基本流程图看成是一个执行框。 2. 任何两个按顺序的执行框可以合并为一个执行框。 反复运用规则1和规则2可得到结构化流程图的最简形式,特别提示,3.3 结构化算法的描述方法,【例3-4】分析下面的流程图,是否符合结构化算法标准。,3.3 结构化算法的描述方法,【例3- 5 】将例3-1的算法用流程图表示,分析其是否符合结 构化的标准。 从键盘输入3个数,找出其中最小的那个数,将其输出到屏幕。3.3 结构化算法的描述方法,【例3-6】 将例3-2所描述的问题用算法流程图来表示。 从键盘输入两个整型变量a,b的值,按输入值从小到大的顺序输出到屏幕。 算法流程图为3.3 结构化算法的描述方法,【例3-7】将例3-3所描述的问题用算法流程图来表示。 计算几何级数的和sum12345n1n。 算法流程图为3.3 结构化算法的描述方法,3.3.3 伪代码 伪代码是一种接近于程序语言的算法描述方法。 特点 采用有限的英文单词作为伪代码的符号系统,按照特定的格式来表达算法,可读性好,方便将算法改写成计算机的程序源代码。 伪代码的7个主要部分 1 算法名称 2指令序列 3输出/输出 4分支选择 5赋值 6循环 7算法结束3.3 结构化算法的描述方法,1算法名称 两种表示算法的伪代码 过程(Procedure)函数(Function) 过程和函数的区别是 过程是执行一系列的操作,不需要返回操作的结果,无返回数据; 函数是执行一系列的操作后,要将操作的结果返回,有返回数据。 算法伪代码的书写规则 Procedure Function 如 Procedure Hanoi_Tower 表示名为Hanoi_Tower的一个过程。 Function Facx 表示名为Fac的一个函数。 Function Prog n 表示名为Prog的一个函数。3.4 算法设计范例,【例3-11】 把从键盘输入的大写字母转换成小写字母输出,若为小写字母或其他字符,则不作任何转换直接输出。 分析用字符变量ch来接收从键盘输入的字符。大、小写字母的ASCII码值相差32,大写字母A的值为65,而小写字母a的值为97。 流程图描述的算法3.4 算法设计范例,【例3-12】 已知实数a,b,计算u的值urs2,并将计算结果输出到屏幕。 当ab时,ra2b2, sa/b 。 当ab时,rb2a2,sa/b4 。 分析用a,b,r,s,u分别表示浮点型变量。 a和b代表输入的原始数据; r和s为计算的中间变量; u为最后的计算结果。 流程图描述的算法 思考怎样简化算法。本章练习,用流程图描述下面问题的算法 【题3.1】【题3.2】 【题3.3】【题3.4】