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

253b171540df25e1b84436cbe50dfc72.gifC语言程序设计第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 或 ,本章结束,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python读取word指定内容_python读取word 中指定位置的表格及表格数据

1.Word文档如下:2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specText): document Document(filename) paragraphs document.paragraphs allTables document.tables specText specText.encode(utf-8).decode(utf-8)…

xml建模包括以下_为什么要进行建模仿真?

没有“模型”作为基础的话,很多当今的前沿概念将无法真正落地!今天,数字孪生、人工智能、工业互联网、边缘计算这些概念在整个产业里非常的火热,但是,要知道,如果这些概念没有“模型”作为基础的话&#xf…

中兴没有云服务器_中国移动携手中兴通讯推进5G网络云建设

11月23日消息今年8月,中国移动通信集团公司党组成员、副总裁李慧镝在“中国信息化百人会2020年峰会”上表示,中国移动正大力推进网络云化部署,实现云网融合,NFV网络云服务器规模达6万台。2020北京国际信息通信展期间,中…

c语言乘法表只有结果,要求输出结果显示相乘的两数及乘积怎么做?

1。#includevoid main(){int i,j;printf("* ");for(i1;i10)printf("%d ",i*j);else printf("%d ",i*j);}printf("\n");}}2。#includevoid main(){int k,m,n,days;printf("请输入树的高度Kcm:");scanf("%d",&k…

差异基因 p log2foldchange_拟南芥的基因ID批量转换?差异基因,GO/KEGG数据库注释(转录组直接送你全套流程)...

新手遇到的问题都是类似的,比如批量ID转换虽然我写过大量的教程:ID转换大全 不过都需要R基础,因为是大批量转换啊!但热心肠的植物生物信息学教学大佬还是友善的给出了解决方案我也狗尾续貂制作了一个网页工具教程:简…

c语言实现顺序表源程序,C语言实现静态顺序表的实例详解

C语言实现静态顺序表的实例详解线性表定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。接下来看看静态的顺序表&#xff0c…

证明最小码距与纠检错图像_最小码距和检错纠错能力关系

最小码距和检错纠错能力关系一、码距?码距就是两个码字C1与C2之间不同的比特数。如:1100与1010的码距为2;1111与0000的码距为4。一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离。若一个编码系统有四种编码分别为:0000&am…

mongoose 批量修改字段_WordPress图片路径批量替换方法

不少数站长在使用WordPress博客或者搬家时,需要把WordPress文章中的图片路径进行替换来解决图片不显示的问题。总结一下WP图片路径批量替换的过程,方便有此类需求的站长们学习。什么情况下批量替换图片路径1、更换了网站域名有许多网站建设初期都随便选择…

c语言 静态变量 初始化,c – 静态变量初始化两次

考虑到我在编译单元中有一个静态变量,最后在静态库libA中.然后我有另一个编译单元访问这个变量,最终在一个共享库libB.so(所以libA必须链接到libB).最后,我有一个主要功能也直接从A访问静态变量,并具有对libB的依赖(所以我链接到libA和libB).我然后观察,静态变量被初始化了两次…

ebs 供应商地点信息_供应商,地址,业务实体,地点关联银行账户

在此记录一下自己学习过程。新手,请多多指教,谢谢。最近客户有需求,找出供应商对应的银行信息,查看了下网上帖子,发现都是从供应商及供应商地点层发起,去查找对应的银行信息,但是,供…

c语言递归函数检测回文,递归法判断回文字符串,急用

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*--------用线性表存储字符串,结合堆栈判断回文(关键判断个数为奇或偶,奇跳过中间数据)---------*/#include #include #define ok 1;#define error 0;typedef char elemtype;typedef struct lnode{lnode *n…

python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!

Free Python Games非常适合学生,它不仅具有高度的组织性和灵活性,而且能够激发人们探索和理解能力。--Terri FurtonFree Python Games在轻松的环境中把游戏和学习结合在一起,从而减轻了编程过程中的压力。--Brett Bymaster...贪吃蛇、迷宫、吃…

r roc函数_画ROC曲线的R包总结

原标题:画ROC曲线的R包总结作者: Joseph Rickert原文链接:https://rviews.rstudio.com/2019/03/01/some-r-packages-for-roc-curves/在这篇文章中,我将描述如何在CRAN中搜索绘制ROC曲线的包,并强调六个有用的包。虽然一…

c语言出圈游戏课设报告,c语言作业 出圈游戏

#include//头函数#include#include#define SIZE 100struct SeqList{int num;char name[10];};int menu_select();//函数声明部分void Joseph1();void Joseph2();void Joseph3();void Joseph4();void Joseph(struct SeqList *p,int length);void main() //主要程序段{printf(&qu…

laravel框架中文手册_node.js 后端框架star 排名 2020年11月更新,fastify 超 egg

发布时间以首个版本发布(0.x)为准。第一名: express 50.8k (2010年1月发布) 目前star 和下载量最高的老牌框架。https://github.com/expressjs/express​github.com第二名:meteor 42.1k (2012年…

c语言~991|4等于多少,复习C语言9-helloworld3000-ChinaUnix博客

关于位操作1. 不使用中间变量,交换a、b的值。如使用:a a b; b a - b; a a - b;则当a、b都比较大时,ab的值可能会溢出。而采用下述方法则没有溢出越界的问题:a a ^ b;b a ^ b;a a ^ b;证明其实很简单,只要熟悉二…

python音乐下载器交互界面_基于Python实现下载网易音乐代码实例

代码如下 # 爬取网易音乐 import requests from bs4 import BeautifulSoup import urllib.request headers {"origin": "https://music.163.com", "referer": "https://music.163.com/", "user-agent": "Mozilla/5.0 …

2020年度工作计划_2020最新年度个人工作计划(精选3篇)

时间稍纵即逝,前方等待着我们的是新的机遇和挑战,不妨坐下来好好写写工作计划吧。工作计划怎么写才能发挥它最大的作用呢?下面是小编为大家整理的2020最新年度个人工作计划(精选3篇),希望能够帮助到大家。年度个人工作计划1转眼间…

c语言中把各位上为奇数的数取出,下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。 - 赏学吧...

下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如当s中的数为87653142时,t中的数为7531。请改正函数fun()中的错误,使它能得出正确的结…

java 格式化字符串_Java入门 - 语言基础 - 14.String类

1.概述字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。2.创建字符串创建字符串最简单的方式如下:String greeting "光束云";在代码中遇到字符串常量时,这里的值是 "光束…