前言
前面讲了各种运算符的作用0基础学C++ | 第03天 | 基础知识 |算术运算符 | 赋值运算符 | 比较运算符 | 逻辑运算符-CSDN博客
一维数组
数组放在一块连续的内存空间中
每组中的每个元素都是相同数据类型
一维数组名称的用途:
1、可以统计整个数组在内存中的长度
2、可以获取数组在内存中的首地址
#include<iostream>
using namespace std;
int main()
{
//数组定义语法
//1、数据类型 数组名[数组长度];
//2、数据类型 数组名[数组长度] = {值1,值2,...};
//3、数据类型 数组名[] = {值1,值2,...};
//1、数据类型 数组名[数组长度];
int arr1[5];
arr1[0] = 1; //数组下标是从0开始索引的
arr2[1] = 2;
arr3[2] = 3;
arr4[3] = 4;
arr5[4] = 5;
//2、数据类型 数组名[数组长度] = {值1,值2,...};
int arr2[5];
arr[5] = {1,2,3,4,5};
for(i=0;i<5;i++)
{
cout << arr2[i] << endl;
}
//3、数据类型 数组名[] = {值1,值2,...};
int arr3[]={1,2,3,4,5,6} //定义数组必须要有初始长度
for(i=0;i<6;i++)
{
cout << arr3[i] << endl;
}
//通过数组名统计整个数组占用的内存
cout << "整个数组占用内存空间为:" << sizeof(arr3) << endl;
cout << "每个元素占用内存空间为:" << sizeof(arr3[0]) << endl;
cout << "数组中元素个数为:" << sizeof(arr3)/sizeof(arr3[0]) << endl;
//通过数组名查看数组名首地址
cout << "数组首地址:" << (int)arr3 << endl; //(int)arr将16进制转化为10进制
cout << "数组中第一个元素地址为:" << (int)arr3[0] << endl;
cout << "数组中第一个元素地址为:" << (int)arr3[1] << endl;
//数组名是一个常量,不能进行赋值
arr = 100; //这时候会报错
system("pause");
return 0;
}
案例练习1:五只小猪称体重,在一个数组中记录了五只小猪的体重,如:int arr[5]={300,350,200,400,250},找到并打印出最重小猪的体重。
#include<iostream>
using namespace std;
int main()
{
// 1、创建5只小猪体重的数组
int arr[5]={300,350,200,400,250};
//2、比较大小,找出最大值
int max = 0;
for(i=0;i<5;i++)
{
if(max<=arr[i])
{
max=arr[i];
}
else
max=max;
}
//3、打印最大值
cout << "最重的是:" << max <<endl;
system("pause");
return 0;
}
案例练习2:数组元素逆置,声明一个5个元素的数组,并将元素逆置。(如原始数组元素为:1,3,2,5,4;逆置后输出结果为4,5,2,3,1)
#include<iostream>
using namespace std;
int main()
{
// 1、创建数组
int arr[5]={1,3,2,5,4};
// 2、创建下标
int start = 0;
int end = sizeof(arr)/sizeof(arr[0]) - 1;
//元素互换
while(start<end)
{
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//更新下标
start++;
end--;
}
//3、打印
for(i = 0; i < 5; i++)
{
cout << "逆置后:" << arr[i] <<endl;
}
system("pause");
return 0;
}
案例练习3:冒泡排序
1、比较相邻的元素,如果第一个比第二个大,就交换他们两个
2、对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值
3、重复以上的步骤,每次比较次数-1,直到不需要比较
#include<iostream>
using namespace std;
int main()
{
// 1、冒泡排序实现升序排序
int arr[9]={4,2,8,0,5,7,1,3,9};
// 2、开始排序
//总共排序轮数为:元素个数-1
for(int i = 0; i < 9-1; i++)
{
//内循环对比 次数=元素个数-当前轮次-1
for(int j = 0; j < 9-i-1; j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j]
arr[j]=arr[j+1];
arr[j+1] = temp;
}
}
}
//3、打印
for(int c = 0; c < 9; c++)
{
cout << "逆置后:" << arr[c] <<endl;
}
system("pause");
return 0;
}
二维数组
#include<iostream>
using namespace std;
int main()
{
//二维数组定义语法
//1、数据类型 数组名[行数][列数];
//2、数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4},...};
//3、数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4,...};
//4、数据类型 数组名[ ][列数] = {数据1,数据2,数据3,数据4,...};
//1、数据类型 数组名[行数][列数];
int arr1[2][3];
arr1[0][0] = 1; //数组下标是从0开始索引的
arr2[1][2] = 2;
arr3[2][2] = 3;
//外层循环保存行数,内层循环打印列数
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 3; j++)
{
cout << arr[i][j] << endl;
}
}
//2、数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4},...};
int arr2[2][3]=
{
{1,2,3},
{4,5,6}
};
//3、数据类型 数组名[行数][列数] = {数据1,数据2,数据3,数据4,...};
int arr3[2][3]={1,2,3,4,5,6} //定义数组必须要有初始长度
//4、数据类型 数组名[ ][列数] = {数据1,数据2,数据3,数据4,...};
int arr4[][3]={1,2,3,4,5,6} //可以省略行数,但不可以省略列数
//通过数组名统计整个数组占用的内存
cout << "二维数组占用内存空间为:" << sizeof(arr4) << endl; //24 6*4=24,
cout << "二维数组第一行占用内存空间为:" << sizeof(arr4[0]) << endl; //12
cout << "二维数组中第一个元素个占用内存为:" << sizeof(arr4[0][0]) << endl; //4
cout << "二维数组的行数为:" << sizeof(arr4)/sizeof(arr4[0]) << endl; //2
cout << "二维数组的列数为:" << sizeof(arr4[0])/sizeof(arr4[0][0]) << endl; //3 一行的内存空间/每一个元素所占的内存空间
//通过数组名查看数组名首地址
cout << "二维数组首地址:" << (int)arr3 << endl; //(int)arr将16进制转化为10进制
cout << "数组中第一行首地址为:" << (int)arr3[0] << endl;
cout << "数组中第二行首地址为:" << (int)arr3[1] << endl; //第一行和第二行相差12个
//数组名是一个常量,不能进行赋值
arr3 = 100; //这时候会报错
system("pause");
return 0;
}
案例练习4:考试成绩统计,案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表所示,请分别输出三名同学的总成绩
语文 数学 英语 张三 100 100 100 李四 90 50 100 王五 60 70 80
#include<iostream>
using namespace std;
#include<string>
int main()
{
//创建二维数组
int score[3][3]=
{
{100,100,100},
{90,50,100},
{60,70,80}
}
string name[3]={"张三","李四","王五"};
//统计每个人的总和分数
for(int i = 0;i < 3; i++)
{
int sum = 0; //统计总和变量
for(int j = 0; j < 3; j++)
{
sum =+score[i][j]
}
cout << name[i]<< i+1 << "的总成绩为:" << sum << endl;
}
system("pause");
return 0;
}