C语言程序设计第2章 结构化程序设计与算法.ppt

现在人们公认的具有“良好风格”的程序设计方法之一是所谓的“结构化程序设计方法”。其核心是规定了算法的三种基本结构顺序结构、选择结构和循环结构。按照结构化程序设计的观点,任何算法功能都可以通过三种基本程序结构 顺序结构、选择结构和循环结构的组合来实现。在本章,主要介绍算法、结构化程序设计及其三种基本结构、结构化程序设计方法等。,第2章 结构化程序设计与算法,学习重点和难点 程序设计的基本概念 算法的概念和算法的表示 结构化程序设计方法 学习本章后将对结构化程序设计方法有认识,并能用某种方式来表示算法。,第2章 结构化程序设计与算法,2.1 初识算法 2.2 结构化程序设计 2.3 表示算法的多种方法 2.4 结构化程序设计应用举例 2.5 本章小结 2.6 习题 实验2 熟悉VC 6.0环境及算法,第2章 结构化程序设计与算法,2.1 初识算法,有了方便人们编写程序的计算机语言,就可以开始构思来进行程序设计。 所谓程序设计就是使用某种计算机语言,按照某种算法,编写程序的活动。,如何进行程序设计呢一般说来,包括以下步骤 问题定义; 算法设计; 算法表示(如流程图设计); 程序编制与调试; 程序测试、运行与分析及文档编制。,2.1 初识算法,2.1 初识算法,2.1.1 算法的概念 2.1.2 算法举例 2.1.3 算法的特征,这里,重点就其中的算法和程序设计方法等作简单介绍。,2.1.1 算法的概念一个程序应包括 1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。 2)对操作的描述。即操作步骤,也就是算法(algorithm)。 著名的计算机科学家Nikiklaus Wirth提出一个公式程序数据结构算法,2.1.1 算法的概念实际上,随着程序设计技术的不断发展,可以重新定义这个公式 程序算法数据结构程序设计方法语言工具和环境 这4个方面是一个程序设计人员所应具备的知识。这里主要介绍算法的初步知识。 做任何事情都有一定的步骤,而算法就是解决某个问题或处理某件事的方法和步骤,在这里所讲的算法是专指用计算机解决某一问题的方法和步骤。不管你所采用的编程语言如何变化,算法是其核心内容,有了解决问题的算法,就不愁编不出能解决问题的语言程序。,2.1.1 算法的概念计算机算法一般分为两大类一类是数值计算算法,主要用于解决难以处理或运算量大的一些数学问题,如求解超越方程的根、求解微分方程等;另一类是非数值计算算法,如对非数值信息的排序、检索等,适用于事务管理领域。对于同一个问题,往往有不同的几种解题方法和步骤,即几种算法,为了有效地进行解题,不仅需要保证算法的正确性,还要考虑算法的质量时间与空间的效率,选择合适并较优的算法。,2.1.2 算法举例2.1.2 算法举例2.1.2 算法举例2.1.2 算法举例1,3,1X3,5,2.1.2 算法举例1X3X5,72.1.2 算法举例1X3X5X7,92.1.2 算法举例1X3X5X7X9,112.1.2 算法举例1X3X5X7X9X11,135次循环后t的值就是所求的结果。,2.1.2 算法举例2.1.3 算法的特征1、有穷性 人们编制算法的目的就是要解决问题,若该算法无法在一个有限合理的时间内完成问题的求解,那么算法也就失去了其原有的目的,人们就会摒弃它。而且人们研究算法,其目的还在于它的高效率,即解决同一个问题的两个算法,人们往往选择其中那个运行效率高的。 2、确定性 所谓算法的确定性是指算法的每一个步骤都应该确切无误,没有歧义性。,2.1.3 算法的特征3、有零个或多个输入 执行算法时,有时需要外界提供某些数据,帮助算法的执行。一个算法可以没有输入,也可以有多个输入。例如,求解N,该算法就需要输入一个数据N;而求解两数之和,该算法就需要输入两个数据 4、有一个或多个输出 算法的目的是求解,解就是结果,就是输出,否则就毫无意义。,2.1.3 算法的特征5、有效性 算法中的每一步都应该能有效地执行、可以实现,执行算法最后应该能得到确定的结果。 对于程序设计人员,必须会设计算法,并根据算法写出程序。,2.2 结构化程序设计,以下从结构化程序设计的方法介绍、方法原则及三种基本结构来说明。,2.2 结构化程序设计,2.2.1 结构化程序设计方法简介 2.2.2 结构化程序设计方法的原则 2.2.3 结构化程序设计的三种基本结构,2.2.1 结构化程序设计方法简介结构化程序设计是由迪克斯特拉(E.W.dijkstra)在1969年提出的,结构化程序设计是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,这样能为设计一些较大的软件打下良好的基础。,2.2.1 结构化程序设计方法简介结构化程序设计的基本要点有 1、采用自顶向下,逐步细化的程序设计方法在需求分析、概要设计中,都采用了自顶向下,逐层细化的方法。,2.2.1 结构化程序设计方法简介结构化程序设计的基本要点有 2、使用三种基本控制结构构造程序 任何程序都可由顺序、选择、循环三种基本控制结构构造(见2.2.3节图2.2)。具体 (1)用顺序方式对过程分解,确定各部分的执行顺序; (2)用选择方式对过程分解,确定某个部分的执行条件; (3)用循环方式对过程分解,确定某个部分进行重复的开始和结束的条件; (4)对处理过程仍然模糊的部分反复使用以上分解方法,最终可将所有细节确定下来。,2.2.2 结构化程序设计方法的原则结构化程序设计方法的原则有 1、自顶向下 程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。 2、逐步求精(或逐步细化) 对复杂问题,应设计一些子目标作为过渡,需要时子目标还可以再设计为一些更小的小目标,这样逐步细化。,2.2.2 结构化程序设计方法的原则3、模块化设计 一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,直到小目标能够程序化了。一般把每个能程序化的小目标称为一个模块。 由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。,2.2.2 结构化程序设计方法的原则3、模块化设计,模块化设计从问题分解到程序问题,程序,4、结构化编码限制使用goto语句 结构化程序设计方法的起源来自对goto语句的认识和争论。作为争论的结论,1974年Knuth发表了令人信服的总结,并证实了1)goto语句确实有害,应当尽量避免;2)完全避免使用goto语句也并非是个明智的方法,有些地方使用goto语句,会使程序流程更清楚、效率更高;3)争论的焦点不应该放在是否取消goto语句上,而应该放在用什么样的程序结构上。 其中最关键的是,应在以提高程序清晰性为目标的结构化程序设计方法中限制使用goto语句。为此,结构化程序设计方法应只使用限制goto语句使用的顺序、选择、循环三种基本控制结构。,2.2.2 结构化程序设计方法的原则2.2.3 结构化程序设计的三种基本结构结构化程序设计方法使用的顺序、选择、循环三种基本控制结构(其流程图表示见图2.2),理论上已证明,无论多么复杂的问题,其算法都可表示为这三种基本结构的组合。依照结构化的算法编写的程序或程序单元如函数或过程,其结构清晰、易于理解、易于验证其正确性,也易于查错和排错。具体介绍如下,2.2.3 结构化程序设计的三种基本结构图2.2 算法基本结构图,2.2.3 结构化程序设计的三种基本结构3、循环结构 循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是什么情况下执行循环哪些操作需要循环执行 循环结构的基本形式有两种当型循环和直到型循环。,2.2.3 结构化程序设计的三种基本结构1)当型循环表示先判断条件,当满足给定的条件时执行循环体,并且在循环体末端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处。因为是“当条件满足时执行循环”,即先判断后执行,所以称为当型循环。 2)直到型循环表示从结构入口处直接执行循环体,在循环体末端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断。因为是“直到条件为真时为止”,所以称为直到型循环。,图2.2 算法基本结构图,2.2.3 结构化程序设计的三种基本结构2.2.3 结构化程序设计的三种基本结构,2.2.3 结构化程序设计的三种基本结构采取以下方法保证得到结构化的程序 (1) 自顶向下; (2) 逐步细化; (3) 模块化设计; (4) 结构化编码。,2.3 表示算法的多种方法,为了描述一个算法,可以采用许多不同的方法,常用的有自然语言、流程图、N-S流程图、伪代码、计算机语言等。其中自然语言描述算法通俗易懂,但比较繁琐冗长,不直观,容易产生歧异;伪代码描述的算法相对于前者,比较紧凑;流程图表示的算法,通过图形描述,逻辑清楚,形象直观,容易理解,所以得到广泛的应用。但总体上各有特色,读者可自我选择,下面来分别说明。,2.3 表示算法的多种方法,2.3.1 用自然语言表示算法 2.3.2 用流程图表示算法 2.3.3 用N-S流程图表示算法 2.3.4 用伪代码表示算法 2.3.5 用计算机语言表示算法,2.3.1 用自然语言表示算法自然语言表示算法,一般用于比较简单的问题,复杂一些的问题一般不用自然语言来表示算法。自然语言表示算法的例子见“2.1.2 算法举例”。 对于不复杂的简单问题,算法也可以文字性总体分析与叙述。,2.3.2 用流程图表示算法,2.3.2 用流程图表示算法,流程图是用一些图框来表示各种操作 用图形表示算法,直观形象,易于理解起止框,输入输出框处理框判断框,流程线,连接点,注释框x0,YN,一个入口,两个出口一个出口2.4.2用流程图表示算法,流程图是用一些图框来表示各种操作 用图形表示算法,直观形象,易于理解起止框,输入输出框处理框判断框,流程线,连接点,注释框,位置不够,防止交叉,2.3.2 用流程图表示算法2.3.2 用流程图表示算法2.3.2 用流程图表示算法2.3.2 用流程图表示算法2.3.3 用N-S流程图表示算法N-S图也被称为盒图或CHAPIN图,这种新型流程图是1973年美国学者I.Nassi和B. Shneiderman共同提出的,为此称为N-S图。 传统流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程。在使用过程中,人们发现流程线不一定是必需的,为此,人们设计了一种新的流程图,它把整个程序算法写在一个大框图内,这个大框图由若干个小的基本框图构成,这种流程图简称N-S图。,2.3.3 用N-S流程图表示算法2.3.3 用N-S流程图表示算法2.3.4 用伪代码表示算法伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码表达算法不用图形符号,因此书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法(即程序)过渡。下面举一个例子来说明。,2.3.4 用伪代码表示算法2.3.5 用计算机语言表示算法我们的任务是用计算机解题,就是用计算机实现算法。用计算机语言表示算法,算是一步到位了。计算机语言表示算法必须严格遵循所用语言的语法规则。对于初学者建议先用其他算法表示方法表示后,再用某计算机语言编写出程序;对于熟练或专业程序编写人员,面对简单或熟悉的算法问题是可以直接用程序语言来编写实现的。本书后续章节中有许多例题,后在给出解题思路或解题算法后,写出程序的例子的。这里只给出一个例子以说明C语言的算法直接表示方法。,2.3.5 用计算机语言表示算法2.4 结构化程序设计应用举例,作家编写一部著作,往往不可能一次性就把内容写好,一般总是先确定目标和主题,然后构思分成若干章,定出各章题目和大致内容,把每章分成若干节,再细分为若干段,即由粗到细,逐步具体化,直到能执笔写出文字为止。而人们编写程序与写书一样,常常使用本章前面介绍的结构化程序设计方法1自顶向下;2逐步求精;3模块化设计;4 结构化编码。下面举个简单例子说明结构化程序设计方法,后续编程将主要采用这种方法。,2.4 结构化程序设计应用举例,开始,结束,2.4 结构化程序设计应用举例,2.5 本章小结,本章介绍了算法、对算法的理解、算法的多种表示方法、结构化程序设计的相关概念与知识等,并给出了一个结构化程序设计的应用示例。算法是C语言程序设计的灵魂,对一般问题尝试用算法来表示就显得非常关键了。,请指出错误或问题,交流联系 Email 或 ,本章结束,

c语言程序设计第2章,C语言程序设计第2章 结构化程序设计与算法.ppt相关推荐

  1. c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...

    C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt * * 4.1 选择结构程序设计 4.2 循环结构程序设计 4.3 辅助控制语句 第四章 结构化程序设计 4.1 选择结构程序 ...

  2. 计算机基础结构化程序设计,《计算机程序设计基础》教学课件:8_2~8_3_结构化程序设计...

    <<计算机程序设计基础>教学课件:8_2~8_3_结构化程序设计>由会员分享,可在线阅读,更多相关<<计算机程序设计基础>教学课件:8_2~8_3_结构化程序 ...

  3. 第一章 c语言概述程序逻辑,第一章 程序逻辑与C语言概述

    1.第一章 程序逻辑与C语言概述,1.1 C语言概述1.2 程序和程序逻辑,第一章 程序逻辑与C语言概述,1.1 C语言概述,[学习目标]了解C语言工作机制掌握C语言程序的的基本构成了解C语言程序的编 ...

  4. 程序设计类实验辅助c语言,程序设计基础与实验

    spContent=C语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序.嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据 ...

  5. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...

    <C语言程序设计之交通处罚单管理系统报告(内含代码)>由会员分享,可在线阅读,更多相关<C语言程序设计之交通处罚单管理系统报告(内含代码)(22页珍藏版)>请在人人文库网上搜索 ...

  6. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告材料内含代码...

    <C语言程序设计之交通处罚单管理系统报告材料内含代码>由会员分享,可在线阅读,更多相关<C语言程序设计之交通处罚单管理系统报告材料内含代码(34页珍藏版)>请在人人文库网上搜索 ...

  7. c语言酒店管理系统设计目的,C语言酒店管理系统设计.doc

    <C++程序设计>课程设计报告 <C++程序设计>课程设计报告 班级 计科101班 学号 37 姓名 毛翔 得分 一 目的 加深对C++/C语言知识的理解,扩大相关知识面,培养 ...

  8. 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...

    全国高等农林院校"十一五"规划教材 C语言程序设计 孙力 主编 中国农业出版社 内容简介 本书是全国高等农林院校"十一五"规划教材之一. 全书共11章,分别介绍 ...

  9. c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...

    C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...

最新文章

  1. linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统
  2. 算法与数据结构--数组和链表的区别
  3. linux ubuntu 17,Ubuntu 17.04(Zesty Zapus)已经结束支持,请升级到Ubuntu 17.10
  4. leetcode 338. 比特位计数
  5. 苹果ios浏览器里面数字被当做电话号码
  6. c语言用户管理系统的知识,C语言系统用户管理系统
  7. day15 java的final
  8. Ubuntu为julia安装深度学习框架MXNet(支持CUDA和OPenCV编译)
  9. Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2问题解决
  10. KNN(五)--层次Kmean
  11. HDU 5351 MZL's Border (规律,大数)
  12. 土壤有机质空间分布数据
  13. 关于 activit 与 flowable 项目报错 --Cannot resolve the name ‘extension‘ to a (n) ‘element declaration‘ comp
  14. Python之pygame安装教程
  15. 计算机专业如何发sci,sci到底难发不难发,有什么玄妙招数?
  16. 计算机图形学设计线宽代码,计算机图形学线宽和线型处理.ppt
  17. cygwin安装gcc/g++
  18. 中国首部房地产行业电子签名应用白皮书发布,法大大编写
  19. 抢滩直播基地:有人黯然退场,有人闪亮进场,还有人只当跳板
  20. 认识3DMAX的各种插件

热门文章

  1. 酒店叫醒系统服务器,酒店叫醒服务的流程
  2. matlab的傅里叶变换
  3. hive函数大全:11大类、109个函数
  4. 转载:使用 frida hook 插件化 apk ( classloader )
  5. 安卓逆向_7 --- 六种快速定位关键 Smali 代码的方法 ( 去掉 RE 广告 )
  6. Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具
  7. Python 中 异步协程 的 使用方法介绍
  8. php点击验证码,用PHP实现验证码功能
  9. 十分钟能学会的简单python爬虫
  10. 计算机模拟量与数字量的转换,在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?...