LNB0X 发表于 2024-7-26 19:57

CPP学习笔记

本帖最后由 LNB0X 于 2024-7-28 10:26 编辑

# C++

## 第一课

### iostream

iostream是C++的标准库,类似于C的stdio

### using namespace std

`using namespace std`;中的using namespace代表使用命名空间,后面的std表示空间的名字叫std,而下面的cout就在命名空间std中被定义,下面的cout可以改成std:cout来使用

### cout<<

`cout`为C++中的标准输出函数,类似与C的printf,使用语法为 `cout<<"字符串"<<变量名<<表达式<<endl` 其中的endl与"\n"的意思相同

----

## 第二课 变量与变量类型

### 定义变量的方法

变量类型 变量名1,变量名2,...,变量名n;
如`int a;`
`int a = 0,b;`等

### 变量的作用

储存数据

### 变量的命名规则

1. 只能有字母,数字,下划线组成
2. 第一个字符不能是数字
3. 不能是C++已有的关键字
4. 区分大小写

### 变量类型

1. 整型 (整数)
    1. 短整型short 16bit 2byte -2^15~2^15-1
    2. 长整型long 32bit 4byte -2^31~2^31-1
    3. 超长整型long 64bit 8byte -2^63~2^63-1
    4. 无符号整型unsigned int 16bit 2byte 0~2^16-1
    5. 无符号短整型unsigned short 16bit 2byte 0~2^16-1
    6. 无符号长整形unsigned long 32bit 4byte 0~2^32-1
    7. 无符号超长整形unsigned long long 64bit 8byte 0~2^64-1
    8. 整型int 32bit 4byte -2^31~2^31-1
2. 实型 (小数)
    1. float 6~7位
    2. double 15~16位
    3. long double 18~19位
3. 布尔
    1. bool ture或false

### 类型转换

1. 自动类型转换
    1. 由精度低向精度高
    2. 由右边的类型转换为左边的类型
    3. 隐性
2. 强制类型转换
    1. 格式
      1. (类型名)(表达式)
      2. (类型名)变量
    2. 显性

### cin>>

C++标准输入函数,类似C的scanf,使用语法:`cin>>变量1>>变量2>>...>>变量n`; 相邻的值用空格或换行隔开

----

## 第三课 选择判断结构

### 基本结构

`if(表达式) 语句`

~~~cpp
if(表达式)
    语句1
else
    语句二
~~~

### if结构需要注意

1. 后面的语句没有{},就认为后面的第一条语句是if带的语句
2. 后面用{}括了语句,整个{}的语句算作一条语句为if带的语句

### 关系运算符

1. '==' 等于
2. '!=' 不等于
3. '>' 大于
4. '<' 小于
5. '>=' 大于等于
6. '<=' 小于等于

### 关系表达式的值

是一个逻辑值,是真或假,为真则成立,为假则不成立
真为1,假为0
C++中 !0为真,0为假(即不是0就是真)

### 逻辑运算符

1. &&逻辑与两者同时为真才为真
2. ||逻辑或两者有一个为真就为真
3. !逻辑非   真假值与原式相反

### 逻辑变量

bool

1. 0 ==> false
2. 1 ==> ture

### switch case语句

~~~cpp
switch(表达式)
{
    case 常量表达式1:[语句组1][...][语句组n]break;
    ...
    case 常量表达式n:[语句组1][...][语句组n]break;
    default:[语句组1]
}
~~~

----

## 第四课Scanf和printf标准输入输出

### 区别

scanf和printf可在C和C++中共用
scanf和printf的速度快,效率高

### 使用

包含cstdio库

### printf

格式控制字符不是格式字符则原样输出
如果是格式字符则将其取代为后方输出列表表达式的值并输出

### 格式符

1. %d 以十进制形式输出带符号整数 (正数不输出符号)
2. %o 以八进制形式输出无符号整数 (不输出前缀O)
3. %x或%X 以十六进制形式输出无符号整数 (不输出前缀0x)
4. %u 以十进制形式输出无符号整数
5. %f或%lf 以小数形式输出单、双精度实数
6. %e或%E 以指数形式输出单、双精度实数
7. %g或%G 以%f或%e中较短的输出宽度输出单、双精度实数
8. %c 输出单个字符
9. %s 输出字符串

### 数据类型和对应的格式控制符

1. int %d
2. long %ld
3. long long %lld
4. float %f
5. double %lf
6. long double %llf
7. char %c
8. 字符串 %s

### 附加格式说明符控制输出的小数位数

`%n.mf`
输出一个保留m位小数,输出宽度为n的float类型的数据

输出宽度(n):输出数据的**小数位+1(小数点)+整数位数**
如果输出结果不足n,全面补充0;如果输出超过n,n失效
可以省略n,直接用%.mf
也可以用于%lf %llf
没.m时,也可用于%d,%ld,%lld

----

## 第五课 赋值语句和数学表达式

### 格式

变量 赋值运算符 表达式
`a += b`比`a = a + b`快
c++支持连等,即`a=b=3`

### 自增和自减

只适用于整型或浮点型
自增:++
分为`变量名++`和`++变量名`
区别:`变量名++`为先参与运算在自增
`++变量名`为先自增在参与运算
自减同理(--)

### cmath

C语言的数学函数库

### 位运算

1. '&' 按位与 同为1,结果为1
2. '|' 按位或 有一个为1,结果就为1
3. '^' 按位异或 不同时为1,相同时为0
4. '~' 取反 按位取反,1为0,0为1
5. '<<' 左移 m << n 为把m按二进制左移n位,高位丢弃,低位补0
6. '>>' 右移 m >> n 为把m按二进制右移n位,低位丢弃,高位补0

----

## 第六课 for循环

### 基本结构

~~~cpp
for(循环变量初始化;循环条件;循环条件增量)
    语句
~~~

### 功能

对于使循环条件成立的每一个循环变量的取值都执行一次循环体,直到条件不成立

----

## 第七课 while

### 基本格式

~~~cpp
while(表达式)
    语句;
~~~

### 作用

当表达式非0时执行语句

### 死循环

当表达式永远非0时就陷入了死循环

----

## 第八课 do-while

### 基本格式

~~~cpp
do
{
    语句;
}
while(表达式);
~~~

### 功能

先执行循环体在判断表达式,表达式为0时结束循环

----

## 第九课 循环中的break和continue语句

### break

中断所在循环体,跳出循环
终止一个case分支,强制跳转到switch的结尾

### continue

在循环中遇到continue,立马结束本次循环,进入下一次判断/循环

----

## 第十课 多重循环嵌套

即一层循环中有另一层循环(或多层)
不能出现内外循环交叉的情况

----

## 第十一课 一维数组

### 定义

```类型名 数组名[元素个数]```
元素个数必须是常量表达式或常数

### 数组下标

从0开始,不能越界
可以是任何值为整数的表达式,可以包含变量和函数调用

### 储存方式

占用连续一片内存单元

### 初始化

```类型名 数组名[常量表达式]={值1,值2,...}```

----

## 第十二课 字符数组(字符串)

### 定义格式

```char 数组名[元素个数]```

字符串中的每一个元素都可以当字符用

### 初始化

定义时对元素逐个赋值,也可以直接用字符串赋值

~~~cpp
char 数组名[常量表达式] = {字符1,字符1,...};
char 数组名[常量表达式] = {"string"};
char 数组名[] = "string";
~~~

### strlen计算字符串长度

```strlen(*str)```

----

## 第十三课 数值排序和查找

### 选择排序

第一次,从列表中选择一个最小的数放到第一个位置。
第二次,从第二个开始的列表中选择一个最小的数放到第二个位置。
不断从n个人的队列排序简化为n-1个人的队列排序。

### 冒泡排序

依次比较前后两个值的大小,如果后面打,那么交换。反之不变。
不断重复以上的过程,直到队列成为有序队列。

### 插入排序

在排序好的序列中,找到这个值正确的位置,然后插入。
并将其后的值后移一位

----

## 第十四课 数值查找和多维数组

### 二分查找算法

先对数据进行排序
设置low,high,mid三个指针
low <= high时,二分查找
求mid = (high + low) / 2
如果目标大于mid,low = mid + 1,继续二分
如果目标小于mid,high = mid + 1,继续二分
如果目标等于mid,返回查找结果

### 二维数组

```数据类型 数组名[常量表达式1][常量表达式2];```

----

## 第十五课函数的定义与变量作用域

### 函数定义结构

~~~cpp
返回类型 函数名(参数)
{
    函数体

    ...

    返回
}
~~~

### 函数的调用

```函数名[参数列表]```

### 变量的作用域

分为全局变量和局部变量
全局变量为定义后,到文件结束
局部变量为被定义的部分内有效,如函数体,循环体等

## 冒泡排序

### 定义

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直至最终完成排序 。由此可得,在排序过程中,大的数据往下沉,小的数据往上浮,就像气泡一样,于是将这种排序算法形象地称为冒泡排序。

### 大致过程

如数组5 4 3 2 1
第一轮
(**5 4** 3 2 1)
4 **5 3** 2 1
4 3 **5 2** 1
4 3 2 **5 1**
4 3 2 1 5
第二轮
(**4 3** 2 1 5)
3 **4 2** 1
3 2 **4 1**
3 2 1 4
第三轮
(**3 2** 1 4)
2 **3 1**
2 1 3
第四轮
(**2 1** 3)
12

### 小结

设总的元素个数为n,那么由上边的排序过程可以看出:

(1)总计需要进行(n-1)轮排序,也就是(n-1)次大循环

(2)每轮排序比较的次数逐轮减少

(3)如果发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。(优化)

### 实现
      
~~~ cpp
      for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr > arr) {
                  int temp = arr;
                  arr = arr;
                  arr = temp;
                }
            }
      }
~~~

justwz 发表于 2024-7-26 20:33

刚好最近在学这个{:1_893:}

wapjdyw680 发表于 2024-7-26 21:24

刚好用到 谢谢分享!

luxvn 发表于 2024-7-26 21:26

刚好在学这个

ailmail 发表于 2024-7-26 21:26

收藏了。有用教材。

falsely 发表于 2024-7-26 21:34

加油楼主

yesyunxin 发表于 2024-7-26 21:40

喂饭教程,棒棒的

d0b 发表于 2024-7-26 22:04

感谢分享

Anonyoung 发表于 2024-7-27 01:11

+1 我最近也在学CPP

MarsK 发表于 2024-7-27 08:19


+1 我最近也在学CPP
页: [1] 2
查看完整版本: CPP学习笔记