《C++ 开发从入门到精通》——2.5 算法是程序的灵魂

简介:

本节书摘来自异步社区出版社《C++ 开发从入门到精通》一书中的第2章,第2.5节,作者: 王石磊 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 算法是程序的灵魂

图片 1 知识点讲解:光盘:视频PPT讲解(知识点)第2章算法是程序的灵魂.mp4

任何程序语言都需要进行大量的运算,为达到某个目的以获取指定的结果,这就需要了解算法的基础知识。算法是对操作的描述,是编程语言实现一种功能的操作方法。任何一门语言都有自己的数据类型,通过数据类型,能够实现具体的功能。

2.5.1 算法的概念

一个程序应包括对数据的描述和对操作的描述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.5.2 流程图表示算法

算法的表示方法即算法的描述和外在表现,上节中的算法都是通过语言描述来体现的。除了语言描述外,还可以通过流程图来描述。

在入场应用中,流程图的描述格式如图2-9所示。


ff000c50e386a3f941eab44b89cc2d63afd7a41a

图2-9 流程图标识说明

例如,有80个学生,要求将他们之中成绩在60分以上者打印出来。对上述问题的算法即可使用图2-10所示的流程图来表示。


bc89bde00fd24d1e8f249e74b45707627772f5fe

图2-10 算法流程图

在日常流程设计应用中,流程图通常包含如下3种结构。

顺序结构:顺序结构如图2-11所示,其中A和B两个框是顺序执行的。即在执行完A以后再执行B的操作。顺序结构是一种基本结构。


61c9aa42ec54b41945375f0e392e1bc62e3bea5e

图2-11 顺序结构

选择结构:选择结构也称为分支结构,如图2-12所示。此结构中必含一个判断框,根据给定的条件是否成立而选择是执行A框还是B框。无论条件是否成立,只能执行A框或B框之一,也就是说A、B两框只有一个,也必须有一个被执行。若两框中有一框为空,程序仍然按两个分支的方向运行。


af83a74613c1c07f908f921bb3cba682812bb581

图2-12 选择结构

循环结构:循环结构分为两种,一种是当型循环,一种是直到型循环。当型循环是先判断条件P是否成立,成立才执行A操作,而直到型循环是先执行A操作再判断条件P是否成,成立又执行A操作,如图2-13所示。


97329761d5e6a84d0f67fd72fcd1ace583b1e4c4

图2-13 循环结构

2.5.3 计算机语言表示算法

计算机语言表示算法时,必须严格遵循所用语言的语法规则。例如,题目要求计算输入的任意两个分数的和,用C++编程可以通过如下代码实现。

#include<iostream>
using namespace std;
int main(){
cout<<"请输入两个分数:"<<endl;                    //提示输入2个分数
double a,b;
cin>>a>>b;
cout<<a+b<<endl;                                 //输出和
eturn 0;
}

至此,和语言相关的算法介绍完毕。此部分内容的目的是让读者了解各种数学问题的解决方法,掌握C++的处理流程,为进行后面的学习打下基础。

相关文章
|
9天前
|
机器学习/深度学习 安全 算法
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
|
17天前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
29 1
|
23天前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
111 0
|
24天前
|
存储 算法 Serverless
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
【C/C++ 数据结构】深入探索数据结构中算法复杂度:从C++和数学的视角
46 0
|
24天前
|
存储 算法 数据管理
【C/C++ 基础算法】 C/C++ 位图算法的使用
【C/C++ 基础算法】 C/C++ 位图算法的使用
32 0
|
24天前
|
缓存 算法 C语言
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
45 0
|
9天前
|
算法 测试技术 C#
【广度优先搜索】【堆】【C++算法】407. 接雨水 II
【广度优先搜索】【堆】【C++算法】407. 接雨水 II
|
9天前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
9天前
|
算法 测试技术 C#
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
|
18天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序