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

相关文章
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
268 2
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
423 15
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
9876 71
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
10月前
|
存储 算法 生物认证
基于Zhang-Suen算法的图像细化处理FPGA实现,包含testbench和matlab验证程序
本项目基于Zhang-Suen算法实现图像细化处理,支持FPGA与MATLAB双平台验证。通过对比,FPGA细化效果与MATLAB一致,可有效减少图像数据量,便于后续识别与矢量化处理。算法适用于字符识别、指纹识别等领域,配套完整仿真代码及操作说明。
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
323 17
|
PyTorch 算法框架/工具 C++
人工智能算法python程序运行环境安装步骤整理
本教程详细介绍Python与AI开发环境的配置步骤,涵盖软件下载、VS2017安装、Anaconda配置、PyCharm设置及组件安装等内容,适用于Windows系统,助你快速搭建开发环境。
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
301 0
|
存储 监控 算法
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
315 4
|
机器学习/深度学习 存储 算法
基于 C++ 布隆过滤器算法的局域网上网行为控制:URL 访问过滤的高效实现研究
本文探讨了一种基于布隆过滤器的局域网上网行为控制方法,旨在解决传统黑白名单机制在处理海量URL数据时存储与查询效率低的问题。通过C++实现URL访问过滤功能,实验表明该方法可将内存占用降至传统方案的八分之一,查询速度提升约40%,假阳性率可控。研究为优化企业网络管理提供了新思路,并提出结合机器学习、改进哈希函数及分布式协同等未来优化方向。
361 0

热门文章

最新文章