- 2022tysc0250 的博客
总结
- 2023-10-8 7:23:09 @
- 数据类型:
- 整数类:
short
、int
、long
、long long
, (unsigned
) - 浮点型:
float
、double
- 其他类:
bool
、char
、string
、struct
(用于定义数据类型); bool
状态:true
、false
- 整数类:
- 变量(数组、函数、结构体等) 命名规则:
- 只能有字母、数字和_;
- 数字不能开头;
- 名称严格区分大小写,且不能重复;
- 编程中的结构:
- 顺序结构;
- 分支结构:
if(){ } else { }
switch(){ }
?:
- 循环结构:
while(){ }
do{ }while()
for(;;) { }
- 循环跳转:
break
:从break
语句开始,退出当前循环continue
:从continue
语句开始,跳过本次循环
- 数组:一个存储多个数据的变量的集合。
- 数组下标:从开始,到结束.
- 除外,不能直接输入和输出
- 初始化的方式
a[]={0}
- 二维数组的定义:如果一维数组中的元素又是一个数组,先行后列。
- 字符数组:
char a[101]
- 求长度:
strlen(a)
- 带空格的输入:
cin.getline(a,101)
- 字符串连接:
strcat(a,b)
:将B连接在A的后面 - 字符串复制:
strcpy(a,b)
:将B复制给A
- 求长度:
- 字符串
string
:string a
- 求长度:
a.length()
- 带空格的输入:
getline(cin,a)
- 字符串连接:
a+=b
:将B连接在A的后面 - 字符串复制:
a=b
:将B复制给A - 字符串截取:
s=s.substr(a,b)
:从下标开始截取个字符 - 字符串插入:
s.insert(a,b)
:在下标前插入字符串 - 字符串查找:
s.find(a)
:在字符串中查找字符串,找到返回第一位字符的下标,未找到返回unsigned long long
的最大值
- 求长度:
- 函数:
-
包含:函数名、函数的参数及数据类型、函数的返回值类型(
void
)、函数体 -
常用函数:
max(a,b)
、min(a,b)
:要求,数据类型相同- 整数:
abs(a)
- 浮点数:
fabs(a)
数据类型区别
sqrt(a)
pow(a,b)
返回值为
double
类型sort(a,a+n)
:注意下标区别swap(a,b)
:无特殊要求。memset(a,0,sizeof(a))
:数组初始化
- 整数:
-
自定义函数
-
- 进制转换与原反补码 (1)进制转换:模除法。 (2)特殊的进制转换: (1)二进制与八进制: 二转八:二进制从最低位开始每3位转换为一个八进制的1位,顺序书写即可。 八转二: 八进制的每位转换成一个3位的二进制数,顺序书写即可。 (2)二进制与十六进制: 二转十六:二进制从最低位开始每4位转换为一个十六进制的1位,顺序书写即可。 十六转二:十六进制的每位转换成一个4位的二进制数,顺序书写即可。 (3) 原码:用最高位表示数字的符号,0为正数,1为负数 反码:正数不变,负数除符号位外,全部取反 补码:正数不变,负数为反码+1
- 运算优先级 () 大于! ++ -- 大于 * / % 大于 + - 大于 >> << 大于 > >= < <= 大于 == != 大于 && 大于 || 大于 = += -=...
- 输入与输出 (1)cin 与 cout iostream (2)scanf 与 printf cstdio (3)速度:scanf/printf快于cin/cout '\n'快于endl (4) %d-int/bool %f-float %lf-double %lld-long long %c-char %s-char[] %u-unsigned int %llu-unsigned long long %5d-整数至少5位场宽,右对齐 %-5d-整数至少5位场宽,左对齐 %5s-字符串场宽至少为5,右对齐 %-5s-字符串场宽至少为5,左对齐 %5.3s-字符串从右往左截取3位,场宽5,右对齐 %-5.3s-字符串从右往左截取3位,场宽5,左对齐 %5.3lf-保留3位,场宽5,右对齐 %-5.3lf-保留3位,场宽5,左对齐 iomanip cout<<fixed<<setprecision(3)<<a; 保留3位小数
- 位运算: (1) & 二进制中,有0则为0 。 if(x%21)相当于 if(x&11) (2) | 二进制中,有1则为1 。 (3) ^ 二进制中,相同为0,不同为1 。a^a=0 a^0=a (4) ~ ~a=-a-1 (5) >> a>>=1相当于a/=2 (6) << a<<=1相当于a*=2
- 排序: (1)冒泡:for(i 表示轮) for(j 表示下标) 比较与交换 (2)选择:for(i 表示轮) 找最小(大)值, 与第i个进行交换 (3)插入:for(i 表示轮) 把当前元素依次向前对比和交换,比其小则停止 (4)桶排:用数组下标进行排序的方式 (5)快排:sort(a,a+n) (6)结构体排序:使用struct 和 sort进行排序,需要自定义cmp函数
- 高精度: (1)加法和减法:用数组的每一位存数字的每一位。 (2)步骤: 存储-转换-计算-特判-输出
- 递推与递归: (1)递推用循环、递归用函数 (2)递推关系与初始条件
- 文件流 (1) freopen("1.in","r",stdin); (2) freopen("1.out","w",stdout);
- 栈 1.stack st; //声明一个栈st,用于存储int变量; 2.st.push(x); //将表达式x的值入栈 3.st.pop();//弹出栈顶元素 4.x = st.top(); //获取栈顶元素值,并赋给变量x 5.st.empty();//判断st是否为空,若回空就返回ture 6.st.size(); //返回栈st中存储的元素个数
- 队列 1.queue qu;//声明一个队列qu,用于存储int变量 2.qu.push(x);//将表达式x插入队尾 3.qu.pop();//弹出队首元素 4.qu.front();//获取队首元素的值 5.qu.back();//获取队尾元素的值 6.qu.empty();//判断序列qu是否为空,若空返回true 7.qu.size();//获取序列qu的长度
- 双端队列 1.deque dq;//声明一个队列 dq,用于存储int型变量 2.dq.push_back(x);//将表达式x的值插入队尾 3.dq.push_front(x);//将表达式x的值插入队首 4.dq.pop_back();//弹出队尾元素 5.dq.pop_front();//弹出队首元素 6.dq.clear();//清空队列dq 7.dq.front();//获取队首元素的值 8.dq.back();//获取队尾元素的值 9.dq.empty();//判断队列dq是否为空 10.dq.size();//获取队列dq的长度
- 变长数组 (1)vectorve;//定义一个变长数组ve用于储存 int 类型元素 (2)ve.push_back(x);//在ve里面存储一个元素x (3)ve.pop_back();//弹出变长数组ve末尾元素 (4)ve.front();/ve.back();//获取变长数组队首/队尾元素 (5)ve.empty();//判断ve是否为空 (6)ve.size();//获取ve的长度 (7)for(int i=0;i<ve.size();i++)//循环遍历ve每个元素 (8)sort(ve.begin(),ve.end());//对ve排序
1.数据类型:
(1)整数类:short;int;long;long long; (unsigned)
(2)浮点型:float;double;
(3)其他类:bool;char;string;struct(用于定义数据类型);
(4)bool 状态:true false
2.变量(数组、函数、结构体等) 命名规则:
(1)只能有字母、数字和_;
(2)数字不能开头;
(3)名称严格区分大小写,且不能重复;
3.编程中的结构:
(1)顺序结构;
(2)分支结构:
if(){ } else { }
switch(){ }
?:
(3)循环结构:
while(){ }
do{ }while()
for(;;) { }
(4)循环跳转:
break 从break语句开始,退出当前循环
continue 从continue语句开始,跳过本次循环
4.数组:一个存储多个数据的变量的集合。
(1)数组下标:从0开始,到size()-1结束.
(2)除char[]外,不能直接输入和输出
(3)初始化的方式a[]={0} ;
(4)二维数组的定义:如果一维数组中的元素又是一个数组,先行后列。
5.字符数组:char a[101] ;
(1)求长度: strlen(a)
(2)带空格的输入:cin.getline(a,101);
(3) 字符串连接:strcat(a,b); 将B连接在A的后面
字符串复制:strcpy(a,b); 将B复制给A
6.字符串string:string a;
(1)求长度: a.length();
(2)带空格的输入:getline(cin,a);
(3) 字符串连接:a+=b; 将B连接在A的后面
字符串复制:a=b; 将B复制给A
字符串截取:s=s.substr(a,b) ; 从下标a开始截取b个字符
字符串插入:s.insert(a,b) ; 在下标a前插入字符串b
字符串查找:s.find(a); 在字符串s中查找字符串a,找到返回第一位字符的下标,
未找到返回unsigned long long的最大值
7.函数:
(1)包含:函数名、函数的参数及数据类型、函数的返回值类型(void)、函数体
(2)常用函数:max(a,b); min(a,b); 要求a,b数据类型相同
整数:abs(a); 浮点数:fabs(a); 数据类型区别
sqrt(a); pow(a,b); 返回值为double类型
sort(a,a+n); 注意下标区别
swap(a,b); 无特殊要求。
memset(a,0,sizeof(a)); 数组初始化
(3)自定义函数:
(1)质数判断:时间复杂度为 根号n。
int zs(int x){ if(x<=2) return 0; for(int i=2;i*i<=x;i++) if(x%i==0) return 0; return 1; }
(2)数字翻转
int fz(int x){ int a=0; while(x) { a=a*10+x%10; x/=10; } return a;}
(3)进制转换 (十进制转二进制:递归实现)
void zh(int x) { if(x==0) return ; zh(x/2); cout<<x%2; }
(4)递归 (fib)
int fib(int x){ if(x<=2) return 1; return fib(x-1)+fib(x-2); }
8.进制转换与原反补码
(1)进制转换:模除法。
(2)特殊的进制转换:
(1)二进制与八进制:
二转八:二进制从最低位开始每3位转换为一个八进制的1位,顺序书写即可。
八转二: 八进制的每位转换成一个3位的二进制数,顺序书写即可。
(2)二进制与十六进制:
二转十六:二进制从最低位开始每4位转换为一个十六进制的1位,顺序书写即可。
十六转二:十六进制的每位转换成一个4位的二进制数,顺序书写即可。
(3) 原码:用最高位表示数字的符号,0为正数,1为负数
反码:正数不变,负数除符号位外,全部取反
补码:正数不变,负数为反码+1
9.运算优先级
() 大于! ++ -- 大于 * / % 大于 + - 大于 >> << 大于 > >= < <=
大于 == != 大于 && 大于 || 大于 = += -=...
10.输入与输出
(1)cin 与 cout iostream
(2)scanf 与 printf cstdio
(3)速度:scanf/printf快于cin/cout '\n'快于endl
(4) %d-int/bool %f-float %lf-double %lld-long long %c-char %s-char[]
%u-unsigned int %llu-unsigned long long
%5d-整数至少5位场宽,右对齐 %-5d-整数至少5位场宽,左对齐
%5s-字符串场宽至少为5,右对齐 %-5s-字符串场宽至少为5,左对齐
%5.3s-字符串从右往左截取3位,场宽5,右对齐 %-5.3s-字符串从右往左截取3位,场宽5,左对齐
%5.3lf-保留3位,场宽5,右对齐 %-5.3lf-保留3位,场宽5,左对齐
iomanip cout<<fixed<<setprecision(3)<<a; 保留3位小数
11.位运算:
(1) & 二进制中,有0则为0 。 if(x%2==1)相当于 if(x&1==1)
(2) | 二进制中,有1则为1 。
(3) ^ 二进制中,相同为0,不同为1 。a^a=0 a^0=a
(4) ~ ~a=-a-1
(5) >> a>>=1相当于a/=2
(6) << a<<=1相当于a*=2
12.排序:
(1)冒泡:for(i 表示轮) for(j 表示下标) 比较与交换
(2)选择:for(i 表示轮) 找最小(大)值, 与第i个进行交换
(3)插入:for(i 表示轮) 把当前元素依次向前对比和交换,比其小则停止
(4)桶排:用数组下标进行排序的方式
(5)快排:sort(a,a+n)
(6)结构体排序:使用struct 和 sort进行排序,需要自定义cmp函数
13.高精度:
(1)加法和减法:用数组的每一位存数字的每一位。
(2)步骤: 存储-转换-计算-特判-输出
14.递推与递归:
(1)递推用循环、递归用函数
(2)递推关系与初始条件
15.文件流
(1) freopen("1.in","r",stdin);
(2) freopen("1.out","w",stdout);
16.栈
1.stack<int> st; //声明一个栈st,用于存储int变量;
2.st.push(x); //将表达式x的值入栈
3.st.pop();//弹出栈顶元素
4.x = st.top(); //获取栈顶元素值,并赋给变量x
5.st.empty();//判断st是否为空,若回空就返回ture
6.st.size(); //返回栈st中存储的元素个数
17.队列
1.queue<int> qu;//声明一个队列qu,用于存储int变量
2.qu.push(x);//将表达式x插入队尾
3.qu.pop();//弹出队首元素
4.qu.front();//获取队首元素的值
5.qu.back();//获取队尾元素的值
6.qu.empty();//判断序列qu是否为空,若空返回true
7.qu.size();//获取序列qu的长度
18.双端队列
1.deque<int> dq;//声明一个队列 dq,用于存储int型变量
2.dq.push_back(x);//将表达式x的值插入队尾
3.dq.push_front(x);//将表达式x的值插入队首
4.dq.pop_back();//弹出队尾元素
5.dq.pop_front();//弹出队首元素
6.dq.clear();//清空队列dq
7.dq.front();//获取队首元素的值
8.dq.back();//获取队尾元素的值
9.dq.empty();//判断队列dq是否为空
10.dq.size();//获取队列dq的长度
19.变长数组
(1)vector<int>ve;//定义一个变长数组ve用于储存 int 类型元素
(2)ve.push_back(x);//在ve里面存储一个元素x
(3)ve.pop_back();//弹出变长数组ve末尾元素
(4)ve.front();/ve.back();//获取变长数组队首/队尾元素
(5)ve.empty();//判断ve是否为空
(6)ve.size();//获取ve的长度
(7)for(int i=0;i<ve.size();i++)//循环遍历ve每个元素
(8)sort(ve.begin(),ve.end());//对ve排序