《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++的处理流程,为进行后面的学习打下基础。

相关文章
|
16天前
|
NoSQL API Redis
最佳实践|如何使用c++开发redis module
本文将试着总结Tair用c++开发redis module中遇到的一些问题并沉淀为最佳实践,希望对redis module的使用者和开发者带来一些帮助(部分最佳实践也适用于c和其他语言)。
76263 0
|
6天前
|
算法 SoC
基于多目标粒子群算法的配电网储能选址定容(含MATLAB程序)
基于多目标粒子群算法的配电网储能选址定容(含MATLAB程序)
|
15天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
31 1
|
15天前
|
开发框架 Linux C++
Qt:强大的跨平台C++应用程序开发框架
Qt:强大的跨平台C++应用程序开发框架
44 3
|
15天前
|
JavaScript 算法 前端开发
【专栏】前端开发中的slot算法和shadow DOM,两者提供更灵活、高效和模块化的开发方式
【4月更文挑战第29天】本文探讨了前端开发中的slot算法和shadow DOM,两者提供更灵活、高效和模块化的开发方式。slot算法允许在组件中定义插槽位置,实现内容的灵活插入和复用,提高代码可读性和维护性。shadow DOM则通过封装DOM子树,实现样式和事件的隔离,增强组件独立性和安全性。这两种技术常应用于组件开发、页面布局和主题定制,但也面临兼容性、学习曲线和性能优化等挑战。理解并掌握它们能提升开发效率和用户体验。
|
15天前
|
C++ Python
C++教学——从入门到精通 10.循环
学习编程建议先Python后C++,以避免C++思维影响。课程涵盖for、while和do while循环。for循环示例:`for(int i=0;i&lt;n;i++)`,用于计算114514天后的金币总数(1145140个)。死循环通过`for(int i=0;;i++)`实现,用`break`退出。while循环格式`while(条件)`,同样可解决金币问题。do while循环特点是先执行后判断,结构为`do{...}while(条件)`。
22 2
|
16天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中c++模板,将编译好的C++程序放进去部署如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
12 1
|
20天前
|
设计模式 存储 算法
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
C++从入门到精通:3.7阅读和理解开源项目——在实际项目中应用C++编程技巧和规范
|
20天前
|
存储 缓存 算法
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
|
20天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键