• 《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

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

  • 相关阅读:
    java反射机制
    java的hashmap与hashtable说明,简单易理解
    awk
    python的w+到底是什么
    hive深入浅出
    【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)
    对你相同重要的非技术贴,10件事证明你跟错了人
    SVM中为何间隔边界的值为正负1
    pushlet服务端推送——多播
    谁洗碗,搭载我的技术目标,起航。
  • 原文地址:https://www.cnblogs.com/Baron-Lu/p/13183666.html
Copyright © 2020-2023  润新知