当前课程知识点:基于Linux的C++ >  第一讲 C/C++基本语法元素 >  1.5 基本语法元素 >  LinuxCPP0105

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP0105在线视频

LinuxCPP0105

下一节:LinuxCPP0106

返回《基于Linux的C++》慕课在线视频列表

LinuxCPP0105课程教案、知识点、字幕

接下来是C/C++的基本语法元素

我们先从两个简单的数据类型开始讲起

一个是整数类型 一个是浮点数

我们前面其实有了经验

使用int来表示一个整数类型的数据对象

表达的时候 同学们要特别记得

它不是数学上的整数

它是有一个取值范围的

因为计算机的内存宽度是有限的

它所能够表达整数的范围是有限的

它只能表示特定区域内的一个整数值

这是一个 然后第二个是浮点数

它提供两个主要的(数据类型)

一个叫double一个叫float来表示一个小数

它同样都有一个特定的取值范围

那么两者有什么差别呢

double和float

就是一个精度高一点 一个精度低一点

float精度低一点 double精度高一点

首选double 精度很高

平时尽量不要用float

因为float的有效位数只有六位和七位

精度不够高

回到我们刚才的整数数据类型

我定义a是一个整数

我们前面举例子也看到“int a;”

就定义a是一个整数

这就是变量a的定义语句

定义一个整数过程中

我还能够决定这个整数取值范围

它包括不包括负数

就是确定它是有符号的

还是无符号的

用signed int来表示

这样一个数是有符号的

unsigned int是无符号的

表达一个无符号整数意味着什么呢

没有负号了

那就只能表达从0到某个最大正整数

这样一个取值范围

(关于)整数类的长短

还有两个关键词

一个叫long 一个叫short

来表达整数的长短

有的时候我们需要的整数

不需要表达这么宽

现在很多主流的计算机

都是64位的CPU

宽度都是64位宽的

但是我们现在使用的主流编译器

它实际上都是32位的

包括我们现在用到的一些应用程序

还仍然保留在32位

为什么 因为对一个普通应用来讲

32位的程序是够用的

其实也就将将够 所以迁徙到64位

相对于它的难度来讲大家的兴趣不大

现在主流C++编译器仍然是32位

int基本上都是32位的

32位能表达多少数呢

能够表达从-21个亿到+21个亿这样的数据

数据蛮大的吧

如果是一个unsgined int

那就是从0到42个亿这样的数据范围

我们平时要表达一些特定数据量的话

有的时候不需要这么大数字

这时候我们可以

把这个整数再弄短一点

前面加一个short 就短了

short int短多少呢 看一个编译器

有的16位 有的8位

16位有多大呢 就是0到655535

或者-32768 到32767

像这样数字基本就够了

你要知道彭祖当年号称800岁

你看看 这个表达范围就够了

我们正常人哪能活那么长呢

还有一个long int

要把它搞长一点 那更没用

在主流编译器下面long int就是int

那你说我现在不都是64位计算嘛

64位操作系统 那我要64位的整数

用int能表达吗 不能

有的编译器支持long long int

那就整数万岁了 对吧

后来呢有一个不成熟的关键字

就叫__int64

就用它来表达64位整数

现在因为不同编译器

在这个问题上面还没有完全统一

理论来讲这两种格式

好像象都应该可以处理

接下来我们看量与表达式

这里面涉及到几个主要的问题

第一个表达式

第二个变量的概念

然后文字和常量

然后怎么进行赋值与初始化

我们先从表达式定义开始讲起

什么叫表达式

表达式就是操作数和操作符序列

表达运算过程

操作数在这里面包括文字 量 函数调用

还包括括号

这些都可以作为操作数

因为括号讲起来相当于

另外一个子表达式

它把这个子表达式做完

把这个结果放到这个位置

剩下操作符

操作符就是我们运算的逻辑

所以函数调用 括号

其实可以认为是一个操作符

但是它的结果其实充当操作数

表达式求值就是运算

得到结果 就这样一个过程

计算肯定离不开量 尤其是变量

什么叫变量呢

变量就是在整个程序运行期间

它存储的值可以改变的量

在C/C++这种程序设计语言里面

变量必须先定义再使用

变量的名字要求在语言中具有唯一性

不允许重名

我们总结出来变量有四个基本特征

我把四个首字母抽取出来

拼成一个单词 叫VANT vantage词根

四个基本特征

变量具有值

变量总是和内存中的地址相对应的

我们可能很多时候不知道那个地址

具体是在什么位置 编号是多少

但是它肯定是有的

这是第二个

第三个变量总是要有一个名字name

总是具名的

无名英雄 一般是不允许的

还有每一个变量都具有特定的型

每个数据对象类型必须匹配

否则的话没有办法去运算

文字和变量不一样

文字是指程序中单独出现的值

比如圆周率3.14 这种东西

直接出现就这么一个数据值

那我们就称它为文字

也有的时候它不仅仅是数字

它也可能是字符串

它也是文字

整数类型的文字

十进制表示

十六进制 八进制表示都可以

如果是一个标准十进制表示

那就是普通整数

你该怎么写就怎么写

如果十六进制它就不一样了

逢十六进一

它就从0到9这个数字不够

还要abcdef来表示

所以要表示十六进制的话

就前面用0x来开头

x大写小写都可以

所以十六进制的0X55就表示十进制的85

八进制的话 就是逢8进1

刚才是逢16进1 这是逢8进1了

前面加一个0

0后面不用x

注意8进制不能和10进度相混淆

逢8进1 不是逢10进1

8进制平时我们很少用

16进制倒是蛮常用的

最常用当然是整数

标准整数 10进制

如果是浮点数的话

同样是有两种表示方式

一种是一般形式

就是小数表示法

指数形式的 比如小数π 圆周率3.1416

这就是我们的小数

第二是科学计数法

用字符E(大小写都可以)来表达

前面是尾数部分 后面跟着一个e

就表示对应的指数部分开始

3.14e3写的是什么

就是3.14乘上10的三次方

-2.7e-2 写的是什么

是-2.7乘上10的-2次方

这就是科学计算法

字符串文字

是双引号引起来的字符序列

“Programming in C++”

就是字符串

还有“Hello World!\n”

这也是字符串

双引号引起来的

像这样字符串类型的文字

里面有可能出现一系列的转义序列

用‘\n’来表示一个换行

因为字符串里面

有一些不可打印字符

往往表示控制信息

那么我们怎么把它显示出来

(就需要)使用转义序列

这个转义序列表达的时候

由‘\’开头 后面跟着特定的

一个或者多个字符来表示

这就是转义字符序列

我们列了一个表格

是C/C++语言给我们预定好的

‘\n’是换行

‘\0’表示对应的ASCII值为0

‘\”’表示双引号字符

‘\\’ 表示反斜杠自身

接下来第三个概念就是常量

常量是什么呢

从定义上来讲

常量就是程序在运行期间

它的值不可以改变的量

我们就称它为常量

定义和变量就不一样

第一 我前面加上一个const

表示它是一个常量

后边要有一个等号

跟着一个初始值

注意啊 那其实不是等号

当然它也不是赋值号

它就是初始化符号

因为一个常量在定义好了以后

它的值在整个程序运行期间

是不能变的

所以绝不可以对这个常量进行赋值

任何时候对它进行赋值都是错的

那怎么给它设定一个有意义的值

给它设值的唯一场合

就是在定义这个常量的瞬间

也就是对它进行初始化

const int zero

把它初始化成0

常量有什么意义呢

它最重要的一个意义

是解决我们程序中出现的一些魔数

就是那个文字

孤零零出现一个 比如3.14

你说3.14是什么

在我程序中出现一个东西

它到底是什么

谁告诉你一定是圆周率

你回家量量你那房子

房子内部宽度

难道不可能刚好是3.14吗

所以你说这个东西它有什么意义呢

它充当一个魔数

没有办法解释它的意义

你一旦把一个长度

把一个房子的宽度变成了圆周率

那参与数学运算的结果肯定崩掉

肯定不对了嘛

所以我们得弄一个常数

凡是出现圆周率的地方

我写const double pi = 3.14

现在好了吧

房子那个宽度3.14刚好跟它巧合了

那巧合归巧合

它们是两个不同的量

一个是常量 一个是变量

两者没关系了

我后面写程序也不会混淆啊

所以这个常量作用就在这里

体现出来了吧 取代魔数

常量和变量是不一样的

常量不可以在运营期间改变它的值

其它呢和变量性质都一样

定义常量的时候必须对它进行初始化

初始化那个表达式

必须在编译期间

就能够算出结果来

这是明确的要求

接下来就是赋值

我们前面其实已经见到过赋值表达式

标准变量名称后面跟着一个表达式

运算出结果

把这个结果传给变量名称

这是一个标准表达式 a = 0

后面加一分号就变成了赋值语句

变量在定义的时候

当然也可以对它进行初始化

比如int a = 0 这是没问题的

但是变量和常量不一样的

你哪怕真的初始化成0

后续也可以不断对它进行赋值

比如 a后来又赋值为1

后来又赋值为2 这是没问题的

初始化在它定义瞬间的只能做一次

而变量的赋值可以随便做

想做几次就做几次

我们可以看简单的赋值流程

回到我们刚才那个图

我有三个量a、b、sum三个量

我都画了一个框框来表达它们

现在我在a、b、sum三个量外面

再封包一个框

然后在上面贴一个标签main

表示这三个量属于main函数

这个我们后面就会有一个

关键的专业名词称呼它

它叫函数调用的栈框架

我们现在来看程序赋值流程

一旦我们将一个整型数字1赋值给a

a里面将会具有整数1

完成b的赋值

b里将会有个数2

完成sum的赋值

sum里面将会有3

在C++代码中有三种类型的操作符

一种叫一元操作符

一种叫二元操作符

一种叫三元操作符

有的操作符带一个操作数就够了

比如加负号 有个变量a

然后-a就取它对应的负值

这就是一元操作符

还有二元操作符

有两个操作数

a + b 加号有两操作数

在C/C++里面

操作符有优先级

决定整个表达式的计算顺序

结合性呢 决定计算的方向

你看左结合 右结合的

从左到右算 从右到左算

但C/C++的操作符优先级

和结合性它很特殊

特殊在什么地方

C/C++里面操作符特别多 特别复杂

它那个操作符优先级

分成了十好几级 特别复杂

有些操作符用的时候

不是特别小心的话

一弄就搞错了

所以用起来特别复杂 费劲

同学们在理解它的时候需要特别

你写一个表达式

你想先算哪个 想后算哪个

你搞不清楚它优先级就加括号

编译器会自动将不需要的括号去除

这一点你不用担心

不会影响我们的程序效率

接下来就是语句

在我们C/C++代码里面包括了三种

一种简单语句 一种是复合语句

还有空语句

第一个 简单语句

就是一个表达式后面跟着一个分号

它就叫简单语句

你别管这个表达式有多复杂

它都是一条简单语句

第二 复合语句

复合语句是什么

就是花括号对括起来的一个语句序列

剩下就是空语句 什么内容都没有

就是一个孤零零一个分号

我需要一个分号在这个地方

它有两种用途

第一个 满足特定的程序语法规则

有的时候语法规则

要求这个地方必须有一条语句

可是又没有语句往里填

填什么 填这个分号 空语句

在开发程序的过程中

我现在也不知道程序写出来对不对

我想测试一下

可是这段代码我不知道该写什么

怎么办

我就先写一个分号(空语句)放在这个地方

表示这个地方我知道我未来还要填代码

但现在我不知道该填什么

先运行一下

看看我们原型系统能不能够运行

有没有问题 这就是占位

这是我们程序开发的一个小技巧

接下来就是我们基本输入输出的功能

基本输入输出我们前面有两个例子

来讨论这个问题

cout做输出 cin做输入

输出的话我们称之为插入操作符

为什么

是要把这个数据插入到这个输出流里

所以叫插入操作符

cout << “Hello World!” << endl

把“Hello World!”这个字符串

插到这个输出流里了

后来又把这个换行(endl标志)

插入这个输出流里

输入的话就是cin

从这个输入流里面

把这个数据提取出来

比如cin >> a

它也可以连写 >> b按照这个方式连写

这是没有问题的

只不过这种方式不太妥当

因为你没有提示信息

用户不知道 输入两个整数

这就是标准的基本输入输出工作

它实际上是很简单的

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP0105笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。