《SLAM导航机器人基础》第二章:C/C++编程(前)

第二章:C/C++编程

本章讲解基础编程知识。

本章内容规划:

2.1节,概念及学习方法

2.2节,程序基本单元

2.3节,程序基本逻辑结构

2.4节,程序基本存储结构

2.5节,函数

2.6节,面向对象设计

2.7节,高级编程概述

 

2.1节,概念及学习方法

C/C++ 是一种流行全球的经典编程语言,起源于1972年贝尔实验室,程序运行效率高,可应用于各种系统平台上,Windows、macOS、Unix。现在流行的STM32单片机编程,使用的也是C语言。C++是C的超集,包含C语言的扩充。程序是鼓励阅读和分享的,相对于电子、机械、化学等其它学科,软件编程更易于在网络上找到学习资源。C++编程入门推荐一个网站:

https://www.runoob.com/cplusplus/cpp-tutorial.html

这个网站上包含比较全面的基础编程教程,除了C++、还有Android、Java、C#等。同时有非常方便的C++线上编译工具:

https://www.runoob.com/try/runcode.php?filename=helloworld&type=cpp

高级语言均需要先编辑,使用编译器将该程序编译成可执行文件后方可运行。本章内容均可以在该工具上学习实践。如果喜欢看书学习的同学,推荐《Visual C++程序设计》中国水利水电出版社:

 这本C++教程内容简洁,又不至于过于简单,最适合编程入门。其它砖头厚的教材,内容丰富,但容易抓不住重点,难度过大,并不是适合初学者。个人推崇由浅入深,循序渐进的思路进行学习。本书学习以后,可以再看

《嗨翻C语言》《thinking in c++》《C++ Primer Plus》扩充学习。下面以一个简单而且经典的例子,开始我们的编程学习之旅。

//Example_1
#include <iostream>
int main()
{
    std::cout<<"Hello,world !";
    return 0;
}

 在线上编译工具上左边的窗口输入(注意使用英文输入法,否则容易出错),点击运行,即可在右边的窗口得到结果,如下图:

 “你好,世界!”,人生第一个程序,完成!下面开始解释该程序:

程序是按行编写,按行编译的。

第一行“//Example_1”是一个注释行,双斜杆“//”后面的内容并不会被编译,一般用于解释程序的作用,功能等等;

第二行“#include <iostream>”是预处理命令,声明使用iostream.h头文件,这样我们就能使用该文件已经实现的功能而不需要自己编写。

第三行“int main()”,声明main函数,main函数是程序的入口,最开始执行的地方。

第四行和第七行的{},声明main函数的开始和结束的位置。

第五行“std::cout<<"Hello,world !";”,是一个输出语句,使用std::cout向屏幕打印Hello,world !语句。std::cout在iostream.h中定义,常用于程序的调试,输出我们程序的运行信息。

第六行“return 0;”,是输出函数返回值。函数返回值,可以用来输出函数运行状态等。

本节我们简单了解了注释,头文件声明,主函数,输出函数,返回值这些概念。可能你还有诸多疑问,建议先放下。编程语言所有的规则定义均是人为设定的,我们先记住这些编程规则,在后续接触中慢慢了解,清晰这些概念。

 

2.2节,程序基本单元

 本节我们将继续讲解语法,C++字符集是由英语字符、阿拉伯数字、英文符号构成,对大小写敏感。下面介绍C++语法词汇概念:关键字、标识符、标点符号、运算符,数据类型(数据类型转换),常量、变量。

2.2.1 关键字、标识符、标点符号、运算符

关键字,指的是C++语法已经使用的,有特定含义的词汇,我们不能再用该词汇命名变量名、类名等。

标识符,指的是用户自定义的词汇,用来标识变量名、类名、函数名等,以字母或下划线开始,由字母、数字、下划线构成的字符串,如:a,_a,a1,Name。

标点符号,程序中用来分割语句的符号,类似于中文的逗号句号。如下表所示:

标点符号 含义
空格 各成分之间分割
语句结束标志
" 单个字符标识,如'a'
"" 字符串标识,如"abcd"
# 预处理命令,一般用于定义头文件
{} 复合语句
// 行注释
/* */ 多行注释
   

 

运算符,指的是程序用来运算的符号,如下表。注:

(1)优先级,指的是运算优先级别,类似于我们以前学习数学运算中的“先乘除后加减”。

(2)单目双目三目,指的是参与运算的数、变量的个数。

(3)结合方向,如赋值运算符“=”从右到左结合,如程序中a=1读作把1赋给变量a;c=a*2;读作把a乘以2的值赋给变量c。

 

下面学习一个简单的计算例子:

//Example_2
#include <iostream>
using namespace std; //使用C++标准命名空间
int main()
{
    int a = 1; //“=”是赋值符号,令变量a等于1
    int b = 2;
    int c = a * b;//“=”是赋值符号,令变量c等于axb
    cout<<"a = 1;"<<endl;//endl是cout换行格式控制符号
    cout<<"b = 2;"<<endl;
    cout<<"c = a * b;"<<endl;
    cout<<"c = "<< c <<endl;
    return 0;
}

在线工具运行如下:

我们在后续使用时在做具体的示例,相关学习内容也可看菜鸟网站以下链接:https://www.runoob.com/cplusplus/cpp-operators.html

2.2.2 数据类型和数据类型转换

程序的数据,是存储在存储器当中,因此是有大小和精度的。为了更好得利用存储单元,C++定义了数据类型,下面介绍基本数字类型,如下表:

类型符号 名称 占用字节大小 范围
bool 布尔类型 1 false/0、true/1
char 字符型 1 -128 ~ 127
unsighed char 无符号字符型 1 0 ~ 255
short 短整型 2 -2^15 ~ (2^15-1)
int 整型 4 -2^31 ~ (2^31-1)
unsighed int 无符号整型 4 0 ~ (2^32-1)
long 长型 4 -2^31 ~ (2^31-1)
float 浮点型 4 ±(3.4x10^-38 ~ 3.4x10^38)
double  双精度型 8 ±(1.7977x10^-308 ~ 1.7977x10^308)

 

在编写程序时,我们应该根据变量的取值范围,合理地定义数字类型,有利于加快运算速度,减小计算资源的消耗,这在运算频率相对较低的单片机上尤为重要。

不同的数字类型参与运算,涉及到数据类型转换问题。类型转换分为隐式转换和强制转换。隐式转换是系统自动完成的转换:小数型与整数型之间的相互赋值,字符型与整型的相互赋值。强制转换,通过()完成。如例子:

float a = 1.111; int b =2; float c = (int)a*b;//a的值转化为整型后参与运算,即c = 1*2;

 

2.2.3常量、变量

常量,在程序运行中值保持不变,编译器并不会为常量分配内存,常见使用方式是符号常量,使用关键字const定义(须带数据类型),或者#define定义(不可带数字类型)。如下面例子:

const float SPEED= 0.70; //产量一般使用大写字母命名,以便与变量分开

#define PI 3.14159          //使用PI代表3.14159

变量,在程序运行中值是不固定的,编译器会根据变量类型为其分配内存空间。

posted @ 2020-06-23 18:12  baronluu  阅读(806)  评论(0编辑  收藏  举报