《(精品)C语言2-2 100315.ppt》由会员分享,可在线阅读,更多相关《(精品)C语言2-2 100315.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、S1S1:2000 y2000 yS2S2:若:若y y不能被不能被4 4整除,则输出整除,则输出y“y“不是闰年不是闰年”。然后转到然后转到S6S6S3S3:若:若y y能被能被4 4整除,不能被整除,不能被100100整除,则输出整除,则输出y“y“是闰年是闰年”。然后转到。然后转到S6S6。S4S4:若:若y y能被能被100100整除,又能被整除,又能被400400整除,输出整除,输出y“y“是闰年是闰年”,否则输出,否则输出“不是闰年不是闰年”。然后转到然后转到S6S6。S5:S5:输出输出y“y“不是闰年不是闰年”。S6S6:y+1 yy+1 yS7S7:当:当y2500y2500
2、时,转时,转S2S2继续执行,否则,结束继续执行,否则,结束 设设y为被检测的年份,算法可表示如下为被检测的年份,算法可表示如下:例例2.8 将例将例2.3判定闰判定闰年的算法用年的算法用流程图表示流程图表示 用流程图表示算法要比用文字描述算法逻辑清晰、易于理解。例例2.9 将例将例2.4的算的算法用流程图表示法用流程图表示 例例2.10 将例将例2.5判判断素数的算法用流断素数的算法用流程图表示程图表示 小结:小结:流程图是表示算法的较好的工具。流程图是表示算法的较好的工具。一个流程图包括以下几部分一个流程图包括以下几部分 :(1)(1)表示相应操作的框;表示相应操作的框;(2)(2)带箭头
3、的流程线;带箭头的流程线;(3)(3)框内外必要的文字说明。框内外必要的文字说明。2.4.3 2.4.3 三种基本结构和改进的流程图三种基本结构和改进的流程图1.1.传统流程图的弊端传统流程图的弊端 传统流程图用流程线指出各框的执行传统流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因顺序,对流程线的使用没有严格限制。因此,使用者可以毫不受限制地使流程随意此,使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律,阅读者地转向,使流程图变得毫无规律,阅读者要花很大精力去追踪流程,使人难以理解要花很大精力去追踪流程,使人难以理解算法的逻辑。如图:算法的逻辑。如图:传统流程图的
4、流程可以是:传统流程图的流程可以是:这种如同乱麻一样的算法称为这种如同乱麻一样的算法称为BSBS型算法型算法,意,意为一碗面条为一碗面条(A Bowl of Spaghetti)(A Bowl of Spaghetti),乱无头绪。乱无头绪。缺点:缺点:难以阅读、修改,使算法的可靠难以阅读、修改,使算法的可靠性和可维护性难以保证。性和可维护性难以保证。解决办法:解决办法:必须限制箭头的滥用,即不必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺允许无规律地使流程随意转向,只能顺序地进行下去。序地进行下去。2.2.三种基本结构三种基本结构 选择结构选择结构循环结构循环结构顺序结构顺序结构
5、三种基本结构的图示:三种基本结构的图示:顺序结构顺序结构选择结构选择结构or不执行操作循环结构循环结构 当型当型(While(While型型)循环结构循环结构 直到型直到型(Until(Until型型)循环循环 三种基本结构的共同特点三种基本结构的共同特点:(1)(1)只有一个入口。只有一个入口。(2)(2)只有一个出口。只有一个出口。(请注意:请注意:不要将菱形框的出口和选择结构的出口不要将菱形框的出口和选择结构的出口混淆。)混淆。)(3)(3)结构内的每一部分都有机会被执行到。结构内的每一部分都有机会被执行到。即每一个框,都应当有一条从入口到出口的路径即每一个框,都应当有一条从入口到出口的
6、路径通过它通过它(4)(4)结构内不存在结构内不存在“死循环死循环”。不正确的流程表示:不正确的流程表示:流程内的死循环流程内的死循环小结:小结:由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。扩展:扩展:只要具有上述四只要具有上述四个特点的都可以个特点的都可以作为基本结构。作为基本结构。可以自己定义基可以自己定义基本结构,并由这本结构,并由这些基本结构组成些基本结构组成结构化程序。结构化程序。此图符合基本结构的特点 这是一个多分支选择结构,根据表达式的值决定执行路线。
7、虚线框内的结构是一个入口一个出口,并且有上述全部的四个特点。由此构成的算法结构也是结构化的算法。可以认为这是由三种基本结构所派生出来的。2.4.4 2.4.4 用用N-SN-S流程图表示算法流程图表示算法 19731973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提出了一种新的流程图形式。在这种流程图提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的它的从属
8、于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称框组成一个大的框。这种流程图又称N-SN-S结结构化流程图。构化流程图。N-SN-S流程图符号:流程图符号:(1)顺序结构顺序结构(2)选择结构选择结构图中的图中的A A框或框或B B框,可以是一个简单的操作,框,可以是一个简单的操作,也可以是三个基本结构之一。也可以是三个基本结构之一。N-SN-S流程图符号:流程图符号:(3)循环结构循环结构 用三种用三种N-SN-S流程图中的基本框,可以组成复杂的流程图中的基本框,可以组成复杂的N-SN-S流程图。流程图。A A框选择结构框选择结构 B B框循环结构框循环结构 例例2.11 将例
9、将例2.1的求的求5!算算法用法用N-S图表图表示示 例例2.12 将例将例2.2的算法用的算法用N-S图表示。图表示。(打印(打印50名名学生中成绩学生中成绩高于高于80分的分的学号和成绩)学号和成绩)没有输入数据没有输入数据 例例2.12 将例将例2.2的算法的算法用用N-S图表示。图表示。(打印(打印50名学名学生中成绩高于生中成绩高于80分的学号和分的学号和成绩)成绩)有输入数据 例例2.13 将例将例2.3判定闰年判定闰年的算法用的算法用N-S图表图表示示例例2.14 将例将例2.4的算法用的算法用N-S图表示图表示 例例2.15 将例将例2.5判判别素数的算法用别素数的算法用N-S
10、流程图表示。流程图表示。传统流程图分析:出口出口1出口出口2此图不符合基本结构特点!由于不能分解为三种基本结构,就无法直接用N-S流程图的三种基本结构的符号来表示。因此,应当先作必要的变换。例例2.15 将例将例2.5判别判别素数的算法用素数的算法用N-S流程图表示。流程图表示。传统流程图变换为:一个出口一个出口用用N-S流流程程图图表表示示:N-SN-S图表示算法的优点图表示算法的优点比文字描述直观、形象、易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N-S流程图中的上下顺序就是执行时的顺序。用N-S图表示的算法都是结构化的算法,因为它不可能
11、出现流程无规律的跳转,而只能自上而下地顺序执行。小结:小结:一个结构化的算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转);一 个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。2.4.5 2.4.5 用伪代码(用伪代码(pseudo codepseudo code)表示算法)表示算法概念:概念:伪代码是用介于自然语言和计算机语言之伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。间的文字和符号来描述算法。特点:特点:它如同一
12、篇文章一样它如同一篇文章一样 ,自上而下地写下,自上而下地写下来。每一行来。每一行(或几行或几行)表示一个基本操作。它不用表示一个基本操作。它不用图形符号,因此书写方便图形符号,因此书写方便 、格式紧凑,也比较、格式紧凑,也比较好懂,也便于向计算机语言算法好懂,也便于向计算机语言算法(即程序即程序)过渡。过渡。用处:用处:适用于设计过程中需要反复修改时的流程适用于设计过程中需要反复修改时的流程描述。描述。IF x is positive THEN print x ELSE print-x也可以用汉字伪代码表示:也可以用汉字伪代码表示:若若 x为正为正 打印打印 x 否则否则 打印打印-x也可以
13、中英文混用,如:也可以中英文混用,如:IF x 为正为正 print x ELSE print-x例:例:“打印打印x x的绝对值的绝对值”的算法可以用伪代的算法可以用伪代码表示为:码表示为:开始开始 置置t t的初值为的初值为1 1 置置i i的初值为的初值为2 2 当当i=5i=5,执行下面执行下面 操作:操作:使使t=tit=ti 使使i=i+1i=i+1 循环体到此结束循环体到此结束 输出输出t t的值的值 结束结束也可以写成以下形式:也可以写成以下形式:BEGINBEGIN算法开始算法开始 1 1t t 2 2 i i while i5 while i5 ti ti t t i+1
14、i+1 i i print t print t END END算法结束算法结束 例例2.16 求求5!。用伪。用伪代码表示算法:代码表示算法:例例2.17 输出输出50个个学生中成绩高于学生中成绩高于80分者的学号和分者的学号和成绩。成绩。用伪代码表示算法:用伪代码表示算法:BEGIN算法开始算法开始 1 i while i50 input ni and gi i+1 I 1 i while i50 if gi80 print ni and gi i+1 I END算法结束算法结束 2.4.6 2.4.6 用计算机语言表示算法用计算机语言表示算法概念:概念:用计算机实现算法。计算机是无法识别流
15、用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行。因此在用流程图或伪代码描才能被计算机执行。因此在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程述出一个算法后,还要将它转换成计算机语言程序。序。特点:特点:用计算机语言表示算法必须严格遵循所用用计算机语言表示算法必须严格遵循所用的语言的语法规则,这是和伪代码不同的。的语言的语法规则,这是和伪代码不同的。用处:用处:要完成一件工作,包括设计算法和实现算要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。法两个部分。设计算
16、法的目的是为了实现算法。#include void main()int i,t;t=1;i=2;while(i=5)t=t*i;i=i+1;printf(%dn,t);例例 2.20 将例将例2.16表示的算法(求表示的算法(求5!)用)用C语言表示。语言表示。应当强调说明:写出了C程序,仍然只是描述了算法,并未实现算法。只有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执行的算法。2.5 2.5 结构化程序设计方法结构化程序设计方法一个结构化程序一个结构化程序 就是用高级语言表示的结构化算法。就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程
17、用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修改和维护。序便于编写、便于阅读、便于修改和维护。结构化程序设计强调程序设计风格和程序结构的规结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。范化,提倡清晰的结构。结构化程序设计方法的基本思路是:结构化程序设计方法的基本思路是:把一个复杂问把一个复杂问题的求解过程题的求解过程 分阶段进行,分阶段进行,每个阶段处理的问题都每个阶段处理的问题都控制在人们容易理解和处理的范围内。控制在人们容易理解和处理的范围内。采取以下方法来保证得到结构化的程序:采取以下方法来保证得到结构化的程序:自顶向下;自顶向下;逐步
18、细化;逐步细化;模块化设计;模块化设计;结构化编码。结构化编码。两种不同的方法:两种不同的方法:自顶向下,逐步细化;自顶向下,逐步细化;自下而上,逐步积累。自下而上,逐步积累。用这种方法逐步分解,直到作者认为可以直接将用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字语句为止。这种方法就叫各小段表达为文字语句为止。这种方法就叫 做做“自顶自顶向下,逐步细化向下,逐步细化”。自顶向下,逐步细化方法的优点:自顶向下,逐步细化方法的优点:考虑周全,结构清晰,层次分明,作考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发现某一部者容易写,读者容易看。如果发现某一部分中有一段内容不妥,
19、需要修改,只需找分中有一段内容不妥,需要修改,只需找出该部分修改有关段落即可,与其它部分出该部分修改有关段落即可,与其它部分无关。我们提倡用这种方法设计程序。这无关。我们提倡用这种方法设计程序。这就是用工程的方法设计程序。就是用工程的方法设计程序。模块设计的方法:模块设计的方法:模块化设计的思想实际上是一种模块化设计的思想实际上是一种“分而治之分而治之”的思想,把一个大任务分为若干个子任务,的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单了。每一个子任务就相对简单了。在拿到一个程序模块以后,根据程序模块的在拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。模块。这个过程采用自顶向下方法来实现。子模块一般不超过子模块一般不超过5050行。行。划分子模块时应注意模块的独立性,即:使划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。一个模块完成一项功能,耦合性愈少愈好。作业作业2.22.22.42.4之:之:2.4.12.4.1 2.4.3 2.4.3 2.4.6 2.4.6 2.4.7 2.4.7 2.4.8 2.4.8
限制150内