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

03.数组与函数

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

一.数组

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

1.一维数组

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

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

#include 
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;  // 第二个元素的地址,和第一个元素相差4

	system("pause");
	return 0;
}

案例练习

#include 
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++) { // 排序总次数=元素个数 - 1
		for (int j = 0; j < size(arr) - i; j++) { // 每轮对比次数=元素个数-排序轮数-1
			if (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 
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 
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 
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站视频链接

你可能感兴趣的:(c++,算法)