本节书摘来自异步社区出版社《c++ 开发从入门到精通》一书中的第2章,第2.5节,作者: 王石磊 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
图片 1 知识点讲解:光盘:视频ppt讲解(知识点)第2章算法是程序的灵魂.mp4
任何程序语言都需要进行大量的运算,为达到某个目的以获取指定的结果,这就需要了解算法的基础知识。算法是对操作的描述,是编程语言实现一种功能的操作方法。任何一门语言都有自己的数据类型,通过数据类型,能够实现具体的功能。
一个程序应包括对数据的描述和对操作的描述2个部分,其中,“数据的描述”在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure);而“对操作的描述”即操作步骤,也就是算法(algorithm)。
在现实工作中,做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。而计算机领域中的算法被称为计算机算法,计算机算法可分为如下2类。
数值运算算法:用于求解数值。
非数值运算算法:用于事务管理领域。
看下面的运算。
1×2×3×4×5
上述运算通常需要按照如下步骤来计算。
第1步:先求1×2,得到结果2。
第2步:将步骤1得到的乘积2乘以3,得到结果6。
第3步:将6再乘以4,得24。
第4步:将24再乘以5,得120。
上述过程就是一个算法,虽然过程有点复杂。而在计算机程序中,对上述算法进行了改进,使用如下算法。
第1步:使t=1
第2步:使i=2
第3步:使t×i,乘积仍然放在变量t中,可表示为t×i→t
第4步:使i的值+1,即i+1→i
第5步:如果ileqslant5,返回重新执行步骤3以及其后的步骤4和步骤5;否则,算法结束。
上述算法方式就是数学中的“n!”公式。
看下面的数学应用题。
问题1:有80个学生,要求将他们之中成绩在60分以上者打印出来。
在此设n表示学生学号,ni表示第i个学生学号;cheng表示学生成绩,chengi表示第i个学生成绩。则对应算法表示如下。
第1步:1→i
第2步:如果chengigeqslant60,则打印ni和chengi,否则不打印。
第3步:i+1→i
第4步:若ileqslant80,返回步骤2,否则,结束。
问题2:判定1900~2500年中的每一年是否闰年,将结果输出。
润年需要满足的条件如下。
(1)能被4整除,但不能被100整除的年份。
(2)能被100整除,又能被400整除的年份。
在此可以设y为被检测的年份,则对应算法如下。
第1步:1900→y
第2步:若y不能被4整除,则输出y“不是闰年”,然后转到第6步。
第3步:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转到第6步。
第4步:若y能被100整除,又能被400整除,输出y“是闰年”否则输出y“不是闰年”,然后转到第6步。
第5步:输出y“不是闰年”。
第6步:y+1→y
第7步:当yleqslant2500时,返回第2步继续执行,否则,结束。
算法的表示方法即算法的描述和外在表现,上节中的算法都是通过语言描述来体现的。除了语言描述外,还可以通过流程图来描述。
在入场应用中,流程图的描述格式如图2-9所示。

图2-9 流程图标识说明
例如,有80个学生,要求将他们之中成绩在60分以上者打印出来。对上述问题的算法即可使用图2-10所示的流程图来表示。
图2-10 算法流程图
在日常流程设计应用中,流程图通常包含如下3种结构。
顺序结构:顺序结构如图2-11所示,其中a和b两个框是顺序执行的。即在执行完a以后再执行b的操作。顺序结构是一种基本结构。
图2-11 顺序结构
选择结构:选择结构也称为分支结构,如图2-12所示。此结构中必含一个判断框,根据给定的条件是否成立而选择是执行a框还是b框。无论条件是否成立,只能执行a框或b框之一,也就是说a、b两框只有一个,也必须有一个被执行。若两框中有一框为空,程序仍然按两个分支的方向运行。
图2-12 选择结构
循环结构:循环结构分为两种,一种是当型循环,一种是直到型循环。当型循环是先判断条件p是否成立,成立才执行a操作,而直到型循环是先执行a操作再判断条件p是否成,成立又执行a操作,如图2-13所示。
图2-13 循环结构
计算机语言表示算法时,必须严格遵循所用语言的语法规则。例如,题目要求计算输入的任意两个分数的和,用c++编程可以通过如下代码实现。
至此,和语言相关的算法介绍完毕。此部分内容的目的是让读者了解各种数学问题的解决方法,掌握c++的处理流程,为进行后面的学习打下基础。