数组,是由若干同一类型的数据元素构成的有序集合。
其中,数组中所包含的元素个数称为数组的长度。根据数组的组织形式不同,数组又可以分为一位数组,二维数组,三维数组…
数组本质上是一组变量,即数组的每一个元素都是一个变量,因此在使用数组之前必须先给出数组的声明。一般形式为:
数据类型 数组名[常量表达式1][常量表达式2]…[常量表达式 D];
注意:计算机在编译程序时决定数组长度,而变量在运行程序时才会有值,因此声明数组时必须使用常量表达式指定数组在各维上的长度,而不能使用变量。
有些情况下需要根据程序运行时用户临时输入的数值来决定数组长度,这时需要用堆内存分配方式来解决这类问题。编写程序时遇到此类问题,可以先定义一个足够大的数组。
与简单变量一样,数据类型可以是 int,float 等,命名规则与简单变量的命名规则相同,中括号中的常量表达式 N 为数组的下标,必须是整型常量、符号常量或枚举常量,表示数组在第 N 维上的长度,数组的下表个数即被称作数组的维数。
一维数组即下标个数为1的数组,其声明形式为:
数据类型 数组名[常量表达式];
int size=60;
float score[size]; //这种写法是错误的,[]内必须为常量。
const int size=60;
float score[size]; //这种写法正确,使用 const 声明,size是常量
float score[] //这种写法是错误的,必须要给出数组长度
二维数组即下标个数为2的数组,其声明形式为:
数据类型 数组名[常量表达式1][常量表达式2];
60名学生三门课的成绩:float score[60][3];
二维数组可以看做一个二维表,第一个下标为行下标,第二个下标为列下标。
在声明数组的同时可为数组中的各个元素赋初值,也可以只对部分元素赋值。
数据类型 数组名[常量表达式]={初值1,初值2,…,初值 n};
(初始化列表中得到数据个数可以小于数组长度)
或
数据类型 数组名[]={初值1,初值2,…,初值 n};
int score[3]={1, 2, 3, 4, 5}; //错误
int score[2]={1, ,3}; //错误
二维数组初始化的形式为:
数据类型 数组名[行下标][列下标]={{},…,{}};
int a[3][4]={{1,2},{2,3,4,5},{5,6,7}};
int a[3][4]={{1,2},{2,3,4,5}};
初始化列表中的数据个数小于等于数组长度,各行中初始化的数据个数可以不一致。
或
数据类型 数组名[][列下标]={{},…,{}};
带初始化的二维数组的声明行下标可以省略,列下标不能省略。
例如:n名学生三门课的成绩:float score[][3]; 即可以不用声明具体要录入多少名学生的成绩,但是最多只能录入三门课的成绩。
或
数据类型 数组名[][列下标]={初值1,…,初值 n};
可省略用于表示行的内层花括号。
比如:int a[2][3]={1,2,3,4,5}; 相当于int a[2][3]={{1,2,3},{4,5}};
声明一个数组后,C++将为该数组分配一片连续的存储空间来存放数组中的元素,存储空间的大小由数据类型和长度确定。要访问数组中的元素,必须给出该元素的下标值。
对数组的访问,既可以是对数组元素的赋值,也可以是从数组中取出某个元素的值。
与声明数组不同,访问数组时下标可以是常量也可以是变量。
访问范围:0~n-1。超出范围时,C++编译不会报错,但是会导致程序运行时报错或运行结果不正确。
声明一个一维数组并为其赋值:
int main()
{
int a[5];
a[0]=2;
a[1]=4;
a[2]=6;
a[3]=8;
a[4]=10;
return 0;
}
可以看出为 a 所赋的值其实是一个等差数列,因此可以替换为:
int main()
{
int a[5];
for(int i=0;i
例题:
#include
using namespace std;
int main()
{
int a[]={6,-3,5,-1,10,25,38,1};
int max=0; //假设最大值的索引值为0
for(int i=1;ia[i]) max=max; //可以改成if(a[max]
选择排序的基本思想:对于一个包含 n 个待排序数据的集合,每一遍从中取出最小的元素并将其插入到有序序列的最后,直至所有数据都被放到有序序列中。
待排序数据和有序序列的元素个数和保持不变,因此可以采用一个数组进行存储。有序序列放在数组前面,待排序放在后面。
#include
using namespace std;
int main()
{
int a[]={35,20,-5,25};
int min;
int swap;
for(int j=0;ja[i]) min=i;
}
if(min!=j)
{
swap=a[min];
a[min]=a[j];
a[j]=swap;
}
}
cout<<"元素从小到大排列为:";
for(int i=0;i
二维数组在内存中按照先行后列的顺序线性排列,先存储第一行的元素再存储第二行的元素。
例题:
#include
using namespace std;
int main()
{
int a[][3]={{76,85,99},{54,67,90}};
for(int i=0;i
注意求取几行几列的方法,行:sizeof(a)/sizeof(a[0]),列:sizeof(a[0])/sizeof(int).
(数组维数越大,计算机访问数组所花费的时间就越多。因此在编写程序时,一般不要使用维数过大的数组,尽量使用一维数组解决。)
#include
using namespace std;
int main()
{
int a[]={76,85,99,54,67,90};
int i=2,j=3;
for(int k=0;k