疫情学习第三天:C++

啊啊啊不能再熬夜了。感觉身体吃不消。
现在开始看一下C++关于数组和函数的部分

5 数组

5.1概述

数组是一个集合,里面存放了相同类型的数据元素。
1.数组中的每个元素都是相同的数据类型
2.数组放在连续的内存空间中

5.2一维数组

三种定义方法:
1.数据类型 数组名【数组长度】

int arr[5];
arr[0]=1;
arr[1]=2;
...

2.数据类型 数组名 【数组长度】={,,,,}
后面数字个数少,那么进行补零

int arr2[5]={1,2,3,4,5};
for (int i=0;i<5;i++)
{
	cout << arr2[i]<<endl;
}

利用下标进行输出
3.数据类型 数组名 【】={,,,}

int arr3[] = {9,8,7,6,5,32,42,42};//正确
int arr3[]//错误,定义数组的时候必须要有初始长度

5.2.2 一维数组数组名

数组名称的用途:
1.统计整个数组在内存中的长度 size of(arr),size of(arr[0]):第一个元素的字节(所占内存的)长度,两个数相除就获得数组中元素的个数
2.可以获取数组在内存中的
首地址arr 一般是一个十六进制的数据,代替地址编号
数组中第一个元素地址为&arr[0],和上面的是一样的位置是重合的
注意:数组名是常量,不能进行赋值的操作arr =100是错的

案例分析1,取数组元素的最大值
int arr[5] = {1,2,3,4,5};
int max = arr[0];
for (int i = 0 ;i<5;i++)
{
	if (arr[i]>max)
	{
		max = arr[i];
	}
}
cout << max << endl;
案例分析2 数组元素逆置

两个元素互换的时候要找一个临时的元素,否则元素的值就被覆盖掉了

int arr[5] = {1,2,3,4,5};
int start = 0;//起始下标
int end = sizeof(arr) / sizeof(arr[0]) -1;//结束下标
while (start < end)
{
//实现start和end的元素互换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//下标更新
start++;
end--;
}
cout<<"数组元素逆置后"<<endl;
for (int i = 0 ;i<5;i++)
{
	cout<<arr[i]<<endl;
}
冒泡排序

由低向高进行排列。
1.比较相邻的元素,如果第一个元素比第二个元素大,就交换他们两个
2.对每一对相邻元素做相同的工作,执行完毕后,找到第一个最大值
3.重复上面的步骤,直到不需要进行比较
排序的轮数元素的个数减一
每次对比的次数=元素个数-排序轮数-1

int arr[9]={4,3,1,5,6}
// 总共排序轮数为 元素个数-1
for (int i=0;i<9-1;i++)
{
    //内层循环对比 次数 = 元素个数 - 1- 当前轮数
	for(int j=0;j<9-i-1)
	{
	//如果第一个数字,比第二个数字大,交换两个数字
		if(arr[j]>arr[j+1])
		{
			int temp = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = temp;
		}
	}
}
5.3.2 二位数组数组名
int arr[2][3] = 
{
	{1,2,3},
	{4,5,6}
};

1.查看二维数组所占内存空间,2.二维数组首地址
二维数组占用内存空间为:sizeof(arr)
二维数组第一行占用内存为:sizeof(arr[0])
二维数组第一个元素占用内存为:sizeof(arr[0][0])
二维数组行数:sizeof(arr) /sizeof(arr[0])
二维数组列数:sizeof(arr[0]) /sizeof(arr[0][0])
首地址 :arr
第一行首地址:arr[0]
第二行首地址:arr[1]
第一个元素首地址:&arr[0][0]
第二个元素首地址:&arr[0][1]

int scores[3][3] = 
{
	{100,100,100},
	{90,50,100},
	{60,70,80}
};
string names[3] = {"张三","李四","王五"}
for (int i=0;i<3;i++)
{
	int sum = 0;
	for (int j=0;j<3;j++)
	{
		sum +=scores[i][j];
	}
	cout<<names[i]<<"个人的总分为:"<<sum<<endl;
}

6 函数

6.2函数的定义

返回值类型 函数名 (参数列表)
{
函数体语句
return 表达式
}
都要前面加上类型

int add(int num1,int num2)
{
	int sum = num1 + num2;
	return sum;
}

6.3 函数的调用

函数名(参数)
在调用函数的时候,实参的值会传递给形参

6.4 函数值传递

6.5 函数常见的样式

1.无参无返 2.有参无返 3. 无参有返 4.有参有返

6.6 函数的声明

函数的声明可以多次,但是函数的定义只能有一次。
可以提前告诉编译器函数的存在,可以利用函数的声明。因为函数是从上到下运行的。
声明是告诉函数存在

//下面是函数的声明
int max(int a,int b);
int main()
{
	int a=10;
	int b=20;
	cout << max(a,b)<<endl;
}
int max(int a, int b)
{
	return a>b?a:b;
}

6.7 函数分文件编写

让结构更加清晰。创建后缀名为.h的头文件,swap.h
2.创建后缀名为.cpp的源文件 swap.cpp
3.在头文件中写函数的声明,也就是在.h文件中写上函数的声明
4.在源文件中写函数的定义,也就是在cpp文件中写上函数的定义
5.在cpp文件中上面写上 #include “swap.h”
5.在头文件中加上#include < iostream>等
7.在主程序中加上#include " swap.h"

发布了24 篇原创文章 · 获赞 3 · 访问量 855

猜你喜欢

转载自blog.csdn.net/Magic_o/article/details/104106602