吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 431|回复: 12
收起左侧

[学习记录] CPP学习笔记

  [复制链接]
LNB0X 发表于 2024-7-26 19:57
本帖最后由 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(表达式) 语句

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语句

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 += ba = 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循环

基本结构

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

功能

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


第七课 while

基本格式

while(表达式)
    语句;

作用

当表达式非0时执行语句

死循环

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


第八课 do-while

基本格式

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

功能

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


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

break

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

continue

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


第十课 多重循环嵌套

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


第十一课 一维数组

定义

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

数组下标

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

储存方式

占用连续一片内存单元

初始化

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


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

定义格式

char 数组名[元素个数]

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

初始化

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

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];


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

函数定义结构

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

    ...

    返回
}

函数的调用

函数名[参数列表]

变量的作用域

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

冒泡排序

定义

冒泡排序(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)如果发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。(优化)  

实现

        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

justwz 发表于 2024-7-26 20:33
刚好最近在学这个
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
喂饭教程,棒棒的
BeiN1 发表于 2024-7-26 22:00
感谢分享!自己也正在学习cpp,一起努力,加油!
d0b 发表于 2024-7-26 22:04
感谢分享
Anonyoung 发表于 2024-7-27 01:11
+1 我最近也在学CPP
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-8 08:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表