《第二单元的思维导图》
一、中心主题:数据类型、运算符与表达式
1.1 数据类型
1.1.1 基本数据类型
-
整型 (Integer)
int: 标准整型,通常占用4个字节 (32位)short int或short: 短整型,通常占用2个字节 (16位)long int或long: 长整型,通常占用4或8个字节 (取决于编译器和平台)long long int或long long: 长长整型,通常占用8个字节 (64位)- 无符号整型 (unsigned):
unsigned intunsigned short intunsigned long intunsigned long long int
- 作用: 存储整数,根据取值范围选择合适的类型,无符号类型存储非负整数。
- 注意: 不同平台和编译器可能对同一类型分配不同的字节数,需要使用
sizeof()运算符来确认。
-
浮点型 (Floating-point)
float: 单精度浮点型,通常占用4个字节 (32位),精度约为7位有效数字。double: 双精度浮点型,通常占用8个字节 (64位),精度约为15位有效数字。long double: 长双精度浮点型,通常占用10或12或16个字节 (取决于编译器和平台),精度更高。- 作用: 存储带有小数部分的数值,
double通常是首选,精度足够且效率较高。 - 注意: 浮点数存在精度问题,不适合进行精确比较。
-
字符型 (Character)
char: 通常占用1个字节 (8位),可以存储ASCII字符集中的字符。- 作用: 存储单个字符,例如字母、数字、符号。
- 本质: 字符在计算机中以整数形式存储,实际上是存储字符对应的ASCII码值。
-
布尔型 (Boolean)
bool: C++内置类型,表示真 (true) 或假 (false)。- 作用: 用于逻辑判断和条件控制。
- 本质:
true通常表示为1,false通常表示为0。
-
空类型 (Void)
void: 表示无类型。- 作用:
- 函数没有返回值时,声明返回类型为
void。 - 函数没有参数时,声明参数列表为
void(C++中可省略)。 void*指针可以指向任何类型的内存地址。
- 函数没有返回值时,声明返回类型为
1.1.2 派生数据类型
-
指针 (Pointer)
- 存储变量的内存地址。
int* p;: 指向int类型变量的指针。- 作用: 允许间接访问和修改变量,实现动态内存分配,提高程序效率。
- 注意: 必须初始化后才能使用,否则可能导致程序崩溃。
- NULL指针: 指向地址0,表示指针未指向任何有效内存地址。
- *void 指针**: 通用指针类型,可以指向任何类型的内存地址,但需要强制类型转换才能进行解引用操作。
-
数组 (Array)
- 相同数据类型元素的集合。
int arr[10];: 声明一个包含10个int类型元素的数组。- 作用: 存储多个相同类型的数据,方便批量处理。
- 注意: 数组的大小在编译时确定,访问数组元素时需要注意下标越界问题。
-
结构体 (Struct)
-
不同数据类型元素的集合。
-
c++ struct Student { string name; int age; float score; };
-
作用: 将多个相关的数据组织在一起,方便管理和操作。
-
-
枚举 (Enum)
-
为整数常量定义别名。
-
c++ enum Color { RED, GREEN, BLUE };
-
作用: 提高代码可读性和可维护性。
-
-
联合体 (Union)
-
多个成员共享同一块内存空间。
-
c++ union Data { int i; float f; char str[20]; };
-
作用: 节省内存空间,但在同一时刻只能存储一个成员的值。
-
1.1.3 类型转换
- 隐式类型转换 (Implicit Type Conversion)
- 编译器自动进行的类型转换,通常发生在运算过程中,将精度低的类型转换为精度高的类型。
- 例如:
int+float->float+float
- 显式类型转换 (Explicit Type Conversion)
- 程序员手动进行的类型转换。
- C风格:
(type) expression - C++风格:
static_cast<type>(expression),dynamic_cast<type>(expression),reinterpret_cast<type>(expression),const_cast<type>(expression) - 作用: 强制将一个类型转换为另一个类型,需要谨慎使用,可能导致数据丢失或类型安全问题。
1.2 运算符
1.2.1 算术运算符
+加法-减法*乘法/除法%取余 (模运算)++自增--自减
1.2.2 关系运算符
==等于!=不等于>大于<小于>=大于等于<=小于等于
1.2.3 逻辑运算符
&&逻辑与 (AND)||逻辑或 (OR)!逻辑非 (NOT)
1.2.4 位运算符
&按位与|按位或^按位异或~按位取反<<左移>>右移
1.2.5 赋值运算符
=简单赋值+=加法赋值-=减法赋值*=乘法赋值/=除法赋值%=取余赋值&=按位与赋值|=按位或赋值^=按位异或赋值<<=左移赋值>>=右移赋值
1.2.6 其他运算符
sizeof返回变量或类型的大小 (字节数)?:条件运算符 (三元运算符),逗号运算符.成员访问运算符 (用于结构体和对象)->成员指针访问运算符 (用于结构体和对象)[]数组下标运算符()函数调用运算符
1.2.7 运算符优先级与结合性
- 优先级: 决定了表达式中不同运算符的计算顺序。
- 结合性: 决定了相同优先级运算符的计算顺序 (从左到右或从右到左)。
- 记忆: 括号优先级最高,赋值运算符优先级最低,单目运算符高于双目运算符。 算数运算符>关系运算符>逻辑运算符>赋值运算符
- 建议: 尽量使用括号来明确运算顺序,避免混淆。
1.3 表达式
1.3.1 算术表达式
- 使用算术运算符进行计算的表达式。
- 例如:
a + b * c
1.3.2 关系表达式
- 使用关系运算符进行比较的表达式。
- 结果为
bool类型 (true或false)。 - 例如:
a > b,x == y
1.3.3 逻辑表达式
- 使用逻辑运算符连接的表达式。
- 结果为
bool类型 (true或false)。 - 例如:
(a > b) && (c < d)
1.3.4 赋值表达式
- 使用赋值运算符进行赋值的表达式。
- 例如:
a = b + c
1.3.5 条件表达式
- 使用条件运算符 (
?:) 的表达式。 condition ? expression1 : expression2- 如果
condition为true,则返回expression1的值,否则返回expression2的值。
1.3.6 逗号表达式
- 使用逗号运算符连接的多个表达式。
- 从左到右依次计算每个表达式,返回最后一个表达式的值。
- 例如:
(a = 1, b = 2, a + b)结果为3
1.4 常量与变量
1.4.1 常量
- 在程序执行过程中,值不能被修改的量。
- 字面常量: 直接写出的常量值,例如:
10,3.14,"Hello"。 - 符号常量: 使用
const关键字定义的常量,例如:const int MAX_SIZE = 100;。 - 宏常量: 使用
#define预处理指令定义的常量,例如:#define PI 3.14159。 - 枚举常量: 枚举类型中的成员。
1.4.2 变量
- 在程序执行过程中,值可以被修改的量。
- 定义: 声明变量的数据类型和名称。
- 初始化: 为变量赋初值。
- 作用域: 变量可以访问的范围。
- 局部变量: 在函数或代码块内部定义的变量,只能在该函数或代码块内部访问。
- 全局变量: 在函数外部定义的变量,可以在整个程序中访问。
- 生存期: 变量存在的时期。
- 自动变量: 局部变量,在函数调用时创建,在函数返回时销毁。
- 静态变量: 使用
static关键字修饰的变量,只初始化一次,在程序运行期间一直存在。
- 存储类别:
auto: 自动存储 (默认,通常省略)。static: 静态存储。register: 寄存器存储 (建议编译器将变量存储在寄存器中,提高访问速度,但并非所有变量都能存储在寄存器中)。extern: 外部存储 (用于声明在其他文件中定义的变量)。
1.5 输入输出
1.5.1 标准输入输出流
iostream头文件cin: 标准输入流,用于从键盘读取数据。cout: 标准输出流,用于向屏幕输出数据。cerr: 标准错误输出流,用于输出错误信息。clog: 标准日志输出流,用于输出日志信息。
1.5.2 格式化输入输出
- 使用
iomanip头文件中的控制符来格式化输入输出。 setw(n): 设置字段宽度为n。setprecision(n): 设置浮点数的精度为n。fixed: 以固定点表示法显示浮点数。scientific: 以科学计数法表示浮点数。setfill(c): 设置填充字符为c。left: 左对齐。right: 右对齐。
二、重点与难点
- 数据类型的选择:根据实际需求选择合适的数据类型,避免浪费内存空间,保证数据精度。
- 运算符优先级与结合性:理解运算符的优先级和结合性,避免表达式出现歧义。
- 类型转换:理解隐式类型转换和显式类型转换,避免数据丢失或类型安全问题。
- 指针:理解指针的概念和使用,掌握指针的运算和应用。
- 输入输出:掌握标准输入输出流的使用,了解格式化输入输出的方法。
三、学习方法
- 多练习:通过编写程序来巩固所学知识。
- 多思考:理解数据类型、运算符和表达式的本质。
- 查阅资料:参考C++标准文档和相关书籍。
- 交流讨论:与同学和老师交流学习心得。
