C++自学笔记小记(三)(黑马)

面向过程编程自学笔记整理

三、数组

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值