IE盒子

搜索
查看: 130|回复: 0

学习笔记:C++入门

[复制链接]

3

主题

12

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-3-4 03:39:00 | 显示全部楼层 |阅读模式
本文同步发表在我的个人博客中:
<hr/>1. IDE

1.1 Visual Studio



1.2 CLion

我最后还是选择了 CLion 因为之前一直用的JetBrains公司开发的IDE工具,换成Visual Studio突然还不习惯,虽然Visual Studio是我接触的第一款IDE,但是用它来编写C++代码提示居然默认不选中,编写C#的时候都可以,网上搜索发现Visual Studio编写C++代码就是这么设计的!(黑人问号?)
当然IDE这种东西还是自己顺手就好,如果你喜欢,你完全可以用记事本来写程序。
1.2.1 CLion 运行环境

因为我安装了Visual Studio所以可以直接导入Visual Studio的运行环境。
1.2.2 中文乱码



图中的设置部分换成UTF-8,然后右下角控制台格式切换为GBK


2. 入门

2.1 Hello, World!

#include <iostream>

using namespace std;

int main() {
     cout << "Hello, World!" << endl;
     return 0;
}
2.2 控制台打印

需要引入using namespace std;,然后通过cout << XXX << endl;打印,不得不说学过高级语言后觉得这实在很难用。
虽然可以用C语言的printf()但是你如果要打印一个变量需要给出类型,比如:
#include <iostream>

int main() {
     int a = 10;
     printf("%d", a);// 必须指定类型,不然会报错
     return 0;
}
2.3 清除控制台

system("cls");
2.4 保留关键字

C++中预先保留的单词,在定义变量或者常量时候,不要用关键字


3. 数据类型

3.1 整形



3.2 浮点型

用于表示小数
浮点型变量分为两种:

  • 单精度float
  • 双精度double
两者的区别在于表示的有效数字范围不同。


一般情况下float就足够了,如果不够用再定义double。
3.3 字符

语法:char ch = 'a';

  • C和C++中字符型变量只占用1个字节。
  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元。
3.4 字符串

C风格字符串: char 变量名[] = "字符串值"
C++风格字符串: string 变量名 = "字符串值" 需要加入头文件#include<string>
3.5 布尔类型 bool


  • true --- 真(本质是1)
  • false --- 假(本质是0)
  • bool类型占1个字节大小
3.6 转义字符



4. 运算符

4.1 算术运算符



4.2 赋值运算符



4.3 比较运算符



4.4 逻辑运算符



5. 流程控制

5.1 if语句(常用)

if(条件){ 条件满足执行的语句 }


int main() {

     //选择结构-单行if语句
     //输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印

     int score = 0;
     cout << "请输入一个分数:" << endl;
     cin >> score;

     cout << "您输入的分数为: " << score << endl;

     //if语句
     //注意事项,在if判断语句后面,不要加分号
     if (score > 600) {
         cout << "我考上了一本大学!!!" << endl;
     }

     system("pause");

     return 0;
}
多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };


int main() {

     int score = 0;

     cout << "请输入考试分数:" << endl;

     cin >> score;

     if (score > 600) {
         cout << "我考上了一本大学" << endl;
     } else {
         cout << "我未考上一本大学" << endl;
     }

     system("pause");

     return 0;
}
多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}


int main() {

     int score = 0;

     cout << "请输入考试分数:" << endl;

     cin >> score;

     if (score > 600) {
         cout << "我考上了一本大学" << endl;
     } else if (score > 500) {
         cout << "我考上了二本大学" << endl;
     } else if (score > 400) {
         cout << "我考上了三本大学" << endl;
     } else {
         cout << "我未考上本科" << endl;
     }

     system("pause");

     return 0;
}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
int main() {

     int score = 0;

     cout << "请输入考试分数:" << endl;

     cin >> score;

     if (score > 600) {
         cout << "我考上了一本大学" << endl;
         if (score > 700) {
             cout << "我考上了北大" << endl;
         } else if (score > 650) {
             cout << "我考上了清华" << endl;
         } else {
             cout << "我考上了人大" << endl;
         }

     } else if (score > 500) {
         cout << "我考上了二本大学" << endl;
     } else if (score > 400) {
         cout << "我考上了三本大学" << endl;
     } else {
         cout << "我未考上本科" << endl;
     }

     system("pause");

     return 0;
}
5.2 三目运算符

语法:表达式1 ? 表达式2 :表达式3
解释:
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
int main() {

     int a = 10;
     int b = 20;
     int c = 0;

     c = a > b ? a : b;
     cout << "c = " << c << endl;

     //C++中三目运算符返回的是变量,可以继续赋值

     (a > b ? a : b) = 100;

     cout << "a = " << a << endl;
     cout << "b = " << b << endl;
     cout << "c = " << c << endl;

     system("pause");

     return 0;
}
5.3 switch语句

switch(表达式){
         
     case 结果1:执行语句;break;

     case 结果2:执行语句;break;

     ...

     default:执行语句;break;

}
5.4 循环结构

5.4.1 while循环语句(常用)

语法:while(循环条件){ 循环语句 }


int main() {

     int num = 0;
     while (num < 10) {
         cout << "num = " << num << endl;
         num++;
     }

     system("pause");

     return 0;
}
5.4.2 do...while循环语句

语法: do{ 循环语句 } while(循环条件);
注意:与while的区别在于do...while会先执行一次循环语句,再判断循环条件
int main() {

     int num = 0;

     do {
         cout << num << endl;
         num++;

     } while (num < 10);


     system("pause");

     return 0;
}
5.4.3 for循环语句(常用)

作用: 满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
int main() {

     for (int i = 0; i < 10; i++) {
         cout << i << endl;
     }

     system("pause");

     return 0;
}
5.5 跳转语句

5.5.1 break语句

break使用的时机:

  • 出现在switch条件语句中,作用是终止case并跳出switch
  • 出现在循环语句中,作用是跳出当前的循环语句
  • 出现在嵌套循环中,跳出最近的内层循环语句
5.5.2 continue语句

作用:循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
5.5.3 goto语句(慎用)

注意:在程序中不建议使用goto语句,以免造成程序流程混乱
6. 数组

所谓数组,就是一个集合,里面存放了相同类型的数据元素
6.1 一维数组


  • 数据类型 数组名[ 数组长度 ];
  • 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
  • 数据类型 数组名[ ] = { 值1,值2 ...};
int main() {

     //定义方式1
     //数据类型 数组名[元素个数];
     int score[10];

     //利用下标赋值
     score[0] = 100;
     score[1] = 99;
     score[2] = 85;

     //利用下标输出
     cout << score[0] << endl;
     cout << score[1] << endl;
     cout << score[2] << endl;


     //第二种定义方式
     //数据类型 数组名[元素个数] =  {值1,值2 ,值3 ...};
     //如果{}内不足10个数据,剩余数据用0补全
     int score2[10] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};

     //逐个输出
     //cout << score2[0] << endl;
     //cout << score2[1] << endl;

     //一个一个输出太麻烦,因此可以利用循环进行输出
     for (int i = 0; i < 10; i++) {
         cout << score2 << endl;
     }

     //定义方式3
     //数据类型 数组名[] =  {值1,值2 ,值3 ...};
     int score3[] = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};

     for (int i = 0; i < 10; i++) {
         cout << score3 << endl;
     }

     system("pause");

     return 0;
}
6.2 二维数组

二维数组定义的四种方式:

  • 数据类型 数组名[ 行数 ][ 列数 ];
  • 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
  • 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
  • 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
int main() {

     //方式1  
     //数组类型 数组名 [行数][列数]
     int arr[2][3];
     arr[0][0] = 1;
     arr[0][1] = 2;
     arr[0][2] = 3;
     arr[1][0] = 4;
     arr[1][1] = 5;
     arr[1][2] = 6;

     for (int i = 0; i < 2; i++) {
         for (int j = 0; j < 3; j++) {
             cout << arr[j] << " ";
         }
         cout << endl;
     }

     //方式2
     //数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
     int arr2[2][3] =
             {
                     {1, 2, 3},
                     {4, 5, 6}
             };

     //方式3
     //数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4  };
     int arr3[2][3] = {1, 2, 3, 4, 5, 6};

     //方式4
     //数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };
     int arr4[][3] = {1, 2, 3, 4, 5, 6};

     system("pause");

     return 0;
}
7. 函数(重要)

作用:将一段经常使用的代码封装起来,减少重复代码
一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。
7.1 定义

返回值类型 函数名 (参数列表){

        函数体语句

        return表达式

}

  • 返回值类型 :一个函数可以返回一个值。在函数定义中
  • 函数名:给函数起个名称
  • 参数列表:使用该函数时,传入的数据
  • 函数体语句:花括号内的代码,函数内需要执行的语句
  • return表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据
7.2 值传递


  • 所谓值传递,就是函数调用时实参将数值传入给形参
  • 值传递时,如果形参发生,并不会影响实参
7.3 函数的声明

作用: 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

  • 函数的声明可以多次,但是函数的定义只能有一次
7.4 分文件编写

作用:让代码结构更加清晰
函数分文件编写一般有4个步骤

  • 创建后缀名为.h的头文件
  • 创建后缀名为.cpp的源文件
  • 在头文件中写函数的声明
  • 在源文件中写函数的定义
//swap.h文件
#include<iostream>
using namespace std;

//实现两个数字交换的函数声明
void swap(int a, int b);
//swap.cpp文件
#include "swap.h"

void swap(int a, int b)
{
     int temp = a;
     a = b;
     b = temp;

     cout << "a = " << a << endl;
     cout << "b = " << b << endl;
}
//main函数文件
#include "swap.h"
int main() {

     int a = 100;
     int b = 200;
     swap(a, b);

     system("pause");

     return 0;
}
8. 指针(重要)

几乎所有的编程语言都存在着指针,但是C++中的指针真是我学过的语言中最复杂的。其它语言最多只了解一下值类型和引用类型需要理解指针,但是C++却需要操作指针。
8.1 概念

指针的作用: 可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址
指针变量定义语法: 数据类型 * 变量名;

  • 普通变量存放的是数据,指针变量存放的是地址
  • 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用
8.2 指针所占内存

所有指针类型在32位操作系统下是4个字节
8.3 空指针和野指针

空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
int main() {

     //指针变量p指向内存地址编号为0的空间
     int * p = NULL;

     //访问空指针报错
     //内存编号0 ~255为系统占用内存,不允许用户访问
     cout << *p << endl;

     system("pause");

     return 0;
}
野指针:指针变量指向非法的内存空间
int main() {

     //指针变量p指向内存地址编号为0x1100的空间
     int * p = (int *)0x1100;

     //访问野指针报错
     cout << *p << endl;

     system("pause");

     return 0;
}
空指针和野指针都不是我们申请的空间,因此不要访问。
8.4 const修饰指针

const修饰指针有三种情况

  • const修饰指针 --- 常量指针
  • const修饰常量 --- 指针常量
  • const即修饰指针,又修饰常量
9. 结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
语法:struct 结构体名 { 结构体成员列表 };
通过结构体创建变量的方式有三种:

  • struct 结构体名 变量名
  • struct 结构体名 变量名 = { 成员1值 , 成员2值...}
  • 定义结构体时顺便创建变量
9.1 指针

作用:通过指针访问结构体中的成员

  • 利用操作符 ->可以通过结构体指针访问结构体属性
10. 参考资料

视频:https://www.bilibili.com/video/BV1et411b73Z
笔记:https://github.com/AnkerLeng/Cpp-0-1-Resource
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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