面向过程编程自学笔记整理
三、数组
1、一维数组
/*数组的特点:
1:放在一块连续的内存空间中
2:数组中的每个元素都是相同的数据类型
*/
#include"iostream"
using namespace std;
int main()
{
/************1:一维数组定义方法******************************/
/*
1:数据类型 数组名[数组长度];
2:数据类型 数组名[数组长度]={值1,值2,...};
3:数据类型 数组名[]={值1,值2,...};
*/
//1:数据类型 数组名[数组长度];
//int arr[8];
//给数组中的元素赋值
//数组元素的下标是从0开始索引的
/*arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
arr[5] = 60;
arr[6] = 70;
arr[7] = 80;*/
//访问数据元素
/*cout << arr[0] << endl;
cout << arr[1] << endl;
cout << arr[2] << endl;
cout << arr[3] << endl;
cout << arr[4] << endl;
cout << arr[5] << endl;
cout << arr[6] << endl;
cout << arr[7] << endl;*/
//2:数据类型 数组名[数组长度] = { 值1,值2,... };
//如果在初始化数据时,没有完全填完,会用0来填补剩余的数据
//int arr2[6] = {10,20,30,40,};
//cout << arr2[0] << endl;
//cout << arr2[1] << endl;
//cout << arr2[2] << endl;
//cout << arr2[3] << endl;
//cout << arr2[4] << endl;
//cout << arr2[5] << endl;
//cout << arr2[6] << endl;
//利用循环,输出数组中的元素
//for (int i = 0; i < 6; i++)
//{
// cout << arr2[i] << endl;
//}
//3:数据类型 数组名[] = { 值1,值2,... };
//不指定数组长度
//定义数组时必须要有一个初始长度
//int arr3[] = { 90,80,70,60,50,40,30,20,10};
//for (int i = 0; i < 9; i++)
//{
// cout << arr3[i] << endl;
//}
/******************2:一维数组数组名**********************************/
/*数组名用途
1:统计整个数组中的内存长度
2:数组名可以获取数组在内存中的首地址
*/
//1:统计整个数组中的内存长度
//一个int类型占用4个字节,10个元素,每一个占用4个字节,共40个字节
/*int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
cout << "整个数组占用空间为:" << sizeof(arr) << endl;
cout << "每个元素所占用的内存空间为:" << sizeof(arr[4]) << endl;
cout << "数组中元素的个数为:" << sizeof(arr) / sizeof(arr[0]) << endl;*/
//2:数组名可以获取数组在内存中的首地址
//cout << "数组名的首地址为:" <<(int)arr << endl;//16进制的强制转换为10进制显示
//cout << "数组中第一个元素的地址为:" << (int)&arr[0] << endl;//数组名前加&表示看数组中某一个元素的地址
//cout << "数组中第二个元素的地址为:" << (int)&arr[1] << endl;//数组名前加&表示看数组中某一个元素的地址
//数组名是常量,不可以进行赋值操作
//报错arr = 10;
/**************3:一维数组数案例练习一********************************/
//案例:五只小猪称体重//在数组中找到最大值
//说明:一组数组中记录了五只小猪的体重,找到并打印最重的小猪体重
//思路: 访问数组中的每个元素,如果这个数值比我的最大值要大,就更新这个最大值
//1.创建五只小猪的体重数组
//int arr[6] = {300,350,200,450,250,600};
//2.从数组中找到最大值;
//int max = 0;//先认定最大值为0
//for (int i = 0; i < 6;i++)
//{
// //cout << "五只小猪的体重依次为:" << arr[i] << endl;
// //如果访问的数组中的元素比我的最大值都要大,更新这个最大值
// if(arr[i]>max)
// {
// max = arr[i];
// }
//}
//3.打印最大值
//cout << "五只小猪中最重的小猪体重为:" << max << endl;
/*************4:一维数组数案例练习二************************/
//案例:数组元素的逆置//将数组中的元素逆向放置
//说明:如果原来的数组元素为1,3,2,5,4,逆置后输出结果为4,5,2,3,1
//1.创建一个数组
/*int arr[5] = { 1,3,2,5,4 };
cout << "数组元素逆置前的结果:" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i]<<endl ;
}*/
//2.实现逆置
//2.1 记录起始下标的位置
//2.2 记录结束下标的位置
//2.3 起始下标和结束下标元素互换
//2.4 起始位置++,结束位置--
//2.5 循环执行2.1操作,直到起始位置>=结束位置
//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.打印逆置后的数组
/*cout << "数组元素逆置后结果为:" << endl;
for (int i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}*/
/*************5:一维数组冒泡排序************************/
//作用:常用的排序算法,对数组内的元素进行排序
//1:比较相邻的元素,如果第一个比第二个大,就交换他们两个,小的在左大的在右
//2:对每一对相邻元素做同样的工作,执行完毕找到第一个最大值
//2:重复以上步骤,每次比较次数减一,直到不需要比较
//案例:利用冒泡排序实现数组元素的升序排列
int arr[9] = {4,2,8,0,5,7,1,3,9};
cout << "排序前的结果:" << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] <<" ";
}
cout << endl;
//开始冒泡排序
//排序总轮数=元素个数-1;
for (int i = 0; i <=sizeof(arr)/sizeof(arr[0])-1; i++)
{
//内层循环对比
//每轮对比次数=元素个数-排序轮数-1;
for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - i - 1; j++)
{
//如果第一个数字比第二个数字大,交换这两个数字
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//打印排序后的结果
cout << "排序后的结果为:" << endl;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
2、二维数组
#include"iostream"
using namespace std;
#include"string"
int main()
{
//二维数组的定义方式
/*
1.数据类型 数组名[行数][列数];
2.数据类型 数组名[行数][列数]={ {数据1,数据2},{数据3,数据4} };
3.数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4};
4.数据类型 数组名[ ][列数]={数据1,数据2,数据3,数据4};
*/
/************1.数据类型 数组名[行数][列数];****************************/
//int arr1[2][3];
//arr[0][0] = 1;
//arr[0][1] = 2;
//arr[0][2] = 3;
//arr[1][0] = 4;
//arr[1][1] = 5;
//arr[1][2] = 6;
//cout << arr[0][0] << endl;
//cout << arr[0][1] << endl;
//cout << arr[0][2] << endl;
//cout << arr[1][0] << endl;
//cout << arr[1][1] << endl;
//cout << arr[1][2] << endl;
//外层循环打印行数,内层循环打印列数
//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 }
//};
//for (int i = 0; i < 2; i++)//外层打印行数
//{
// for (int j = 0; j < 3; j++)//内层打印列数
// {
// cout << arr2[i][j] << " ";
// }
// cout << endl;
//}
/******3.数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4};;**************/
//int arr3[2][3] = {1,2,3,4,5,6};
//for (int i = 0; i < 2; i++)//外层打印行数
//{
// for (int j = 0; j < 3; j++)//内层打印列数
// {
// cout << arr3[i][j] << " ";
// }
// cout << endl;
//}
/******4.数据类型 数组名[ ][列数]={数据1,数据2,数据3,数据4};;**************/
//int arr4[][3] = { 1,2,3,4,5,6 };
//for (int i = 0; i < 2; i++)//外层打印行数
//{
// for (int j = 0; j < 3; j++)//内层打印列数
// {
// cout << arr4[i][j] << " ";
// }
// cout << endl;
//}
//二维数组的名称用途
/******************1.可以查看占用内存大小*************************/
/*int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
cout << "二维数组占用内存空间为:" << sizeof(arr) << endl;
cout << "二维数组第一行占用的内存空间为:" << sizeof(arr[0]) << endl;
cout << "二维数组第一个元素占用的内存空间为:" << sizeof(arr[0][0]) << endl;
cout << "二维数组的行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二维数组的列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;*/
/******************2.可以查看二维数组的首地址*************************/
//cout <<"二维数组的首地址为:"<< (long long)arr << endl;
//cout << "二维数组第一行的首地址为:" << (long long)arr[0] << endl;
//cout << "二维数组第二行的首地址为:" << (long long)arr[1] << endl;
//cout << "二维数组第一个元素的首地址为:" << (long long)&arr[0][0] << endl;//看数组中的某一个数的地址需要加上取址符&
//cout << "二维数组第二个元素的首地址为:" << (long long)&arr[0][1] << endl;
/******************3.二维数组应用实例---统计不同同学的总成绩*************************/
//成绩 语文 数学 英语
//张三 100 100 100
//李四 90 50 100
//王五 60 70 80
//1.创造二维数组,3行3列
int scores[3][3]
{
{100,100,100},
{90,50,100},
{60,70,80}
};
string names[3] = {"张三","李四","王五"};//三人姓名的一维数组
//统计考试成绩,让每行的3列相加,统计出每人的总成绩
for (int i = 0; i < 3; i++)
{
int sum = 0;//统计分数总和的变量
for (int j = 0; j < 3; j++)
{
sum += scores[i][j];
cout << scores[i][j] << " " ;
}
cout << endl;
cout <<names[i]<<"的总成绩为:" <<sum<<endl;
}
system("pause");
return 0;
}