c++ cheat sheet

梦里梦外; 2021-11-01 15:28 349阅读 0赞

c++知识总结

C++简明教程,可以用来复习知识点、巩固基础知识、备忘提示等。

目录

文章目录

  • c++知识总结
    • 目录
      1. c++程序结构
      1. 注释的使用
      1. 标准输入和输出
      • 3.1 `cin`输入
      • 3.2 `cout`输出
      1. 数据类型
      • 3.1 布尔型
      • 3.2 整型
      • 3.3 浮点型
      • 3.4 字符型
      1. 变量和常量
      • 4.1 变量
      • 4.2 常量
        • 定义常量
      1. scanf和printf输入和输出
      • 5.1 `scanf`使用
      • 5.2 `printf`使用:star:
      • 5.3 格式控制字符串详解
        • 类型字符
      1. 判断
      • 6.1 if语句 :star:
      • 6.2 if-else语句
      • 6.3 条件表达式:star:
      • 6.4 if-else if语句
      • 6.5 switch语句:star:
      1. 循环
      • 7.1 while循环:star:
      • 7.2 do…while循环
      • 7.3 for循环
      • 7.4 循环的中断与跳出
          1. break
          1. continue
      • 7.5 循环的嵌套

1. c++程序结构

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. //你的代码放在这里
  5. return 0;
  6. }

按照惯例,用helloworld开启我们的c++之旅。

  1. //包含头文件
  2. #include <iostream>
  3. //使用std命名空间,
  4. using namespace std;
  5. //程序开始的地方,main函数主函数
  6. int main(){
  7. //输出Hello World
  8. cout<<"Hello World";
  9. //返回0
  10. return 0;
  11. }

2. 注释的使用

  1. /* c++ 支持两种格式的注释 多行注释 单行注释 */
  2. // 这个是单行注释

3. 标准输入和输出

cin和cout定义在iostream头文件中,iostream 是 Input Output Stream 的缩写,意思是“输入输出流”。

3.1 cin输入

  1. int a,b;
  2. //cin与流提取运算符 >> 配合使用
  3. //获取用户输入的值
  4. cin>>a;
  5. //也可以一次输入多个数,中间用空格隔开,或者每行一个数
  6. cin>>a>>b;

3.2 cout输出

  1. //cout与流插入运算符 << 结合使用
  2. cout<<a;
  3. //也可以直接输出多个内容
  4. //endl(end of line) 一行输出结束,输出下一行
  5. cout<<"结果是:"<<a<<endl;
  6. //输出格式设置
  7. //使用格式控制的时候,需要引入iomanip头文件。
  8. int n = 141;
  9. //1) 分别以十六进制、十进制、八进制先后输出 n
  10. cout << "1)" << hex << n << " " << dec << n << " " << oct << n << endl;
  11. double x = 1234567.89, y = 12.34567;
  12. //2)保留5位有效数字
  13. cout << "2)" << setprecision(5) << x << " " << y << " " << endl;
  14. //3)保留小数点后面5位
  15. cout << "3)" << fixed << setprecision(5) << x << " " << y << endl;
  16. //4)科学计数法输出,且保留小数点后面5位
  17. cout << "4)" << scientific << setprecision(5) << x << " " << y << endl;
  18. //5)非负数显示正号,输出宽度为12字符,宽度不足则用 * 填补
  19. cout << "5)" << showpos << fixed << setw(12) << setfill('*') << 12.1 << endl;
  20. //6)非负数不显示正号,输出宽度为12字符,宽度不足则右边用填充字符填充
  21. cout << "6)" << noshowpos << setw(12) << left << 12.1 << endl;
  22. //7)输出宽度为 12 字符,宽度不足则左边用填充字符填充
  23. cout << "7)" << setw(12) << right << 12.1 << endl;
  24. //8)宽度不足时,负号和数值分列左右,中间用填充字符填充
  25. cout << "8)" << setw(12) << internal << -12.1 << endl;
  26. cout << "9)" << 12.1 << endl;
  • 注意事项

    • 使用格式控制的时候,需要引入iomanip头文件。
    • #include <iomanip>

3. 数据类型






































类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

3.1 布尔型

  1. //布尔型(bool 类型)
  2. //bool类型只有两个取值,true和false, true表示“真”,false表示“假”。
  3. //一般用在条件判断上,例如if语句、switch语句、while语句等
  4. bool flag=true;
  5. cout<<flag; //输出1
  6. //如果需要输出true或false,需要进行转化
  7. cout<<(flag?"true":"false");

3.2 整型























































数据类型 数据类型说明符 缩写 大小 范围
整型 int int 4 -2147483648至147483647
无符号整型 unsigned int unsigned 4 0至4294967295
短整型 short int short 2 -32768至32767
无符号短整型 unsigned short int unsigned short 2 0 至 65535
长整型 long int long 4 -2147483648至147483647
长整型 long long int long long 8 -9223372036854775808至9223372036854775807
  1. //数值类型的极值与平台相关,不同平台可能不一样
  2. //获取int类型所占字节数,最大值和最小值
  3. //需要引入limits头文件,#include <limits>
  4. cout << "int数据类型 \n" << "所占字节数:\t" << sizeof(short);
  5. cout << "\n最大值:\t" << (numeric_limits<short>::max)();
  6. cout << "\n最小值:\t" << (numeric_limits<short>::min)() << endl;
  7. //整型运算时需要注意
  8. cout<<5/9; //0
  9. cout<<5.0/9; //0.555556

3.3 浮点型






























数据类型 类型说明符 大小 范 围
单精度浮点数 float 4字节 数字介于 ±3.4E-38 和 ±3.4E38 之间
双精度浮点数 double 8字节 数字介于 ±1.7E-308 和 ±1.7E308 之间
高双精度浮点数 long double 8字节 数字介于 ±1.7E-308 和 ±1.7E308 之间
  1. //浮点型

3.4 字符型

字符型只能存储一个字符,在计算机中以数字形式存储。






























数据类型 类型说明符 大小 范围
字符型 char 1 个字节 -128 到 127 或者 0 到 255
无符号字符型 unsigned char 1 个字节 0 到 255
有符号字符型 signed char 1 个字节 -128 到 127
  1. //字符型
  2. char a='a';
  3. cout<<a<<endl; //输出a
  4. cout<<a-32<<endl; //输出65,字符型参加数学运算自动转换为数字型
  5. cout<<char(a-32)<<endl; //输出A
  6. //如果是小写字母则转换为大写字母
  7. char b;
  8. cin>>b;
  9. b=(b>='a'&&b<='z')?b-32:b;
  10. cout<<b;

4. 变量和常量

4.1 变量

  • 变量是存放数据的容器。
  • 变量定义

    • 必须先定义再使用。
    • 变量定义时,系统会根据变量类型给变量开辟空间来存储数据。

    //定义变量
    //语法:数据类型 变量名;
    int a;

    //定义变量的时候赋值
    float b=3.0;

    //同时定义多个变量,但是只能同时定义同一种数据类型
    double c,d=2.12;
    bool flag;
    char a;






























数据类型 初始化默认值
int 0
char ‘\0’
float 0
double 0
pointer NULL
  1. /* 变量:全局变量和局部变量 */
  2. //1.全局变量
  3. #include <iostream>
  4. using namespace std;
  5. //全局变量声明
  6. int studentId=1;
  7. int main(){
  8. cout<<"全局变量在全局范围内有效:"<<studentId;
  9. return 0;
  10. }
  11. //2.局部变量
  12. #include <iostream>
  13. using namespace std;
  14. int main(){
  15. //局部变量声明
  16. int studentId=1;
  17. cout<<"局部变量在局部范围内有效:"<<studentId;
  18. return 0;
  19. }

4.2 常量

  • 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
  • 常量可以是任何的基本数据类型,整型、浮点型、字符、字符串和布尔值。

定义常量

  1. /* 定义常量 1. 使用#define 预处理器 2. 使用const关键字 */
  2. //1. 使用#define 预处理器
  3. #include <iostream>
  4. using namespace std;
  5. //定义常量
  6. #define PI 3.1415926
  7. int main(){
  8. float r,s;
  9. cin>>r;
  10. s=PI*r*r;
  11. cout<<s;
  12. return 0;
  13. }
  14. //2. 使用const关键字
  15. const PI=3.1415926;

5. scanf和printf输入和输出

5.1 scanf使用

  1. //--scanf("输入控制符", 输入参数);
  2. //%d 输入控制符,表示输入一个整数
  3. //&i 表示变量 i 的地址,&是取地址符
  4. scanf("%d", &i);
  5. //--scanf("非输入控制符+输入控制符", 输入参数);
  6. //尽量不用非输入控制符,因为所有的非输入控制符都要“原样输入”
  7. scanf("i = %d", &i);
  8. //--当然,也可以一次输入多个变量
  9. scanf("%d%c",&a,&b);
  • 注意事项

    • 参数的个数一定要对应
    • 输入的数据类型一定要与所需要的数据类型一致
    • 在使用 scanf 之前最好使用 printf 提示输入

5.2 printf使用⭐️

  1. /* printf 几种使用方式 直接输出字符串 输出变量 输出多个变量 混合输出字符串和变量 */
  2. //1. 输出字符串
  3. //printf("字符串\n");
  4. //\n是转义符,代表换行输出,建议使用以提高用户输入体验
  5. printf("Hello World!\n");
  6. //2. 输出变量
  7. //printf("输出控制符",输出参数);
  8. printf("%d\n", i);
  9. //3. 输出多个变量
  10. //printf("输出控制符1 输出控制符2",输出参数1,输出参数2);
  11. //printf是原样输出
  12. printf("%d %d\n", i, j);
  13. printf("i = %d, j = %d\n", i, j);
  14. //4. 混合输出字符串和变量
  15. //根据编程需要或题目需求进行输出
  16. //例如,要求输出"2018年不是闰年!",只需要原样复制到printf的头一个参数里,然后替换变量就行了。
  17. printf("%d年不是闰年!",year);

5.3 格式控制字符串详解

  1. %[flags][width][.prec][length]type
  2. //参数翻译成中文
  3. %[标志][最小宽度][.精度][类型长度]类型
  4. //type 类型,唯一的必选参数
  5. printf("%d",a);
  6. //width 最小宽度,可选
  7. printf("%10d",a);
  8. //如果实际位数超过指定宽度,按实际位数输出
  9. //如果实际位数少于指定宽度,则补空格或补零输出
  10. printf("%6d",1000); //输出: 1000
  11. printf("%06d",1000);//输出:001000
  12. //.prec 精度,可选
  13. printf("%.3f",12.3456); //输出12.346
  14. //flag 标志,可选
  15. printf("%5d %-5d\n",100,100); //默认右对齐,使用-左对齐,右边补空格
  16. printf("%+d %+d\n",1000,-1000); //输出正负号
  17. printf("% d % d\n",1000,-1000); //正号用空格替代,负号输出
  18. printf("%x %#x %o %#o\n",25,25,25,25); //十六进制、八进制输出,加#可以输出进制前缀
  19. printf("%05d\n",100); //加0,位数不足时补零
  20. //length 类型长度,可选,指明统一数据类型的不同长度

类型字符














































格式控制符 格式控制符含义
%c 单个字符
%d 十进制整数(int)
%ld 十进制整数(long)
%u 无符号十进制数(DWORD)
%f 十进制浮点数(float)
%lf 十进制浮点数(double),输出可以用%f,输入必须用%lf
%o 八进制数
%x 十六进制数(0x00000)
%s 字符串

6. 判断

6.1 if语句 ⭐️

  1. //if语句
  2. //如果执行的操作只有一句,则
  3. if(条件判断) 操作;
  4. //一般情况下,需要执行的语句换行,tab缩进比较美观。
  5. if(条件判断)
  6. 操作;
  7. //如果包括多个语句,需要加上大括号
  8. if(条件判断){
  9. 多个语句;
  10. }

Created with Raphaël 2.2.0开始条件判断操作结束yesno

  1. //判断偶数
  2. int num=12;
  3. if(num%2==0){
  4. printf("%d是个偶数",num);
  5. }

6.2 if-else语句

  1. if(条件判断){
  2. //条件判断为真
  3. 语句1;
  4. }else{
  5. //条件判断为假
  6. 语句2;
  7. }

Created with Raphaël 2.2.0开始条件判断语句1End语句2yesno

  1. //根据判断某年是不是闰年,分别输出XX年是闰年,XX年不是闰年。
  2. if(year%4==0&&year%100!=0||year%400==0)
  3. printf("%d年是闰年");
  4. else
  5. printf("%d年不是闰年");

6.3 条件表达式⭐️

  1. /* c++里提供了if-else的替代形式,条件运算符 格式如下:(条件判断)?表达式1:表达式2; 执行流程: 先进行条件判断:条件为真,执行表达式1 条件为假,执行表达式2 */
  2. (year%4==0&&year%100!=0||year%400==0)?printf("%d年是闰年"):printf("%d年不是闰年");
  3. //使用条件表达式的值
  4. //判断数字大小,if-else语句
  5. if(a > b){
  6. max = a;
  7. }else{
  8. max = b;
  9. }
  10. //判断数字大小,条件表达式
  11. max=(a>b)?a:b;
  12. //输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。
  13. ch=(ch>='A' && ch<='Z')?(ch+32):ch; //判别ch是否大写字母,是则转换
  14. //条件运算符自右向左结合
  15. a?b:c?d:e;
  16. //等同于
  17. a?b:(c?d:e);

6.4 if-else if语句

  1. //if-else if语句用来实现多分支
  2. if(表达式1){
  3. 执行代码块1
  4. }else if(表达式2){
  5. 执行代码块2
  6. }else if(表达式3){
  7. 执行代码块3
  8. }
  9. ……
  10. else{
  11. 执行代码块n;
  12. }

Created with Raphaël 2.2.0开始表达式1代码块1结束表达式2代码块2表达式3代码块3代码块nyesnoyesnoyesno

  1. /** 小玉家的电费 月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行 月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行 月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行 根据题意模拟,分成三种情况。 a<=150 a>=151 && a<=400 其他情况 */
  2. double a;//计算开double
  3. scanf("%lf",&a);//输入,注意double型用%lf
  4. if (a<=150){ //判断即可
  5. printf("%.1lf",a*0.4463);
  6. }
  7. else if (a>=151 && a<=400){
  8. printf("%.1lf",150*0.4463+(a-150)*0.4663);
  9. }
  10. else {
  11. printf("%.1lf",150*0.4463+250*0.4663+(a-400)*0.5663);
  12. }

6.5 switch语句⭐️

  1. switch (表达式){
  2. case 常量表达式1 语句1
  3. case 常量表达式2 语句2
  4. case 常量表达式n 语句n
  5. default: 语句n+1
  6. }
  • 注意事项

    • switch 后面括号内的“表达式”必须是整数类型(数值或表达式,int型或char型)。
    • switch 下的 case 和 default 必须用一对大括号{}括起来。
    • 每个 case 后面“常量表达式”的值必须互不相同。
    • break不能漏掉。

    / 输入成绩判断等级,分别为优秀、良好、中等、及格、不及格,其他情况输出“输错了” /
    int s;
    cin>>s;
    switch(s/10){

    1. case 10:
    2. case 9:
    3. cout<<"优秀";
    4. break;
    5. case 8:
    6. cout<<"良好";
    7. break;
    8. case 7:
    9. cout<<"中等";
    10. break;
    11. case 6:
    12. cout<<"及格";
    13. break;
    14. case 5:
    15. case 4:
    16. case 3:
    17. case 2:
    18. case 1:
    19. case 0:
    20. cout<<"不及格";
    21. break;
    22. default:
    23. cout<<"输错了";

    }

7. 循环

7.1 while循环⭐️

  1. //只要给定的条件为真,while 循环语句会重复执行一个目标语句。
  2. //while语句适合循环次数未知的循环
  3. while(循环条件)
  4. 循环语句;
  5. //循环体有多个语句需要加{}
  6. while(循环条件){
  7. 循环语句1;
  8. 循环语句2;
  9. }

Created with Raphaël 2.2.0开始操作循环条件循环体(可能多个语句)后续操作yesno

  • 注意事项

    • 循环体包含多个语句,应该用花括号括起来,以复合语句形式出现。
    • 在循环体中应有使循环趋向于结束的语句。
    • 千万避免死循环的发生。

    //while语句,sum=1+2+3+4+5+6+7+8+9+10
    int n=1,sum=0;
    //等价于 while(n<=10) sum+=n++;
    while(n<=10){

    1. sum=sum+n;
    2. n=n+1;

    }
    cout<<sum;

    //while语句,获取整数每个位上的数
    //例如12345,分别输出5、4、3、2、1
    int n=12345;
    while(n){

    1. cout<<n%10<<"、"; //依次输出个位、十位、百位、千位
    2. n/=10; //趋向结束循环

    }

7.2 do…while循环

  1. //do...while 循环在循环的尾部检查循环条件
  2. do{
  3. 循环语句;
  4. }while(循环条件);

Created with Raphaël 2.2.0开始操作循环体循环条件后续操作yesno

  • 注意事项

    • do…while循环无论如何都会执行一遍循环体
    • 在while语句后需要加分号

    //数字翻转,例如380翻转成38
    //old表示原来的数字,new表示翻转后的数
    int old=380;
    int new=0;
    do{

    1. new=new*10+old%10;
    2. old/=10;

    }while(old!=0);
    printf(“%d\n”,new);

7.3 for循环

  1. //语法格式
  2. for(初始表达式;测试表达式;更新表达式){
  3. //循环体
  4. }

Created with Raphaël 2.2.0开始操作初始表达式测试表达式循环体更新表达式后续操作yesno

  1. for(int i=1;i<=10;i++){
  2. printf("%d ",i);
  3. }
  4. /* 输出1 2 3 4 5 6 7 8 9 10 其中int i=1;是初始表达式,i<=10;是测试表达式,i++是更新表达式 三个表达式都可以更改,例如输出1-10里的奇数可以改成下面这样 */
  5. for(int i=1;i<=10;i+=2){
  6. printf("%d ",i);
  7. }
  8. //输出1 3 5 7 9
  • 注意事项

    • 初始表达式可以为空,也可以有多个语句
    • 更新表达式可以为空,也可以有多个语句
    • 测试表达式一般不为空,为空的时候会形成死循环

    //获取数字的位数,用不同循环方式实现
    int n=345;
    //while
    while(n>0){

    1. cout<<n%10;
    2. n/=10;

    }

    //do while
    do{

    1. cout<<n%10;

    }while(n/=10);

    //for
    for(;n>0;n/=10)

    1. cout<<n%10;

    / 根据用户输入的m(m>=1&&m<=9)、n(n>=1&&n<=6)计算结果。 如果m为1,n为5, 则计算1+12+111+1111+11111=? 如果m为2,n为4, 则计算2+22+222+2222=? /
    int m,n,i,temp=0,sum=0;
    scanf(“%d %d”,&m,&n);
    for(i=1; i<=n; i++) {

    1. temp=temp*10+m;
    2. sum+=temp;

    }
    cout<<sum;

7.4 循环的中断与跳出

1. break

跳出循环,如果有多层循环,跳出本层循环。

  1. //如果输入EOF跳出循环(windows平台下输入ctrl+z,模拟输入EOF)
  2. //否则不断获取用户输入,并且输出到屏幕上
  3. char ch;
  4. while(cin.get(ch)) {
  5. if(ch==EOF) break;
  6. cout << ch;
  7. }
  8. cout<<"return end"<<endl;

2. continue

跳出本次循环,执行下一次循环。

  1. //输出1-10里的偶数
  2. for(int i=1;i<=10;i++){
  3. if(i%2==1) continue;
  4. printf("%d",i);
  5. }

7.5 循环的嵌套

  1. /* 统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 */
  2. int l,r,temp,ans=0;
  3. scanf("%d %d",&l,&r);
  4. for(; l<=r; l++) {
  5. temp=l;
  6. while(temp>0){
  7. if(temp%10==2) ans++;
  8. temp/=10;
  9. }
  10. }
  11. printf("%d",ans);

发表评论

表情:
评论列表 (有 0 条评论,349人围观)

还没有评论,来说两句吧...

相关阅读