C++学习资料_zhangrelay的博客-CSDN博客


简介/入门
0.1这些教程的介绍
0.2编程语言简介
0.3C/C++ 简介
0.4C++开发简介
0.5编译器、链接器和库简介
0.6安装集成开发环境 (IDE)
0.7编译你的第一个程序
0.8几个常见的 C++ 问题
0.9配置编译器:构建配置
0.10配置编译器:编译器扩展
0.11配置编译器:警告和错误级别
0.12配置编译器:选择语言标准

C++ 基础
1.1语句和程序结构
1.2注释
1.3对象和变量简介
1.4变量赋值和初始化
1.5iostream 简介:cout、cin 和 endl
1.6未初始化的变量和未定义的行为
1.7关键字和命名标识符
1.8空格和基本格式
1.9文字和运算符简介
1.10表达式介绍
1.11开发你的第一个程序
1.x第一章总结与测验


1.11开发你的第一个程序

题目:

乘以 2

首先,让我们创建一个程序,要求用户输入一个整数,等待他们输入一个整数,然后告诉他们这个数字的 2 倍是多少。 该程序应产生以下输出(假设我输入 4 作为输入):

输入一个整数:4
这个数字的两倍是:8


不怎么好的代码:

#include <iostream>// worst version
int main()
{std::cout << "Enter an integer: ";int num{ };std::cin >> num;num = num * 2; // double num's value, then assign that value back to numstd::cout << "Double that number is: " << num << '\n';return 0;
}

在这个解决方案中,我们使用一个表达式将 num 乘以 2,然后将该值赋回 num。 从那时起, num 将包含我们的双倍数字。

为什么这是一个糟糕的解决方案:

  1. 在赋值语句之前,num 包含用户的输入。 赋值后,它包含一个不同的值。 这很令人困惑。
  2. 我们通过为输入变量分配一个新值来覆盖用户的输入,因此如果我们想扩展我们的程序以稍后使用该输入值执行其他操作(例如,将用户输入的三倍),它已经丢失了。

好一点的代码:

#include <iostream>// less-bad version
int main()
{std::cout << "Enter an integer: ";int num{ };std::cin >> num;int doublenum{ num * 2 }; // define a new variable and initialize it with num * 2std::cout << "Double that number is: " << doublenum << '\n'; // then print the value of that variable herereturn 0;
}

该解决方案非常易于阅读和理解,并且解决了最差解决方案中遇到的两个问题。

这里的主要缺点是我们定义了一个新变量(这增加了复杂性)来存储我们只使用一次的值。 我们可以做得更好。


近似完美的代码:

#include <iostream>// preferred version
int main()
{std::cout << "Enter an integer: ";int num{ };std::cin >> num;std::cout << "Double that number is: " <<  num * 2 << '\n'; // use an expression to multiply num * 2 at the point where we are going to print itreturn 0;
}

这是一堆的首选解决方案。 当 std::cout 执行时,表达式 num * 2 将被计算,结果将是双倍 num 的值。 该值将被打印出来。 num 本身的值不会改变,所以如果我们愿意,以后可以再次使用它。

此版本是我们的参考解决方案。


作者注

编程的首要目标是让你的程序工作。一个不工作的程序不管写得多么好都没有用。

但是,有一句话我很喜欢:“你必须编写一次程序才能知道第一次应该如何编写它。”这说明了这样一个事实,即最好的解决方案通常并不明显,而且我们对问题的第一个解决方案通常不如他们应该做的那么好。

当我们专注于弄清楚如何使我们的程序运行时,将大量时间投入到我们甚至不知道是否会保留的代码上没有多大意义。所以我们走捷径。我们跳过错误处理和注释之类的内容。我们在整个解决方案中散布调试代码,以帮助我们诊断问题并发现错误。我们边走边学——我们认为可能行得通的事情终究行不通,我们必须回溯并尝试另一种方法。

最终结果是,我们最初的解决方案通常结构不完善、不健壮(防错)、可读性或简洁性。因此,一旦您的程序开始运行,您的工作就真的没有完成(除非该程序是一次性的/一次性的)。下一步是清理您的代码。这包括:删除(或注释掉)临时/调试代码、添加注释、处理错误情况、格式化代码以及确保遵循最佳实践。即使这样,你的程序也可能没有想象的那么简单——也许有可以合并的冗余逻辑,或者可以组合的多个语句,或者不需要的变量,或者其他一千个小东西可以简化。当新程序员应该优化可维护性时,他们往往会专注于优化性能。

这些教程中提出的解决方案很少有第一次就很好用。相反,它们是不断改进的结果,直到找不到其他可以改进的地方。在许多情况下,读者仍然会发现许多其他建议作为改进!

所有这一切实际上是在说:如果/当您的解决方案没有从您的大脑中完美优化出来时,请不要感到沮丧。这很正常。编程的完美是一个迭代过程(需要重复通过)。

作者注

还有一件事:你可能会想,“C++ 有很多规则和概念。我怎么记得所有这些东西?”。

简短的回答:你没有。 C++ 的一部分是使用你所知道的,另外两部分是查找如何完成其​​余部分。

当你第一次阅读这个网站时,不要把注意力集中在记忆细节上,而要更多地了解什么是可能的。然后,当您需要在您正在编写的程序中实现某些东西时,您可以回到这里(或访问参考站点)并重新了解如何执行此操作。



g++编译,注意使用c++11

g++ -std=c++11 multiply2.cpp


-Fin-


蓝桥ROS机器人之C++基础开发第一个程序相关推荐

  1. Android Studio 教程:入门开发第一个程序

    Android Studio 教程:入门开发第一个程序 2018.09.11 14:30 16005浏览 开发第一应用 可以开发属于自己的应用,是否有点小激动?好吧!让我们开始,首先点击Start a ...

  2. 在mac中搭建asp.net环境并开发第一个程序

    在mac中搭建asp.net环境并开发第一个程序 一.搭建环境 1.安装.NET Core - 要使用.NET Core首先在终端上安装Openssl 更新homebrew后下载安装openssl $ ...

  3. 蓝桥ROS机器人课程和需求

    这一类课程需求量其实并不大. 从已经开设的课程中可以看到总人数也就1.6万+ 关于ROS机器人课程维护,由于时间关系都还是基础类课程. 并且课程设置目标中性,只是提供一个云端环境供学生实验和学习用,不 ...

  4. 蓝桥ROS机器人之曾经新版本(indigo/kinetic/melodic/ardent/dashing)

    在蓝桥ros中曾经开发了5个版本的ROS学习教程(均在2019年之前完成).但是大部分内容并没有公开,测试多轮反馈也不好,这里供需要的朋友参考吧. ubuntu 14.04 ubuntu 16.04 ...

  5. 蓝桥ROS机器人之C++系列奇妙甜甜圈

    不仅,ROS机器人相关,C++/Python/单片机系列都可以用云平台玩耍. 这里补充一个甜甜圈(2年前案例公开): 用C++写一个简单的动态甜甜圈吧字符串显示的那种哦 Windows C++移植到L ...

  6. 苹果笔记本python开发第一个程序_Xcode的第一个mac程序

    今天是第一次用Xcode,什么都不会,对于像我这种从windows c++转mac c++/obj-c/python的人,对mac下的编程可以说是一点都不了解,这篇文章也从零开始写起,记录我的coco ...

  7. java第一个程序编译失败,零基础java第一个程序HelloWorld,编译,环境变量,运行,注释...

    1.开发第一个java程序:HelloWorld public class HelloWorld{ // 这是一个类,类名叫做HelloWorld public static void main(St ...

  8. 苹果笔记本python开发第一个程序_第一个Python程序【文章来自老男孩】

    首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on ...

  9. 使用Kotlin开发第一个程序,Hello Kotlin!

    介绍 本文主要是教如何在Eclipse上安装Kotlin插件并创建Kotlin项目,输出我们学习新语言一定会学习的熟悉的一句英文"Hello World!",之所以使用Eclips ...

最新文章

  1. linux进程间通信:popen函数通过管道与shell通信
  2. 封装数据库一系列操作,包括打开/新建数据库,增删改查
  3. 2010.7.29 模式对话框
  4. MySQL buffer pool里的三种链表和三种page
  5. 事件与委托的一点概念理解
  6. 【java学习之路】(java SE篇)006.异常
  7. axure rp pro 8.0 中文+破解补丁 v8.0.0.3333专业版
  8. 3航空公司客户价值分析
  9. Python爬虫爬取LOL所有英雄皮肤
  10. Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)
  11. 对于Transformer 模型----可以从哪些地方进行创新和改进
  12. SSH整合,非常详细的SSH整合
  13. ruoyi-vue Nginx配置二级域名
  14. 《孙子兵法》帮你玩转团队管理
  15. 杰里之.AC695 系列 AC695X_soundbox_sdk_release_0.0.1 点灯设置【篇】
  16. 【五一创作】Matlab 绘制风速、风向统计玫瑰花图【优化】
  17. 《西法的刷题秘籍》电子书开放下载啦~
  18. mac 黑屏后不能启动系统的解决方案
  19. 关于CMTS设备的一些备忘
  20. 联想m7268卡纸怎么办_卡纸率0.015% 联想小新华丽转身的秘诀

热门文章

  1. jzoj2742. 【PKU1625】Censored!
  2. 虚幻引擎之自定义着色模型(ShadingModel)
  3. 小D的一串数字(简单DP)
  4. 福特汉姆大学计算机科学专业,福特汉姆大学研究生学院
  5. JDK源码解析---Short
  6. “Spark三剑客”之SparkCore和SparkSql学习笔记(零基础入门)(一)
  7. IDEA中文字体格式
  8. php怎么给视频加水印,视频怎么加水印 添加文字水印和图片水印 给视频加水印的软件...
  9. 从华为智慧生活APP的智能场景,谈到建成华为专属的智慧生活管理后台
  10. 压缩包解压后的文件名是乱码怎么解决