码迷,mamicode.com
首页 > 编程语言 > 详细

002 数组

时间:2020-07-07 20:29:07      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:控制   外链   头文件   包含   最大   int start   ota   个学生   转换   

所谓数组,就是一个集合,里面存放了相同类型的数据元素

特点1:数组中的每个元素都是相同的数据类型

特点2:数组是由连续的内存位置组成的

注意:

数组名是一个常量,是不可以进行赋值操作的

例1:

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 10, 20, 30, 40, 50 };	
	arr = 100;		// 报错“表达式必须是可修改的左值”

	system("pause");
	return 0;
}

一维数组

一维数组的三种定义方式:

方式一:

数据类型 数组名[ 数组长度 ];

例1:

#include <iostream>
using namespace std;

int main() {
	int arr[5];			// 定义一个数组,指定数组长度
	arr[0] = 10;		// 给数组赋值
	arr[1] = 20;
	arr[2] = 30;
	arr[3] = 40;
	arr[4] = 50;

	for (int i = 0; i < 5; i++)
	{
		cout << arr[i] << endl;
	}

	system("pause");
	return 0;
}

方式二:

数据类型 数组名 [ 数组长度 ] = {值1, 值2,...};

例1:

#include <iostream>
using namespace std;

int main() {
	int arr[5] = { 10, 20, 30 };	// 定义一个数组,指定数组长度,并赋值,没有赋值的元素默认为0
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i] << endl;
	}

	system("pause");
	return 0;
}

方式三:

数据类型 数组名 [ ] = {值1, 值2, ...}

例1:

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 10, 20, 30, 40, 50 };		// 按给定的值的给树,自动推断数组长度
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i] << endl;
	}

	system("pause");
	return 0;
}

一维数组名的用途

  1. 可以统计整个数组在内存中的长度

  2. 可以获取数组在内存中的首地址

例1:

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 10, 20, 30, 40, 50 };	
	int lenth = sizeof(arr);			// 获取整个数组的长度
	int pre_len = sizeof(arr[0]);		// 获取数组中元素的长度
	cout << "数组arr的长度为:" << lenth / pre_len << endl;	// 获取数组的长度
	for (int i = 0; i < (lenth / pre_len); i++)		// 获取数组长度,进行循环打印数组的值
	{
		cout << arr[i] << endl;
	}

	system("pause");
	return 0;
}

例2:

&符号可以取出变量的内存地址

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 10, 20, 30, 40, 50 };	
	cout << "数组的地址为:" << arr << " 转换为十进制是:" << int(&arr) << endl;
	cout << "数组第一个元素的地址为:" << &arr[0] << " 转换为十进制是:" << int(&arr[0]) << endl;
	cout << "数组第二个元素的地址为:" << &arr[1] << " 转换为十进制是:" << int(&arr[1]) << endl;
	cout << "数组第三个元素的地址为:" << &arr[2] << " 转换为十进制是:" << int(&arr[2]) << endl;

	system("pause");
	return 0;
}

例3:

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 300, 200,400, 280, 350 };
	int max = 0;
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
	{
		if (max < arr[i])
		{
			max = arr[i];
		}
	}
	cout << "最大的是:" << max << endl;

	system("pause");
	return 0;
}

例4:

将一个字典逆序,并打印出来

#include <iostream>
using namespace std;

int main() {
	int arr[] = { 300, 200,400, 280, 350 };
	int temp;			// 创建临时变量存储交换的值
	int start = 0;		// 开始位置
	int arr_len = sizeof(arr) / sizeof(arr[0]);	// 数组长度
	int end = arr_len - 1;		// 结束位置

	cout << "逆序前:";
	for (int i = 0; i < arr_len; i++)
	{
		cout << arr[i] << ",";
	}

	while (start < end)
	{
		temp = arr[start];
		arr[start] = arr[end];
		arr[end] = temp;
		start++;
		end--;
	}
	cout << "逆序后:";
	for (int i = 0; i < arr_len; i++)
	{
		cout << arr[i] << ",";
	}

	system("pause");
	return 0;
}

例4:

#include <iostream>
using namespace std;

int main() {
	int arr[] = {5, 4, 8, 7, 2, 1, 3, 9, 6 };
	cout << "排序前为:";
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]));i++)
	{
		cout << arr[i] << " ";
	}

	// 进行冒泡排序
	// 控制排序的轮数
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])) - 1; i++)
	{
		// 控制每次比较的数的个数
		for (int j = 0; j < (sizeof(arr) / sizeof(arr[0])) - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp;
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	
	cout << endl;
	cout << "排序后为:";
	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
	{
		cout << arr[i] << " ";
	}

	system("pause");
	return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wcd2Lgwi-1594117085191)(C:\Users\PC\AppData\Roaming\Typora\typora-user-images\image-20200707105345354.png)]

二维数组

二维数组的四种定义方式:

方式一:

语法:

数据类型 数组名 [ 行数 ] [ 列数 ] ;

方式二:

语法:

数据类型 数组名 [ 行数 ] [ 列数 ] = { { 数据1, 数据2 }, { 数据3, 数据4 } };

方式三:

语法:

数据类型 数组名 [ 行数 ] [ 列数 ] = { 数据1, 数据2, 数据3, 数据4 };

方式四:

语法:

数据类型 数组名 [ ] [ 列数 ] = { 数据1, 数据2, 数据3, 数据4 };

建议使用第二种:更加直观,提高代码的可读性

二维数组名的用途

  1. 可以统计整个数组在内存中的长度

  2. 可以获取数组在内存中的首地址

例1:

#include <iostream>
using namespace std;

int main() {
	int arr[2][3] = { 
		{1, 2, 3},
		{4, 5, 6}
	};
	cout << "数组的长度为:" << sizeof(arr) << endl;

	system("pause");
	return 0;
}

例2:

计算数组是几行几列的数组

#include <iostream>
using namespace std;

int main() {
	int arr[2][3] = { 
		{1, 2, 3},
		{4, 5, 6}
	};
	int total_length = sizeof(arr);		 // 获取数组的总长度
	int row_length = sizeof(arr[0]);	 // 获取行的总长度
	int col_length = sizeof(arr[0][0]);  // 获取单个列的长度

	cout << "行数为:" << total_length / row_length << endl;
	cout << "列数为:" << row_length / col_length << endl;

	system("pause");
	return 0;
}

例3:分别获取数组的地址,第一行的地址,第一个值的地址

#include <iostream>
using namespace std;

int main() {
	int arr[2][3] = { 
		{1, 2, 3},
		{4, 5, 6}
	};
	cout << "数组地址是:" << int(arr) << endl;
	cout << "第一行地址:" << int(arr[0]) << endl;
	cout << "第一个值的地址:" << int(&arr[0][0]) << endl;

	system("pause");
	return 0;
}

例4:

统计一个学生的总成绩

#include <iostream>
using namespace std;
#include <string>			// 使用字符串要包含头文件string

int main() {
	int scores[3][3] = { 
		{100, 90, 83},
		{74, 95, 86},
		{99, 100, 100}
	};
	string names[3] = { "张三", "李四", "王五" };	// 学生姓名更分数数组一一对应

	for (int i = 0; i < sizeof(scores) / sizeof(scores[0]); i++)
	{
		int sum = 0;	// 定义总成绩
		for (int j = 0; j < sizeof(scores[0]) / sizeof(scores[0][0]); j++)
		{
			sum += scores[i][j];		// 累加成绩
		}
		cout << names[i] << "的总成绩是:" << sum << endl;
	}

	system("pause");
	return 0;
}

002 数组

标签:控制   外链   头文件   包含   最大   int start   ota   个学生   转换   

原文地址:https://www.cnblogs.com/zcf-blog/p/13262429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!