• C++学习笔记(2)--程序流程结构、数组、函数


    目录

    一、选择结构:

    1、if语句:

    2、三目运算符:

     3、switch语句:

    二、循环结构:

    1、while循环语句

    2、do...while循环语句

    3、for循环语句

     三、数组:

    1、一维数组:

    2、冒泡排序:

    2、 二维数组:

    四、函数:

    1、函数的定义:

    2、 函数的调用

    3、值传递与地址传递:

    5、函数的声明

    6、分文件书写函数:


    一、选择结构:

    1、if语句:

    作用:执行满足条件的语句。分为下面三种形式:

    • 单行格式if语句

    • 多行格式if语句

    • 多条件的if语句

    1. int main() {
    2. //选择结构-单行if语句
    3. int score = 200;
    4. //if语句
    5. //注意事项,在if判断语句后面,不要加分号
    6. if (score > 600)
    7. {
    8. cout << "我考上了一本大学!!!" << endl;
    9. }
    10. //多行格式if语句
    11. if (score > 600)
    12. {
    13. cout << "我考上了一本大学" << endl;
    14. }
    15. else
    16. {
    17. cout << "我未考上一本大学" << endl;
    18. }
    19. //多条件if语句:
    20. if (score > 600)
    21. {
    22. cout << "我考上了一本大学" << endl;
    23. }
    24. else if (score > 500)
    25. {
    26. cout << "我考上了二本大学" << endl;
    27. }
    28. else if (score > 400)
    29. {
    30. cout << "我考上了三本大学" << endl;
    31. }
    32. else
    33. {
    34. cout << "我未考上本科" << endl;
    35. }
    36. system("pause");
    37. return 0;
    38. }

    同时C++也支持空if体,但是要加分号;

    1. int main()
    2. {
    3. if (1 > 0);
    4. system("pause");
    5. return 0;
    6. }

    2、三目运算符

    作用: 通过三目运算符实现简单的判断

    语法:表达式1 ? 表达式2 :表达式3

    1. int main() {
    2. int a = 10;
    3. int b = 20;
    4. int c = 0;
    5. c = a > b ? a : b;
    6. cout << "c = " << c << endl; //20
    7. //C++中三目运算符返回的是变量,可以继续赋值
    8. (a > b ? a : b) = 100;
    9. cout << "a = " << a << endl; //10
    10. cout << "b = " << b << endl; //100
    11. cout << "c = " << c << endl; //20
    12. system("pause");
    13. return 0;
    14. }

     3、switch语句:

    作用:执行多条件分支语句

    语法:

    1. switch(表达式)
    2. {
    3. case 结果1:执行语句;break;
    4. case 结果2:执行语句;break;
    5. ...
    6. default:执行语句;break;
    7. }

    注意1:switch语句中表达式类型只能是整型或者字符型

    注意2:case里如果没有break,那么程序会一直向下执行

    总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间

    1. nt main() {
    2. //请给电影评分
    3. //10 ~ 9 经典
    4. // 8 ~ 7 非常好
    5. // 6 ~ 5 一般
    6. // 5分以下 烂片
    7. int score = 0;
    8. cout << "请给电影打分" << endl;
    9. cin >> score;
    10. switch (score)
    11. {
    12. case 10:
    13. case 9:
    14. cout << "经典" << endl;
    15. break;
    16. case 8:
    17. cout << "非常好" << endl;
    18. break;
    19. case 7:
    20. case 6:
    21. cout << "一般" << endl;
    22. break;
    23. default:
    24. cout << "烂片" << endl;
    25. break;
    26. }
    27. system("pause");
    28. return 0;
    29. }

    二、循环结构:

    1、while循环语句

    作用:满足循环条件,执行循环语句

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

    解释:==只要循环条件的结果为真,就执行循环语句==

    1. int main() {
    2. int num = 0;
    3. while (num < 10)
    4. {
    5. cout << "num = " << num << endl;
    6. num++;
    7. }
    8. system("pause");
    9. return 0;
    10. }

    2、do...while循环语句

    作用: 满足循环条件,执行循环语句

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

    注意:与while的区别在于,do...while会先执行一次do内的语句,然后再去判断循环体条件是否满足,然后再次决定是否进入循环体,do语句只会被执行一次。

    1. int main() {
    2. int num = 0;
    3. do
    4. {
    5. cout << num << endl;
    6. num++;
    7. } while (num < 10);
    8. system("pause");
    9. return 0;
    10. }

    3、for循环语句

    作用: 满足循环条件,执行循环语句

    语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }

    注意:for循环中的表达式,要用分号进行分隔  

    1. int main() {
    2. for (int i = 0; i < 10; i++)
    3. {
    4. cout << i << endl;
    5. }
    6. system("pause");
    7. return 0;
    8. }

     三、数组:

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

    特点1:数组中的每个数据元素都是相同的数据类型

    特点2:数组是由连续的内存位置组成的

    1、一维数组:

    一维数组定义的三种方式:

    1. 数据类型 数组名[ 数组长度 ];

    2. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};

    3. 数据类型 数组名[ ] = { 值1,值2 ...};

    1. int main() {
    2. //定义方式1
    3. //数据类型 数组名[元素个数];
    4. int score[10];
    5. //利用下标赋值
    6. score[0] = 100;
    7. score[1] = 99;
    8. score[2] = 85;
    9. //利用下标输出
    10. cout << score[0] << endl;
    11. cout << score[1] << endl;
    12. cout << score[2] << endl;
    13. //第二种定义方式
    14. //数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};
    15. //如果{}内不足10个数据,剩余数据用0补全
    16. int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
    17. //逐个输出
    18. //cout << score2[0] << endl;
    19. //cout << score2[1] << endl;
    20. //一个一个输出太麻烦,因此可以利用循环进行输出
    21. for (int i = 0; i < 10; i++)
    22. {
    23. cout << score2[i] << endl;
    24. }
    25. //定义方式3
    26. //数据类型 数组名[] = {值1,值2 ,值3 ...};
    27. int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
    28. for (int i = 0; i < 10; i++)
    29. {
    30. cout << score3[i] << endl;
    31. }
    32. system("pause");
    33. return 0;
    34. }

    一维数组名称的用途:

    1. 可以统计整个数组在内存中的长度

    2. 可以获取数组在内存中的首地址

    3. 数组名是常量,不可以赋值

    4. 直接打印数组名,可以查看数组所占内存的首地址

    5. 对数组名进行sizeof,可以获取整个数组占内存空间的大小

    1. int main() {
    2. //数组名用途
    3. //1、可以获取整个数组占用内存空间大小
    4. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    5. cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
    6. cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
    7. cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
    8. //2、可以通过数组名获取到数组首地址
    9. cout << "数组首地址为: " << (int)arr << endl; //也就是arr[0]的地址
    10. cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
    11. cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;
    12. //arr = 100; 错误,数组名是常量,因此不可以赋值
    13. system("pause");
    14. return 0;
    15. }

    2、冒泡排序:

    作用: 最常用的排序算法,对数组内元素进行排序

    1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

    2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。

    3. 重复以上的步骤,每次比较次数-1,直到不需要比较

    1. int main() {
    2. int arr[9] = { 4,2,8,0,5,7,1,3,9 };
    3. int len = sizeof(arr) / sizeof(arr[0]);
    4. for (int i = 0; i < len - 1; i++)
    5. {
    6. for (int j = 0; j < len - 1 - i; j++)
    7. {
    8. if (arr[j] > arr[j + 1])
    9. {
    10. int temp = arr[j];
    11. arr[j] = arr[j + 1];
    12. arr[j + 1] = temp;
    13. }
    14. }
    15. }
    16. //打印数据
    17. for (int i = 0; i < 9; i++)
    18. {
    19. cout << arr[i] << endl;
    20. }
    21. system("pause");
    22. return 0;
    23. }

    2、 二维数组:

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

    1. 数据类型 数组名[ 行数 ][ 列数 ];

    2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };

    3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};

    4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

    定义二维数组时,如果初始化了数据,可以省略行数,无论哪种定义方式都必须写清列

    1. int main() {
    2. //方式1
    3. //数组类型 数组名 [行数][列数]
    4. int arr[2][3];
    5. arr[0][0] = 1;
    6. arr[0][1] = 2;
    7. arr[0][2] = 3;
    8. arr[1][0] = 4;
    9. arr[1][1] = 5;
    10. arr[1][2] = 6;
    11. for (int i = 0; i < 2; i++)
    12. {
    13. for (int j = 0; j < 3; j++)
    14. {
    15. cout << arr[i][j] << " ";
    16. }
    17. cout << endl;
    18. }
    19. //方式2
    20. //数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
    21. int arr2[2][3] =
    22. {
    23. {1,2,3},
    24. {4,5,6}
    25. };
    26. //方式3
    27. //数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4 };
    28. int arr3[2][3] = { 1,2,3,4,5,6 };
    29. //方式4
    30. //数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4 };
    31. int arr4[][3] = { 1,2,3,4,5,6 };
    32. system("pause");
    33. return 0;
    34. }

    二维数组数组名

    • 查看二维数组所占内存空间

    • 获取二维数组首地址

    1. int main() {
    2. //二维数组数组名
    3. int arr[2][3] =
    4. {
    5. {1,2,3},
    6. {4,5,6}
    7. };
    8. cout << "二维数组大小: " << sizeof(arr) << endl;
    9. cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;
    10. cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;
    11. cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
    12. cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
    13. //地址
    14. cout << "二维数组首地址:" << arr << endl;
    15. cout << "二维数组第一行地址:" << arr[0] << endl;
    16. cout << "二维数组第二行地址:" << arr[1] << endl;
    17. cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
    18. cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
    19. system("pause");
    20. return 0;
    21. }

    四、函数:

    1、函数的定义:

    1、返回值类型:一个函数可以返回一个值。在函数定义中

    2、函数名:给函数起个名称

    3、参数表列:使用该函数时,传入的数据

    4、函数体语句:花括号内的代码,函数内需要执行的语句

    5、return 表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据

    语法:

    1. 返回值类型 函数名 (参数列表)
    2. {
    3. 函数体语句
    4. return表达式
    5. }
    6. //函数定义
    7. int add(int num1, int num2)
    8. {
    9. int sum = num1 + num2;
    10. return sum;
    11. }

    2、 函数的调用

    功能:使用定义好的函数

    语法:函数名(参数)

    示例:

    1. //函数定义
    2. int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参
    3. {
    4. int sum = num1 + num2;
    5. return sum;
    6. }
    7. int main() {
    8. int a = 10;
    9. int b = 10;
    10. //调用add函数
    11. int sum = add(a, b);//调用时的a,b称为实际参数,简称实参
    12. cout << "sum = " << sum << endl;
    13. system("pause");
    14. return 0;
    15. }

      3、值传递与地址传递:

    1、值传递:

    • 所谓值传递,就是函数调用时实参将数值传入给形参

    • 值传递时,如果形参发生,并不会影响实参

    2、地址传递:

    • 所谓地址传递,就是函数调用时实参将实参地址传入给形参

    • 地址传递时,如果形参发生,实参也跟着变化

    1. #include
    2. using namespace std;
    3. #pragma warning(disable:4996)
    4. void swap(int num1, int num2)
    5. {
    6. num1 = 20;
    7. num2 = 10;
    8. }
    9. void swap_address(int &num1, int &num2) {
    10. num1 = 20;
    11. num2 = 10;
    12. }
    13. int main() {
    14. int a = 10;
    15. int b = 20;
    16. swap(a, b);
    17. cout << "mian中的 a = " << a << endl; //10
    18. cout << "mian中的 b = " << b << endl; //20
    19. swap_address(a, b);
    20. cout << "mian中的 a = " << a << endl; //20
    21. cout << "mian中的 b = " << b << endl; //10
    22. system("pause");
    23. return 0;
    24. }

    4、函数的常见样式

    1、无参无返  2、有参无返

    3、无参有返  3、有参有返

    1. //函数常见样式
    2. //1、 无参无返
    3. void test01()
    4. {
    5. //void a = 10; //无类型不可以创建变量,原因无法分配内存
    6. cout << "this is test01" << endl;
    7. //test01(); 函数调用
    8. }
    9. //2、 有参无返
    10. void test02(int a)
    11. {
    12. cout << "this is test02" << endl;
    13. cout << "a = " << a << endl;
    14. }
    15. //3、无参有返
    16. int test03()
    17. {
    18. cout << "this is test03 " << endl;
    19. return 10;
    20. }
    21. //4、有参有返
    22. int test04(int a, int b)
    23. {
    24. cout << "this is test04 " << endl;
    25. int sum = a + b;
    26. return sum;
    27. }

    5、函数的声明

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

    • 函数的声明可以多次,但是函数的定义只能有一次

    示例:

    1. //声明可以多次,定义只能一次
    2. //声明
    3. int max(int a, int b);
    4. int max(int a, int b);
    5. //定义
    6. int max(int a, int b)
    7. {
    8. return a > b ? a : b;
    9. }
    10. int main() {
    11. int a = 100;
    12. int b = 200;
    13. cout << max(a, b) << endl;
    14. system("pause");
    15. return 0;
    16. }

    6、分文件书写函数:

    作用:让代码结构更加清晰,编写一般有4个步骤:

    1. 创建后缀名为.h的头文件

    2. 创建后缀名为.cpp的源文件

    3. 在头文件中写函数的声明

    4. 在源文件中写函数的定义

    三个文件,第一个 .h 文件用于声明函数。第二个 .cpp 文件用于定义函数体。 第三个main函数文件用于使用。

    示例:

    1. //swap.h文件
    2. #include
    3. using namespace std;
    4. //实现两个数字交换的函数声明
    5. void swap(int a, int b);
    1. //swap.cpp文件
    2. #include "swap.h"
    3. void swap(int a, int b)
    4. {
    5. int temp = a;
    6. a = b;
    7. b = temp;
    8. cout << "a = " << a << endl;
    9. cout << "b = " << b << endl;
    10. }
    1. //main函数文件
    2. #include "swap.h"
    3. int main() {
    4. int a = 100;
    5. int b = 200;
    6. swap(a, b);
    7. system("pause");
    8. return 0;
    9. }
  • 相关阅读:
    mysql按照周统计数据
    Spring - ApplicationContextAwareProcessor扩展接口
    输电线路巡视无人机故障坠落防护装置:守护飞行安全的防线
    分享107个小清新ppt模板,总有一款适合您
    【老生谈算法】matlab实现聚类分析源码——聚类分析
    [附源码]java毕业设计西柚网购物系统
    《Go 语言核心 36 讲》学习笔记
    xss-labs靶场1-5关
    Java 泛型类型简单了解
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter20-正则表达式
  • 原文地址:https://blog.csdn.net/weixin_60414376/article/details/126823191