第2章 C/C++快速入门

2.1 基本数据类型

2.1.1 变量的定义

1
变量类型 变量名;

1
变量类型 变量名 = 初值;

变量名注意点:

①不能是语言标识符;

②第一个字符必须是字母或下划线,除第一个字符之外的其他字符必须是字母、数字或下划线;

③区分大小写。

2.1.2 变量类型

1.整型

(1)整型 int:绝对值在 1e9 之内可以放心使用。

(2)长整型 long long:超过 int 时使用,初值太大需要在后面加 LLunsigned 可以将负数范围移到正数上。

2.浮点型

(1)单精度 float:有效精度6-7位。

(2)双精度 double:有效精度15-16位,因此浮点类型尽量使用 double

3.字符型

(1)字符变量和字符常量

使用ASCII码。

(2)转义字符

\n表示换行,\0表示空字符NULL。

(3)字符串常量

C中有字符数组,C++中有string类型。

4.布尔型

C语言使用必须添加 #include <stdbool.h> 头文件。0为false,非0为true,false为0,true为1。

2.1.3 强制类型转换

1
(新类型名)变量名

2.1.4 符号常量和const常量

1
#define 标识符 常量
1
const 数据类型 变量名 = 常量;

虽然以上都能定义常量,但是推荐使用 const 写法。

1
#define 标识符 任何语句或片段
定义注意加括号。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

### 2.1.5 运算符

#### 1.算术运算符
++i是先加1在使用i,而i++是先使用i再加1。

#### 2.关系运算符

#### 3.逻辑运算符

#### 4.条件运算符
唯一的三目运算符:( ? : )

#### 5.位运算符
定义无穷大

const int INF = (1 << 30) - 1;

1

const int INF = 0x3fffffff;

1
2
3
4

## 2.2 顺序结构

### 2.2.1 赋值表达式

int n = 5;

int a, b;
a = b = 5;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

### 2.2.2 使用scanf和printf输入/输出

#### 1.scanf函数的使用
scanf不要漏写&。

#### 2.printf函数的使用
(1)%md

%md可以使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐;如果变量本身超过m位,则保持一样。

(2)%0md

%0md只是在%md中间多加了0。和%md的唯一不同在于,当变量不足m位时,将在前面补足足够数量的0而不是空格。

(3)%.mf

%.mf可以让浮点数保留m位小数输出,这个“保留”使用的是精度的“四舍六入五成双”规则。

### 2.2.3 使用 getchar 和 putchar 输入/输出字符
getchar可以识别换行符。

### 2.2.4 注释
(1)使用“/**/”注释

可以注释若干连续行的内容。

(2)使用“//”注释

注释仅限于行。

### 2.2.5 typedef

可以给复杂的数据类型定义一个别名,提高编码效率。

### 2.2.6 常用math函数

#### 1.fabs(double x)
对double型变量取绝对值。

#### 2.floor(double x)和ceil(double x)
对double变量向下取整和向上取整。

#### 3.pow(double r, double p)
返回 $r^p$。

#### 4.sqrt(double x)
返回double型变量的算术平方根。

#### 5.log(double x)
返回double型变量以自然数为底的对数。若需要其他底数,需用换底公式计算:$log_ab = log_eb / log_ea$。

#### 6.sin(double x)、cos(double x)和tan(double x)
分别返回double型变量的正弦值、余弦值和正切值。

#### 7.asin(double x)、acos(double x)和atan(double x)
分别返回double型变量的反正弦值、反余弦值和反正切值。

#### 8.round(double x)
将double型变量四舍五入。

## 2.3 选择结构

### 2.3.1 if语句
```cpp
if(n == 0) -> if(!n)
if(n != 0) -> if(n)

2.3.2 if语句的嵌套

1
2
3
4
5
6
7
8
9
10
11
if(A)
{
if(B)
{
···
}
else
{
···
}
}

2.3.3 switch语句

1
2
3
4
5
6
switch(op)
{
case 1:···break;
···
default:···break;
}

2.4 循环结构

2.4.1 while语句

1
2
3
4
while(A)
{
···
}

2.4.2 do···while语句

1
2
3
do{
···
}while(A);

2.4.3 for语句

1
2
3
4
for(A; B; C)
{
···
}

2.4.4 break和continue语句

break:退出当前循环;

continue:结束循环的当前轮回

2.5 数组

2.5.1 一维数组

数组名[数组大小];```
1
2
3
4
5
6
7
8

在定义了长度为size的一维数组后,只能访问下标为0~size-1的元素。

### 2.5.2 冒泡排序
冒泡排序的本质在于交换,即每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为0时,排序结束。

### 2.5.3 二维数组
```数据类型 数组名[第一维大小][第二维大小];

如果数组大小较大(大概$10^6$级别),则需要将其定义在主函数外面,否则会使程序异常退出,原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小;而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。

2.5.4 memset——对数组中每一个元素赋相同的值

memset(数组名, 值, sizeof(数组名));

memset使用的是按字节赋值,速度快,但是只建议赋0或-1,因为二进制补码为全0或全1。二维数组及多维数组的赋值方法也是一样的。

2.5.5 字符数组

1.字符数组的初始化