北京清华大学c语言教程,清华大学C语言教程第2章

《清华大学C语言教程第2章》由会员分享,可在线阅读,更多相关《清华大学C语言教程第2章(38页珍藏版)》请在人人文库网上搜索。

1、第二章算法,第一节算法的概念第二节算法的特性第三节算法的表现本章的总结问题第二,计算机科学家D.M.Knuth写的THE ARE OF COMPUTER PROGRAMMING书中写道:“一个算法是规定了解决某种特定类型的问题的运算序列的穷规则的任何问题的解决都由一定的方法和程序组成,意味着解决问题的这些方法和程序称为算法。 第一节算法的概念不仅算法存在于计算问题上,而且人们在做某事之前建立一定的步骤,这些步骤也被称为算法。 比如,从北京到西安观光,先买火车票,然后上北京站,坐火车,到西安后去观光地,这些步骤是按一定顺序进行的,不可缺少的,顺序也不可逆转。 对于相同问题可以具有不同的解决方法,。

2、即算法。 例2.1求1 2 3 100的值。 算法可以解决这个问题: (1)首先进行1 2个操作,再加上3,再加上4,加到100,得到5050。 (2) 123100=100 (199 ) (298 )(49 ) 50=10049100=5050。 (3)1 2 3 100=(1 100)1002=5050。 当然,方法有优劣,既有通过很少的步骤就能实现命题要求的方法,也有需要很多步骤的方法。 因此,要解决问题,不仅要保证算法的正确性,还需要考虑算法的复杂性来选择合适的算法。 输入例2.2正整数,判断是否是素数。 算法素数是除了1和它自己之外的任何其他数都不能整除的数。 判断一个数n是否是素数。

3、的方法很简单,n是被除数,只是除以2n-1之间的各数,如果n不是素数,则n不是素数。 要确定某个数是否是素数,可以表示为: S1 :输入n的值。 如果S2:n除以i(i2,n-1 ),则获得馀数r。 如果s3:r=0,表示n不是素数,否则执行S4。 s4:在执行I之后,判断I的值是否超出范围,如果I大于n-1,则表示n是素数,不执行S5,就执行S2。 S5 :印刷判定结果。 注意: n不需要除以2n-1之间的各数,只要能除以2间的整数即可。 例如,为了判断29是否是素数,可以通过将29除以25 (5)之间的各数来进行判断。 现实问题的正确合理解决是基于算法的。 合法结实的算法,(1)具有贫困性。

4、。 一个算法中的执行步骤必须是有限的,不是无限的死循环。 第二节算法的特性、注意:贫困性是指某算法能够在规定的合法范围内实现预定的功能。 例如,计算机根据某个算法执行某个程序需要100年,但该算法虽然有限,但是超出了合理的界限,因此该算法也不符合贫困性。 (2)确定性。 算法中所有词的意思都必须准确、唯一,不能产生歧义。 例如,有一种分段算法“将一个整数除以5,求出其数量”。 ”。这个说明不正确。 因为没有说明整数除以5会有多少,馀数会有多少,所以无法执行。 (3)有效性。 算法的每个步骤都必须有效地执行,并返回预定结果。 例如,“0除以5的结果”的段算法不正确,因为0不能作为除数。 (4)有。

5、零个以上的输入。 输入是指从外部取得执行算法时所需的信息。 例如,对于其中三种算法都没有从外部接收信息的实例2.2来说,必须输入某一数量,并确定其是否是素数。 (5)有一个以上的输出。 输出指的是与输入相关联的量,在合法算法中具有至少一个输出。 例如,在示例2.1中输出加法运算的结果,在示例2.2中输出输入数据是否为素数的信息。 对初学者来说,不需要自己设计算法来处理命题,只要用别人设计的算法来设计程序就行了。例如,能够利用现有算法对排序问题进行排序,通常的排序方法为冒泡法、选择法、二分法等。 确定了某个算法后,可以用不同的方法来表现,一般的算法有自然语言表现法、流程图表现法、N-S图表表现法。

6、、伪码表现法、计算机语言表现法等。 第3节算法的表现,第1,自然语言表现法自然语言表现法是指用日常语言记述算法的各步骤。 第一节中介绍的算法都是用自然语言表达的。 该算法表现法的结构自由容易理解,但表现的意义不太严格,需要根据上下文来确定意义,容易产生歧义。 另外,使用该方法表示复杂循环的算法,字符冗长,不方便。 二、流程图表示法流程图是指使用特定的图形符号、流线和文本说明来描述算法。 这个算法的表达直观、易懂、容易修改,所以受到很多编程者的喜爱。 美国国家标准协会(americannationalstandardinstitute )将常见流程图符号及其意义见表2.1。 表2.1中常见的流程。

7、图符号及其意义,例2.3中用流程图表示例2.1算法(1)。 请注意,流程图菱形框两侧的“y”和“n”表示“是”和“否”,表示条件判断公式的结果是否正确。 程序设计的目标是用算法处理问题的原始数据,获得预期的效果。 但是,为了提高程序的质量,提高程序的效率,提高程序的可读性、可靠性、维护性,必须遵循程序设计时结构化的设计思想。 1966年,Bohra和Jacopini提出了结构化编程的三种基本结构。 另外,图2.3.1例2.1算法(1)的流程图,1 .顺序结构的顺序结构表示按程序中各操作出现的顺序执行,该流程图在图2.3.2中表示。 此处,a和b示出两个处理步骤,它们可以是一个非传送操作或者多个。

8、非传送操作,也可以是空操作。 整个执行过程从入口a开始,并在执行a之后执行b,直到出口b结束。 另外,图2.3.2序列结构、2 .结构选择结构的选择表示在程序的处理中发生了分支,必须根据特定的条件选择其中的一个分支来执行。 常见的选择结构有单选定、双选定和多选定三种,其具体流程如图2.3.3所示。 选择图2.3.3结构,3 .循环结构循环结构反复执行某个程序,直到某个条件变为真时循环才终止。 常见的循环结构有本型循环和至型循环两种,其具体流程如图2.3.4所示。 图2.3.4循环结构,三,N-S图表示法需要新的流程图表示算法,因为没有结构化程序设计的基本结构与传统流程图对应的表示符号。 197。

9、3年,美国学者I.Nassi和B.Shneiderman在传统流程图设计思想的基础上,提出了一种新的流程图形式N-S图。 N-S图的基本单元是矩形框,只有一个入口和出口,在该矩形框内可以用不同形状的线来分割,以表示顺序结构、选择结构、环结构。 该算法表示形式排除了控制转移对程序流的影响,限制了不良程序结构的产生。 对应于结构化编程三个基本结构的N-S图如图2.3.5所示。 图2.3.6三种基本结构的N-S图,例2.4例2.1算法(1)用N-S图表示。 图2.3.6示例2.1算法(1)的N-S图,注意: N-S图是描述算法的重要图形工具之一,适合于结构化程序表示的非结构化程序通常很少用N-S图表。

10、示。 四、伪代码表现法虽然以往的流程图和N-S图表现算法直观上容易理解,但是因为画画很麻烦,流程图的修正也很麻烦,所以在设计算法时很方便,所以一般用自然语言和计算机语言之间的文字和符号来记述算法输入例2.5数n,打印该数的绝对值。 使用伪代码来表示算法. 如果算法的开始输入数n为n0,则不打印x,否则打印-x结束。 注意:伪代码格式自由,容易表现设计者的思想,并且容易修正,但是用伪代码表现算法比流程图不直观,容易发生逻辑错误。 五、计算机语言表达计算机语言表达算法(也就是写计算机程序)与伪代码不同,必须严格遵守该语言的语法规则。 例2.6例2.1用计算机语言表示算法(1)。 程序#includ。

11、e main() int i,n,s; s=0; printf(“n=); 扫描(“% d”,I ),s=s i; printf(“1 2 3 100=%dn”,s) 输入n=100; 输出注意:用计算机语言表示算法无法实现算法的预定功能,只能在计算机上执行该算法后才能实现。 编程的目的不仅在于学习语言,还在于学习编程的方法。 掌握算法,就能掌握编程的灵魂。 本章主要介绍了算法的概念,接着介绍了算法的特征,最后结合实例重点介绍了一些常用算法的表现方法。 本章的总结一、填补问题1 .合法的算法是:结构化过程设计的基本结构是:在结构化过程设计的基础上,使用“填充”算法。 练习题2,2,选题1.()年,Bohra和Jacopini提出了结构化编程的基本结构。 A.1964 B.1965 C.1966 D.1967 2.()年,美国学者I.Nassi和B.Shneiderman在传统流程图设计思想的基础上,提出了新的流程图形式N-S图。 A.1971 B.1972 C.1973 D.1974,三、曳引机操作问题是用流程图表示以下命题的算法:任意输入两个个数,求其两个个数的最小公倍数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值