怎么理解c语言算法及表示,C语言学习之算法的概念及其表示知识

C语言学习之算法的概念及其表示

算法的概念及其表示(二)

开始上一个思维导图:

3642a360bacb56e0f1ace57bc6aa1e3b.png

上节提到算法的概念和特性,这一节说一下算法的表示以及结构化程序设计方法。说之前,把上一节的链接先附上,方便翻阅。C语言学习之算法的概念及其表示(一)

算法的表示用自然语言表示

自然语言就是人们日常使用的语言,如汉语,英语等其他语言。该表示方法通俗易懂,但是文字冗长,比较容易出现歧义。用自然语言表示的含义往往需要联系上下文来确定,因此不太严格。此外,用自然语言来描述包含分支和循环的算法不太方便,所以一般不用该方法表示。

用流程图表示

◆流程图是用一些图框来表示各种操作。

◆流程图是表示算法的较好的工具。一般包括以下三个部分:

①相应的操作框;

②带箭头流程线;

③框内外的文字说明。

◆优点:直观形象,易于理解。

◆美国国家标准化协会ANSI规定了一些常用的流程图符号:

98ea33d58772ed37bdbebd713f2600dc.png

◆传统流程图有诸多弊端,对流程线的使用毫无限制,造成整个框图杂乱,不便于阅读和修改。为了解决这一问题,Bohra和

Jacopini提出了三种基本结构,框图如下:

e1a088792104fc1f2c3f37bce7aa78cb.png

fbdbdce394b65954e215084d35f4e990.png

f5a64291be290bda2e38c800886a06a2.png

◆三种基本结构的共同特点:

①只有一个入口;

②只有一个出口;(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。)

③结构内的每一部分都有机会被执行到;

④结构内不存在“死循环”(无终止的循环)。

◆注:由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。

用N-S流程图表示

◆该流程图由美国学者I.Nassi和N.Shneiderman在1937提出,它完全去掉了带箭头的流程线。将算法全部写在一个矩形框内,在该框内还可以包含其它的从属于它的框。

◆优点:比文字描述直观、形象、易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N-S流程图中的上下顺序就是执行时的顺序。用N-S流程图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。

◆由N-S流程图表示的三种基本结构如下:

9ef3e223dd74e045875bdb018e2167e2.png

d458e2afd0b69ff80a58d4d5417a93c5.png

c8adc8edc60865be386920b6ad7b32c7.png

用伪代码表示

◆概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。

◆特点:不用图形符号,书写方便

、格式紧凑,比较好懂,每一行(或几行)表示一个基本操作。便于向计算机语言算法(即程序)过渡。适用于设计过程中需要反复修改时的流程描述。

用计算机语言表示

◆概念:用计算机实现算法。因为计算机无法识别流程图和伪代码,所以只有用计算机语言编写的程序才能被计算机执行。因此在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。

◆特点:必须严格遵循所用的语言的语法规则,这是和伪代码不同的。

◆注:要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。

结构化程序设计方法

◆一个结构化程序:就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修改和维护。

◆结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。

◆结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。

◆采取以下方法来保证得到结构化的程序:

自顶向下;

逐步细化;

模块化设计;

结构化编码。

◆“自顶向下,逐步细化”:用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字语句为止。

◆“自顶向下,逐步细化”方法的优点:

考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发现某一部分中有一段内容不妥,需要修改,只需找出该部分修改有关段落即可,与其它部分无关。

◆模块设计的方法:

①模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单。

②在拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。

③子模块一般不超过50行。

④划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值