1. 数据类型:
    1. 整数类:shortintlonglong long, (unsigned)
    2. 浮点型:floatdouble
    3. 其他类:boolcharstringstruct(用于定义数据类型);
    4. bool状态:truefalse
  2. 变量(数组、函数、结构体等) 命名规则:
    1. 只能有字母、数字和_;
    2. 数字不能开头;
    3. 名称严格区分大小写,且不能重复;
  3. 编程中的结构:
    1. 顺序结构;
    2. 分支结构: if(){ } else { } switch(){ } ?:
    3. 循环结构: while(){ } do{ }while() for(;;) { }
    4. 循环跳转: break:从break语句开始,退出当前循环 continue:从continue语句开始,跳过本次循环
  4. 数组:一个存储多个数据的变量的集合。
    1. 数组下标:从00开始,到size()1size()-1结束.
    2. char[]char[]外,不能直接输入和输出
    3. 初始化的方式a[]={0}
    4. 二维数组的定义:如果一维数组中的元素又是一个数组,先行后列。
  5. 字符数组:char a[101]
    1. 求长度:strlen(a)
    2. 带空格的输入:cin.getline(a,101)
    3. 字符串连接:strcat(a,b):将B连接在A的后面
    4. 字符串复制:strcpy(a,b):将B复制给A
  6. 字符串stringstring a
    1. 求长度:a.length()
    2. 带空格的输入:getline(cin,a)
    3. 字符串连接:a+=b:将B连接在A的后面
    4. 字符串复制:a=b:将B复制给A
    5. 字符串截取:s=s.substr(a,b):从下标aa开始截取bb个字符
    6. 字符串插入:s.insert(a,b):在下标aa前插入字符串bb
    7. 字符串查找:s.find(a):在字符串ss中查找字符串aa,找到返回第一位字符的下标,未找到返回unsigned long long的最大值
  7. 函数:
    1. 包含:函数名、函数的参数及数据类型、函数的返回值类型(void)、函数体

    2. 常用函数:max(a,b)min(a,b):要求aa,bb数据类型相同

      • 整数:abs(a)
      • 浮点数:fabs(a)

      数据类型区别

      • sqrt(a)
      • pow(a,b)

      返回值为double类型

      • sort(a,a+n):注意下标区别
      • swap(a,b):无特殊要求。
      • memset(a,0,sizeof(a)):数组初始化
    3. 自定义函数

  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%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
  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 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 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 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)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排序