【C++基础语法 9】 ——数组[一维数组 / 二维数组]

9. 数组

9.1 概述

数组是存储同一种数据类型多个元素的集合

数组的特点:

  1. 数组中每个数据元素都是相同的数据类型
  2. 数组是由连续的内存位置组成的

9.2 一维数组

9.2.1 一维数组 定义方式

  1. 数据类型 数组名[数组长度];
  1. 数据类型 数组名[数组长度]={值1,值2,…};
  1. 数据类型 数组名[ ]={值1,值2,…};
//1.数据类型 数组名[数组长度];
int arr[20];
//利用下标赋值
arr[0]=100;
//利用下标输出
cout<<arr[0]<<endl;

//2.数据类型 数组名[数组长度]={值1,值2,...};  如果{}内不足5个数据,剩余用0补全
int arr[5]={1,2,3,4,5};

//3.数据类型 数组名[ ]={值1,值2,...};
int arr[]={1,2,3,4,5};

– 数组名的命名规范与变量名命名规范一致
– 数组中的下标是从0开始索引


  • 访问元素
arrayName[index];
arrayName[0];
arrayName[length-1];

– index是数组的索引(下标),从0开始


  • 数组的初始化
int arr[5]={10,21,35,80};
int arr[5]{10,21,35,80};//C++ 11新增

– 只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋值给另一个数组

– 初始化数组时,提供的值可以少于数组的元素数目。如果对数组的一部分进行初始化,则编译器将其他元素设置为0;

– 如果初始化数组时 [] 内为空,c++编译器将计算元素个数;

– 列表初始化禁止缩窄转换;


9.2.2 一维数组 数组名

一维数组名的用途:

  • 可以统计整个数组在内存中的长度sizeof(arr)
  • 可以获取数组在内存中的首地址(int)arr
  • 数组中第一个元素地址为:(int)&arr[0]

9.2.3 遍历数组
//获取数组长度
int arr[4]={1,2,3,4};
int len=sizeof(arr)/sizeof(int);
//for循环
for(int i=0;i<len;i++){
  cout<<arr[i]<<endl;
}
//基于范围的for循环(c++ 11)
for(int i:arr){
  cout << i<< endl;
}

9.2.4 获取数组最值

获取数组中的最大值或最小值

int main(){
  int arr[5]={20,5,80,101,99};
  int max=arr[0];
  for(int i=1;i<sizeof(arr)/sizeof(int);i++){
    if(arr[i]>max){
      max=arr[i];
    }
  }
  cout<<max<<endl;
  return 0;
}

9.2.5 C++数组元素反转

将数组中的元素进行反转存储

eg:将[18,5,24,55,76],反转后[76,55,24,5,18]

int main(){
  int arr[5]={185245576};
  int len=sizeof(arr)/sizeof(int);
  int i=0;
  int j=len-1;
  -----------------------
  while(i<j){
    int temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
    i++;
    j--;
  }
  ------------------------
    //或者for循环
    for(int i=0,j=len-1;i<j;i++,j--){
      
    }
  return 0;
}

9.2.6 C++数组元素查找

查找指定元素第一次在数组中出现的索引[18,5,24,55,76]

int main(){
int arr[5] = { 18,5,24,55,76 };
int len = sizeof(arr) / sizeof(int);
int x = 10;
int index = -1;
for (int i = 0; i < len; i++) {
	if (arr[i] == x) {
		index = i;
		break;
	}
	else {
		continue;
	}
}
if (index == -1) {
	cout << "没找到" << endl;
}
else {
	cout << index << endl;
}
return 0;
}

9.2.7 冒泡排序

#include<iostream>
using namespace std;

int main() {
	int arr[9] = { 4,2,8,0,5,7,1,3,9 };
	int len = sizeof(arr)/sizeof(int);

	for (int i = 0; i < len-1; i++) {
		for (int j = 0; j < len - i - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}

	cout << "[";
	for (int i = 0; i < len-1; i++) {
		cout << arr[i] << ",";
	}
	cout <<arr[8] << "]" << endl;
	return 0;
}

9.2.8 二分查找

int main() {
	int arr[10] = { 10,20,30,40,50,60,70,80,90,100 };
	int index = -1;
	int low = 0;
	int high = sizeof(arr) / sizeof(arr[0]);
	int key = 40;
	while (low < high) {
		int mid = (low + high) / 2;
		if (arr[mid] < key) {
			low = mid + 1;
		}
		else if (arr[mid] > key) {
			high = mid - 1;
		}
		else {
			index = mid;
			break;
		}
	}
	if (index == -1) {
		cout << "没找到" << endl;
	}
	else {
		cout << index << endl;
	}
	return 0;
}

9.3 二维数组

9.3.1 声明二维数组

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

第二种方式更加直观,提高代码的可读性

数据类型  数组名[m][n]
m 表示二维数组有多少个一维数组,n表示每一个一维数组的元素个数
int scores[3][4]={
{98,100,62,70},
{99,97,100,70},
{67,89,52,88},
};

9.3.2 二维数组数组名

查看二维数组所占内存空间: sizeof(arr)

查看二维数组行数: sizeof(arr)/sizeof(arr[0])

------------------列数:sizeof(arr[0])/sizeof(arr[0][0])

获取二维数组首地址:arr

#include<iostream>
using namespace std;

int main() {
	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;

	//地址
	cout << "二维数组首地址" << arr << endl;
	cout << "二维数组第一行地址" << arr[0] << endl;
	cout << "二维数组第二行地址" << arr[1] << endl;

	cout << "二维数组第一个元素地址" << &arr[0][0] << endl;
	cout << "二维数组第二个元素地址" << &arr[0][1] << endl;
	return 0;
}

案例:考试成绩统计

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

#include<iostream>
using namespace std;

int main() {
	int arr[3][3] = { {100,100,100},{90,50,100},{60,70,80} };
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
		int score = 0;
		for (int j = 0; j < sizeof(arr[i]) / sizeof(arr[i][0]); j++) {
			score += arr[i][j];
		}
		cout << score << endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值