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;
}
}
}
~~~
刚好最近在学这个{:1_893:} 刚好用到 谢谢分享! 刚好在学这个 收藏了。有用教材。 加油楼主 喂饭教程,棒棒的 感谢分享 +1 我最近也在学CPP
+1 我最近也在学CPP
页:
[1]
2