练习~黑马程序员匠心之作-第一阶段C++基础入门-P42~P49-数组

黑马程序员匠心之作|C++教程从0到1入门编程

1、一维数组定义方式

所谓数组,就是一个集合,里面存放了相同类型的数据元素
特点1:数组中每个数据元素都是相同的数据类型
特点2:数组是由连续的内存位置组成的
一维数组的3种定义方式:
1、数据类型 数组名 [数组长度];
2、数据类型 数组名 [数组长度]={值1,值2……};
3、数据类型 数组名 []={值1,值2……};

 //1、数据类型  数组名[数组长度];
	int arr[5];
	//给数组中元素进行赋值
	//数组元素下标从0开始
	arr[0] = 10;
	arr[1] = 20;
	arr[2] = 30;
	arr[3] = 40;
	arr[4] = 50;
	//访问数组元素
	cout << arr[0] << endl;
	cout << arr[1] << endl;
	cout << arr[2] << endl;
	cout << arr[3] << endl;
	cout << arr[4] << endl;
//2、数据类型  数组名[数组长度] = { 值1,值2…… };
	int arr1[5] = { 10,20,30 };//初始化时没有全部写出。输出:10,20,30,0,0
	for (int i = 0;i < 5;i++)
	{
		cout << arr1[i] << endl;
	}
//3、数据类型  数组名[] = { 值1,值2…… };
	int arr2[] = { 10,20,30,40,50 };
	for (int i = 0;i < 5;i++)
	{
		cout << arr1[i] << endl;
	}

2、一维数组数组名

用途:
1、可以统计整个数组在内存中的长度
2、可以获取数组在内存中的首地址

    //1、可以统计整个数组在内存中的长度
    int arr[5] = { 1,2,3,4,5 };
	cout << "整个数组占用内存空间为:"<<sizeof(arr) << endl;//5个整型,20
	cout << "每个元素占用内存空间为:"<<sizeof(arr[0]) << endl;//4
	cout << "一共有元素的个数为:" << sizeof(arr)/sizeof(arr[0]) << endl;//5
    //2、可以获取数组在内存中的首地址
   int arr[5] = { 1,2,3,4,5 };
	cout << "数组的首地址为:"<<arr << endl; 
	cout << "数组中第一个元素的地址为:" <<(int)& arr[0] << endl; //一个元素加&
	cout << "数组的首地址为:" << (int)arr << endl; 

在这里插入图片描述
注意:数组名是一个常量,不可以进行赋值

3、一维数组案例—五只小猪称体重

 //一维数组案例—五只小猪称体重
	//打印最重的小猪体重
	//访问数组中每个元素,如果比我认定的大,更新最大值
	int arr[5] = { 300,350,200,400,250 };
	int max = 0;
	for (int i = 0;i < 5;i++)
	{
		if (arr[i] > max)
		{
			max = arr[i];
		}
	}
	cout <<"最重小猪体重为:"<< max << endl; //400

4、一维数组案例—元素逆置

//一维数组案例—元素逆置
	int arr[5] = { 1,2,3,4,5 };
	cout << "数组逆置前:" << endl;
	for (int i = 0;i < 5;i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	int start = 0; //起始元素下标
	int end = sizeof(arr) / sizeof(arr[0]) - 1; //元素个数-1=最后一个元素的下标
	for (;start < end;start++,end--)
	{
		int temp = arr[start];
		arr[start] = arr[end];
		arr[end] = temp;
	}
	cout << "数组逆置后:" << endl;
	for (int i = 0;i < 5;i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;

在这里插入图片描述

5、一维数组—冒泡排序

步骤:
1、比较相邻元素,如果第一个比第二个大,就交换两个
2、对每对相邻元素做同样的工作,执行完毕后,找到第一个最大值
3、重复以上步骤,每次比较次数-1,直到不需要比较
注意
1、排序总轮数=元素个数-1
2、每轮对比次数=元素个数-排序轮数-1
图示:
在这里插入图片描述

//利用冒泡排序实现升序序列
	//打印排序前顺序
	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;
	//开始冒泡排序
	int temp = 0;
	for (int i = 0;i < 9-1;i++) //排序总轮数=元素个数-1
	{
		//内层循环对比
		for (int j = 0;j < 9-i-1;j++) //每轮对比次数=元素个数-排序轮数-1
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
	//打印排序后顺序
	cout << "排序后顺序为:" << endl;
	for (int i = 0;i < 9;i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;

在这里插入图片描述

6、二维数组定义方式

二维数组的4种定义方式:
1、数据类型 数组名[行数][列数];
2、数据类型 数组名[行数][列数]={{数据1,数据2},{数据3,数据4}};
3、数据类型 数组名[行数][列数]={数据1,数据2,数据3,数据4};
4、数据类型 数组名[][列数]={数据1,数据2,数据3,数据4};
注意:列数永远不可以省略,最好的是第二种

//1、数据类型 数组名[行数][列数]
	int arr[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;
		}
	}

1
2
3
4
5
6

//2、数据类型 数组名[行数][列数] = { { 数据1,数据2 },{ 数据3,数据4 } };
	int arr1[2][3] = { 
		{1,2,3},
		{4,5,6}
	};
	for (int i = 0;i < 2;i++)
	{
		for (int j = 0;j < 3;j++)
		{
			cout << arr1[i][j] << " ";
		}
		cout << endl;
	}

1 2 3
4 5 6

//3、数据类型 数组名[行数][列数] = { 数据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;
	}

1 2 3
4 5 6

//4、数据类型 数组名[][列数] = { 数据1,数据2,数据3,数据4 };
	int arr3[][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;
	}

1 2 3
4 5 6

7、二维数组数组名称

用途:
1、查看二维数组所占内存空间
2、获取二维数组首地址

//1、查看二维数组所占内存空间大小
	double arr1[2][3] = {
		{ 1,2,3 },
		{ 4,5,6 }
	};
	cout << "二维数组所占内存空间大小为:" << sizeof(arr1) << endl; //48

	int arr[2][3] = {
		{1,2,3},
		{4,5,6}
	};
	cout <<"二维数组所占内存空间大小为:"<< sizeof(arr) << endl; //24
	cout << "二维数组第一行所占内存空间大小为:" << sizeof(arr[0]) << endl; //12
	cout << "二维数组第一个元素所占内存空间大小为:" << sizeof(arr[0][0]) << endl; //4
	//求行数与列数
	int hang;
	int lie;
	hang = sizeof(arr) / sizeof(arr[0]);
	lie = sizeof(arr[0]) / sizeof(arr[0][0]);
	cout << "二维数组行数为:" << hang << endl; //2
	cout << "二维数组列数为:" << lie << endl; //3

在这里插入图片描述

//2、获取二维数组首地址
	int arr[2][3] = {
		{ 1,2,3 },
		{ 4,5,6 }
	};
	cout << "二维数组首地址为:" << arr << endl; 
	cout << "二维数组首地址为:" << (int)arr << endl;
	cout << "二维数组第一行首地址为:" << (int)arr[0] << endl;
	cout << "二维数组第二行首地址为:" << (int)arr[1] << endl; //第一行与第二行差12字节
	cout << "二维数组第一个数据首地址为:" << (int)&arr[0][0] << endl;
	cout << "二维数组第二个数据首地址为:" << (int)&arr[0][1] << endl;//第一个与第二个差4字节

在这里插入图片描述

8、二维数组案例—考试成绩统计

考试成绩统计
有3名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩。
在这里插入图片描述

//考试成绩统计
//有3名同学(张三,李四,王五),在一次考试中的成绩分别如表,请分别输出三名同学的总成绩。
int scores[3][3] = {
		{100,100,100},
		{90,50,100},
		{60,70,80}
	};
	string names[3] = { "张三","李四","王五" }; //头文件包含#include<string>
	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 <<names[i]<< "的总分为:" << sum << endl;
	}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值