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站视频链接