本节书摘来自异步社区出版社《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所示。


图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 循环结构

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++ 开发从入门到精通》——2.5 算法是程序的灵魂相关推荐

  1. 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序

    本节书摘来异步社区<Java 开发从入门到精通>一书中的第2章,第2.2节,作者: 扶松柏 , 陈小玉,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 编 ...

  2. 《Visual C++ 开发从入门到精通》——2.7 变量

    本节书摘来自异步社区出版社<Visual C++ 开发从入门到精通>一书中的第2章,第2.7节,作者: 王东华 , 李樱,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  3. 《ASP.NET 开发从入门到精通》----2.3 编译和部署ASP.NET程序

    本节书摘来自异步社区<ASP.NET 开发从入门到精通>一书中的第2章,第2.3节,著 张明星 ,责任编辑 张 涛, 更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  4. 《51单片机应用开发从入门到精通》——2.2 跑马灯实例

    本节书摘来自异步社区<51单片机应用开发从入门到精通>一书中的第2章,第2.2节,作者 张华杰,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.2 跑马灯实例 ...

  5. 《libGDX移动游戏开发从入门到精通》一第2章 libGDX的架构分析

    本节书摘来异步社区<libGDX移动游戏开发从入门到精通>一书中的第2章,第2.1节,作者: 黄俊东 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. 《C++ 开发从入门到精通》——第2章 C++的重要特质分析2.1 什么是面向对象(object-oriented)...

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

  7. pythonweb开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  8. 《Visual C++ 开发从入门到精通》——1.4 技术解惑

    本节书摘来自异步社区出版社<Visual C++ 开发从入门到精通>一书中的第1章,第1.4节,作者: 王东华 , 李樱,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  9. Nginx开发从入门到精通

    Nginx开发从入门到精通 缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部原理 ...

  10. 《ArcGIS Engine 地理信息系统开发从入门到精通(第二版)》——6.7 本章小结

    本节书摘来自异步社区<ArcGIS Engine 地理信息系统开发从入门到精通(第二版)>一书中的第6章,第6.6节,作者: 邱洪钢 , 张青莲 , 熊友谊 更多章节内容可以访问云栖社区& ...

最新文章

  1. eeglab中文教程系列(5)-提取数据epoch
  2. Python进阶01 词典
  3. java人脸识别_Python 实现在 App 端的人脸识别!手机解锁人脸识别
  4. css毛玻璃效果白边_css3毛玻璃效果白边问题_html/css_WEB-ITnose
  5. Exchange 2010 迁移到 Exchange 2013 (二)迁移用户邮箱
  6. android 不通过数据线打印日志_人人都可写代码-Android零基础编程-开发调试、APK编译04...
  7. 离散信号内插matlab,离散信号和系统实验报告.doc
  8. Java实现redis管道
  9. 使用pip安装requests模块(超级简单)+ pip升级失败问题的解决
  10. linux内存映射起始地址,内存初始化代码分析(三):创建系统内存地址映射
  11. chaincode java_基于Hyperledger Fabric交易系统帐户的钱包模型的java Chaincode实例
  12. android 脱壳 加固,安卓的脱壳之战-爱加密加固
  13. 基于ARM的嵌入式SMTP远程控制设计
  14. 企业邮箱能帮企业带来哪些好处?
  15. 总结 27 类深度学习主要神经网络:结构图及应用
  16. R包中文文本挖掘chinese.misc的中文说明
  17. 解决AndroidStudio编译工程长时间卡在Gradle:Build model问题
  18. PHP与FLASH之间的交互
  19. 利用Sobel算子,求梯度图像
  20. 基于SpringBoot开发的企业OA自动化办公系统

热门文章

  1. 实战分析,薪酬缩水,(1)
  2. php 中奖率,php 中奖概率算法实现代码
  3. Git的基本配置信息
  4. git提交代码时分支问题报Your branch is up-to-date with ‘origin/master‘
  5. 小米air新电脑嵌入式开发环境搭建
  6. 优优加速cdn带宽_CDN加速网站SEO优化,这就是CDN
  7. 安卓桌面壁纸_最强安卓系统?MIUI12深度评测。
  8. aix查看后台程序执行情况_AIX AZ:学习AIX后台处理程序后端程序
  9. Python读取csv文件(详解版,看了无师自通)
  10. 天空卫士获得“湖南省工业领域数据安全技术服务机构”聘书