[C++]03.数组与函数

news/2025/2/15 5:54:34/

03.数组与函数

  • 一.数组
    • 1.一维数组
    • 2.二维数组
  • 二.函数
    • 1.函数的定义
    • 2.函数的调用
    • 3.值传递
    • 4.函数的声明
    • 5.函数的分文件编写

一.数组

  • 数组是相同数据类型的一个结合
  • 数组是有连续的内存位置组成的

1.一维数组

  • 一维数组一共有三种定义方式:
    数据类型 数组名[数组长度];
    数据类型 数组名[数组长度] = {值1, 值2, ...};
    数据类型 数组名[] = {值1, 值2, ...};

  • 一维数组名称的用途
    可以统计整个数组在内存当中的长度sizeof(数组名)
    可以获取数组在内存中的首地址cout << 数组名<<endl;

#include <iostream>
using namespace std;int main() {int arr[5] = { 1, 2, 3, 4, 5 };// int在内存中占4字节,整个数组在内存中占20个字节cout << sizeof(arr[0]) << endl;  // 4个字节cout << sizeof(arr) << endl;  // 20个字节//数组长度除以类型长度,能得到数组的个数cout << (sizeof(arr) / sizeof(arr[0])) << endl;  // 5个元素// 直接输出数组能看到首地址cout << (int)arr << endl;  // 数组首地址cout << (int)&arr[0] << endl;  // 数组首地址cout << (int)&arr[1] << endl;  // 第二个元素的地址,和第一个元素相差4system("pause");return 0;
}

案例练习

#include <iostream>
using namespace std;int main() {//找出5只小猪中最重的一只int pigs[5] = { 415, 467, 445, 432, 413 };int max = 0;for (int i = 0; i < sizeof(pigs) / sizeof(pigs[0]); i++) {max = max > pigs[i] ? max : pigs[i]; // 擂台法}cout << "最重的小猪体重为: " << max << endl;// 将下列数组的元素逆置int arr[5] = { 1, 2, 3, 4, 5 };int start = 0;int end = size(arr) - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}// 输出for (int i = 0; i < size(arr); i++) {cout << arr[i] << "  ";}cout << endl;system("pause");return 0;
}
  • 冒泡排序
    较为常用的排序算法,对组内的元素进行排序
    1.比较相邻的元素,如果第一个比第二个大则进行交换
    2.对每一组元素做同样的工作,执行完毕后找到一个最大值
    3.重复以上步骤,每次比较的次数-1,直到不需要比较

案例:

	int arr[] = { 4, 2, 8, 0, 5, 7, 1, 3, 9, 6 };for (int i = 1; i < size(arr) - 1; i++) { // 排序总次数=元素个数 - 1for (int j = 0; j < size(arr) - i; j++) { // 每轮对比次数=元素个数-排序轮数-1if (arr[j] < arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}

2.二维数组

  • 二维数组是数组的,数组,新增了一个维度

  • 四种定义方式
    1.数据类型 数组名[行数][列数];
    2.数据类型 数组名[行数][列数] = {{数据01, ...}, {数据11, ...}, {数据nn, ...}};
    3.数据类型 数组名[行数][列数] = {数据1, 数据2, ...};
    4.数据类型 数组名[][列数] = {数据1, 数据2, ...};

  • 二位数组的名称
    查看二维数组的内存空间sizeof(二维数组名)
    查看二维数组的首地址

案例练习:

	/*|语文|数学|英语张三| 100| 99 | 98李四| 90 | 92 | 91王五| 88 | 99 | 88*/string names[3] = { "张三", "李四", "王五" };int score[3][3] = {{100, 99, 98},{90, 92, 91},{88, 99, 88}};for (int i = 0; i < size(score); i++) {int sum = 0;for (int j = 0; j < size(score[0]); j++) {sum += score[i][j];}cout << names[i] << "同学总分为: " << sum << endl;}

二.函数

  • 将一段代码封装起来,减少重复的代码, 将一个复杂程序拆分成若干个块, 每一块执行特定的功能

1.函数的定义

  • 定义一个函数一般有5个步骤
    1.返回值类型
    2.函数名
    3.参数列表
    4.函数体语句
    5.return 返回值
返回值类型 函数名 (形参列表) {函数体语句;return 返回值;
}

实现一个函数,计算两个整数相加的结果并返回

#include <iostream>
using namespace std;int addInt(int num1, int num2) {return num1 + num2;
}int main() {// 实现一个两数相加的函数cout << addInt(3, 4) << endl;system("pause");return 0;
}

2.函数的调用

  • 语法:函数名(实参列表);
#include <iostream>
using namespace std;int addInt(int num1, int num2) { // 定义函数的形参列表return num1 + num2;
}int main() {int a = 3;int b = 4;// 实现一个两数相加的函数int result = addInt(a, b); //传入的实参列表cout << result << endl;system("pause");return 0;
}

3.值传递

  • 函数调用时,实参的值会传入给形参, 但是如果传入后形参发生改变,是不会对实参造成影响的

4.函数的声明

  • 作用告诉编译器函数名称以及如何调用函数。函数的实际主体可以单独定义。
  • 函数可以被声明多次,但是函数的定义只有一次。
    作用:可以利用函数声明提前告诉这个函数的存在,这样函数卸载main函数后边也是可以的
// 声明可以有很多次
int max(int a, int b);
int max(int a, int b);
// 定义
int max(int a, int b) {return a > b ? a : b;
}

5.函数的分文件编写

  • 函数分文件编写之后,可以使代码结构更加的清晰
  • 分文件编写的四个步骤:
    1.创建后缀名为.h的头文件
    2.创建后缀名为.cpp的源文件
    3.在头文件中写函数声明
    4.在源文件中写函数定义

示例

//max.h文件
#include <iostream>
using namespace std;// 比大小函数声明
int max(int a, int b);
// max.cpp文件
#include "max.h"
// cpp文件定义函数
int max(int a, int b) {return a > b ? a : b;
}
// 在引用时只需要引用.h头文件即可
#include "max.h"int main() {int a = max(5, 6);cout << a << endl;system("pause");return 0;
}

学习笔记与课程计划
B站视频链接


http://www.ppmy.cn/news/1019719.html

相关文章

【高危】Microsoft Office Visio 远程执行代码漏洞

漏洞描述 Microsoft Office Visio 是微软公司开发的一款流程图和矢量图绘制工具。 Microsoft Office Visio 受影响版本中&#xff0c;当解析攻击者恶意制作的Visio文件时&#xff0c;攻击者可以在应用程序上下文执行任意代码。 漏洞名称Microsoft Office Visio 远程执行代码…

windos wsl2 docker unix:///var/run/docker.sock

解决方案 问题如下 rootDESKTOP-VM0J0I4:~# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?启动下docker sudo service docker startcsdn 等风来不如迎风去 htp://t.csdn.cn/Gh365

List和数组互转方法以及踩坑点

一、数组转List 1. 使用for循环逐个添加 String[] array {"A", "B", "C"}; List<String> list new ArrayList<>(); for (String element : array) {list.add(element); }2. 使用Arrays.asList(arr) String[] array {"A&q…

推荐算法知识

有志者&#xff0c;事竟成 1. 联盟的含义 2. Attention 3. Transformer 4. Learning to rank的三种方式 1. point-wise 2. pair-wise 3. list-wise 5. 推荐系统中的校准&#xff08;如保序回归等&#xff09; 6. 推荐系统中的偏差与处理&#xff08;如位置偏差等&#xff09…

ApplicationContextInitializer

目录 在何处执行&#xff1f;何时初始化&#xff1f;自己写一个ApplicationContextInitializer 那这个类的设计具体有什么作用呢&#xff1f;&#xff1f;1. DelegatingApplicationContextInitializer2. SharedMetadataReaderFactoryContextInitializer3. ContextIdApplication…

Android模板设计模式之 - 构建整个应用的BaseActivity

1. 模式介绍 模式的定义 定义一个操作中的算法的框架&#xff0c;而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模式的使用场景 1.多个子类有公有的方法&#xff0c;并且逻辑基本相同时。 2.重要、复杂的算法&#xff0c;可…

Windows 7 CDC 串口驱动,GD32

Windows 7 自带 CDC 串口类设备的驱动程序文件 usbser.sys&#xff0c;所缺的是驱动配置文件 usbser.inf 文件&#xff0c;将 Windows 10 的 usbser.inf 文件拷贝到 Windows 7&#xff0c;注释掉 SourceDisksNames 和 SourceDisksFiles 部分就可以作为 Windows 7 的 CDC 串口类…

恒运资本:股票印花税下降有什么影响?什么原因导致下降?

在进行股票教育过程中是需求收取必定的手续费的&#xff0c;比如说买卖佣钱、印花税、过户费等等。那么股票印花税下降有什么影响&#xff1f;什么原因导致下降&#xff1f;下面就由恒运资本为大家剖析&#xff1a; 股票印花税下降有什么影响&#xff1f; 1、对于企业&#xf…