1、第1页C程序设计第二章 算法程序的灵魂主讲教师:鲁 萍西安建筑科技大学 理学院第2章 程序的灵魂算法2.1 算法的概念算法的概念2.2 简单算法举例简单算法举例2.3 算法的特性算法的特性2.4 怎样表示一个算法怎样表示一个算法2.5 结构化程序设计方法结构化程序设计方法小小 结结习习 题题2.1 算法的概念n程序的概念n程序就是一系列的操作步骤(指令),告诉计算机“做什么”和“怎样做”。n程序程序=数据结构数据结构+算法算法对数据的描述,对数据的描述,C语言中语言中 的的“数数据类型据类型”为解决一个问题而采为解决一个问题而采取的方法和步骤取的方法和步骤(对数据处理的描述对数据处理的描述)2
2、.2 简单算法举例例2.1 求12345 方法一:方法一:S1:求:求12,得结果,得结果2S2:将步骤:将步骤1的结果的结果2再再3,得结果,得结果6S3:将步骤:将步骤2的结果的结果6再再4,得结果,得结果24S4:将步骤:将步骤3的结果的结果24再再5,得结果,得结果120方法二:方法二:S1:使:使 p=1 (p用于保存累乘结果)用于保存累乘结果)S2:使:使 i=2 (i用于保存乘数)用于保存乘数)S3:使:使 pipS4:使:使 i 递增递增,i+1 iS5:如果:如果i5 ,返回返回S3 否则,得到否则,得到p即为累乘结果即为累乘结果如果求1 1000的累乘?999步如果求1 1
3、000的累乘?如果求1 1000中偶数的累乘?100022.2 简单算法举例例2.2 对50个学生,成绩在80分以上的打印出来。ni表示第i个学生,gi表示第i个学生的成绩方法:S1:使 i=1S2:如果gi80,则打印ni和giS3:i+1 iS5:如果i50 ,返回S2 2.3 算法的特点(1)有穷性有穷性。算法包含的步骤是有限的。(2)确定性确定性。每个步骤是确定的而不是摸棱两可的。(3)有效性有效性。算法的每个步骤都应当能有效地执行,并能得到确定的结果。(4)有一个或多个输出输出。无输出的算法是无实际意义的。(5)有零个或多个输入输入。算法运行时可以从外界取得必要的信息(或数据)。2.
4、4 算法的表示方法表示算法常用方法有:表示算法常用方法有:1 1自然语言自然语言 2 2传统流程图传统流程图3 3N-SN-S流程图流程图 (在传统流程图的基础上去(在传统流程图的基础上去掉了流程线)掉了流程线)4 4伪代码(不必严格遵循语法规则)伪代码(不必严格遵循语法规则)5 5计算机语言计算机语言 (即编写程序,重点掌握)(即编写程序,重点掌握)2.4.2 用流程图表示算法一、流程图的概念一、流程图的概念 一种表示程序逻辑的图形格式,用来帮助设计程序。流程中采用各中流程图符,用流程线指示流程方向 传统流程图符号及其含义起止框处理框判断框输入、输出框预先规定的过程框循环框连结点流向线2.4
5、.2 用流程图表示算法例2.1 求12345 方法二:S1:使 p=1(p用于保存累乘结果)S2:使 i=2 (i用于保存乘数)S3:使 pipS4:使 i 递增,i+1 iS5:如果i5 ,返回S3 否则,得到p即为累乘结果i=5p=pip=1i=i+1结束开始i=22.4.3 三种基本结构 1)顺序结构顺序结构。是一种基本结构。按先后顺序执行。2)选择结构选择结构(或选取结构或分支结构)。根据给定的条件选择其中一种加以执行。3)循环结构循环结构。当条件满足时,有限的重复执行规定(或有限)的步骤。C语言提供了3种基本循环结构。流程图对程序的三种基本结构的表示顺序 分支 循环ABPAB不成立成
6、立成立不成立PA传统流程图当p成立时AB 不成立AB成立当p成立时N-S流程图取掉了带箭头的流程线,全部算在写在一个矩型框内。在该矩型框内还可以包含其它的从属于它的框2.4.4 用N-S流程图表示算法例2.1 求12345 i=5p=pip=1i=i+1结束开始i=2i=5成立输出pp=pii=i+1i=2p=12.4.用N-S流程图表示算法方法:S1:使 i=1S2:如果gi80,则打印ni和giS3:i+1 iS5:如果i50 ,返回S1 否打印ni gi是gi80i=1直到i50i=i+1i=50打印ni和gii=i+1结束开始i=1gi80例2.2 对50个学生,成绩在80分以上的打印
7、出来。ni表示第i个学生,gi表示第i个学生的成绩。2.4.6 用计算机语言表示算法例2.1 求12345 i=5p=pip=1i=i+1结束开始i=2main()int i,p;p=1;i=2;while (i=5)p=p*i;i=i+1;printf(“%d”,p);2.5 结构化程序设计的基本方法例2.3 录入50个学生的成绩,统计10090,8980590各分数段学生人数,并显示统计结果1:录入50个 学生的成绩2:统计各个分数段 学生的人数3:显示统计结果S1.1:使:使i=1 S1.2:输入:输入 ni 学生的成绩学生的成绩S1.3:i=i+1S1.4:如果:如果i50,执行,执行
8、S1.2S2.1:使:使i=1 S2.2:判断:判断ni学生的属于哪个学生的属于哪个分数段,该分数段人数分数段,该分数段人数+1S2.3:i=i+1S2.4:如果:如果i50,执行,执行S2.2S3.1:使:使i=1 S3.2:显示:显示countiS3.3:i=i+1S3.4:如果:如果i5,执行,执行S3.2(2)逐步细化逐步细化(1)自顶向下自顶向下(3)模块化设计模块化设计输输入入统统计计输输出出循环结构循环结构循环结构循环结构(分支结构分支结构)循环结构循环结构(4)结构化编码结构化编码2.5 结构化程序设计的基本方法将一个复杂问题的求解过程分阶段进行 1)自顶向下 2)逐步细化 3
9、)模块化设计 4)结构化编码小 结程序程序 =数据结构数据结构 +算法算法为解决一个问题而采取的方法和步骤为解决一个问题而采取的方法和步骤(1)有穷性有穷性(2)确定性确定性(3)有效性有效性(4)输出输出 (5)输入输入ABPAB不成立成立成立不成立PA传统流程图当p成立时AB 不成立AB成立当p成立时N-S流程图顺序顺序 分支分支 循环循环第二章习题2.1 什么是算法描述数据处理过程步骤的方法。例:计算总评成绩:S1:计算平时成绩S2:计算考试成绩S3:总评成绩=平时成绩30%+考试成绩70%第二章习题 2.4(1)A和B的内容互换CBAC结束开始BAACBACB第二章习题 2.4(2)依次输入10个数,打印最大数用a0a9表示10个数maxai输入aii=i+1结束开始Max=-999 i=0max=aiYNi9打印maxYNMax=-999,i=0i9输入aimaxai max=ai否是i=i+1打印 max