1,为什么要使用数组;2,如何定义一组数组;3,如何引用一维数组;4,如何初始化一维数组;5,数组越界。

登录以参加训练计划

通过前几节的学习,我们已经可以用C++编写程序解决复杂问题了,但是当要处理的数据比较多时。我们就没办法了,比如我们输入班级50个学生的数学成绩,求班级数学成绩平均数时,如果定义50个变量来存储太麻烦了。

当我们需要把一大批具有相同性质的数据组合成一个新类型的变量时,数组就产生了,数组可以像数学中使用下标变量形式,来表示50个数,如ai可以表示a1,a2,a3。。。a50

在C++中,我们通过在变量名后面加[]来表示数组变量。代码一般是这样的:

#include<iostream>
using namespace std;
int tot,a[55];
int main(){
  for(int i=1;i<=50;i++){
    cin>>a[i];
    tot+=a[i];
  }
  double  ave = tot/50;
  cout<<ave<<endl;
  return 0;
}


1、数组定义:

当数组中每个元素只有一个下标时,我们称这样的数组为一维数组。

数组定义的格式如下:

类型标识符 数组名[常量表达式]

注意 (1). 数组名的命名规则与变量名命名规则一致。

(2). 常量表达式表示数组元素的个数。可以是常量和符号常量,但不能是变量

(3). 数组的下标默认是从0开始,比如a[0]。

int a[100]; char b[1000]; bool c[1000];

数组定义时候用到常量,不可以用变量。

定义时候可能通过中括号给数组赋初值。

int a[] = {1,2,3,4,5,6};

这个定义方式,我们可以不写数组的大小。系统自定给大小。此时数组的默认大小是6个。

数组一但定义后,不可以后期在更改大小。

如果需要建立动态数组,即根据实际情况开相应大小的数组,会在后面的STL章节学到vector时详细介绍。


2,下标

通过给出数组的名称和元素在数组中的位置编号(即下标),我们可以引用这个数组中的任何一个元素。 一维数组元素的引用格式: 数组名[下标]

const int n=10;
int a[n];
a[5]
a[i+j];
a[i++];

说明: (1)引用数组元素时,下标可以是整型表达式,表达式里也可以包含变量或者函数调用。引用时,下标值应在数组定义的下标值范围内。 (2)赋值时只能逐个引用数组元素,不能一次引用整个数组。 例如: int a[100],b[100];a=b;//这样写就是非法的。 (3)数组元素可以像同类型的普通变量那样使用,对其进行赋值和运算操作,和普通变量完全相同。 例如: c[10]=34;//实现了给c[100]赋值为34;

数组下标从0开始到n-1。 总共有n个变量的位置。注意a[n]不属于该数组的空间范围。一旦定义一个数组,C++编译程序会为所定义的数组在内存空间开辟一串连续的存储单元。

3,数组初始化:

在全局变量当中默认的数组内容是0。因此如果数组变量的定义语句放在main函数外面。默认为0;

如果在主函数内部定义,可以通过初始化的函数进行赋值。

memset(a,0,sizeof(a));

上述代码中,a 是数组名字。

memset在<string.h>头文件当中。//这C语言的标准库,C++中需要引入<cstring>

猜一猜下面五种数组初始化的运行结果:

#include<iostream>
using namespace std;
int a[5];
int main(){
  for(int i=0;i<5;i++){
    cout<<a[i]<<" ";
  }
  return 0;

}
#include<iostream>
using namespace std;
int main(){
  int a[5];
  for(int i=0;i<5;i++){
    cout<<a[i]<<" ";
  }
  return 0;

}
#include<iostream>
using namespace std;
int main(){
  int a[5]={};
  for(int i=0;i<5;i++){
    cout<<a[i]<<" ";
  }
  return 0;

}
#include<iostream>
using namespace std;
int main(){
  int a[5]={1,2};
  for(int i=0;i<5;i++){
    cout<<a[i]<<" ";
  }
  return 0;

}
#include<iostream>
#include<cstring>
using namespace std;
int main(){
  int a[5];
  memset(a,0,sizeof(a));
  for(int i=0;i<5;i++){
    cout<<a[i]<<" ";
  }
  return 0;

}

4,数组大小

在默认情况下在主函数当中数组一般可以开到1e6(计算机中表示1后面有6个0也就是10万)左右。

如果用到的数组很大,建议开全局变量。大小可以开到3e7(3000万)左右。

5,数组越界:

如果访问数组下标,超过了数组定义的最大范围,程序会报出runtime error ,出现运行错误。一般在定义数组时,我们会多开几位空间,以免出现数组下标越界的情况。

章节 1. 新手

开放

题目 尝试 AC 难度
P295  【例50.1】陶陶摘苹果 26 7 7
P296  【例50.2】 计算书费 11 6 9
P298  练50.1 查分程序 25 9 7
P303  【例51.3】 平移数据 10 3 10
P306  练51.3 纸杯猜数 8 3 10
P308  【例52.2】 序列倒置 43 7 8
P309  练52.1 输出成绩 20 7 8
P312  【例53.1】 最大数位置 23 6 8

章节 2. 师傅

开放

题目 尝试 AC 难度
P297  【例50.3】 平衡数 2 1 10
P299  练50.2 卡牌游戏 II 33 6 8
P310  练52.2 数组间的比较大小 8 4 10
P311  练52.3 插队 15 9 7
P314  练53.1 打擂台 6 3 10
P316  【例54.1】 奇数单增序列 10 2 10
P322  练54.5 损失最小 23 1 10
P323  【例55.1】 整数奇偶排序 18 3 9

章节 3. 大神

开放

题目 尝试 AC 难度
P300  练50.3 日记第几天 9 4 9
P301  【例51.1】 删除元素 12 5 9
P302  【例51.2】 插入元素 16 5 8
P306  练51.3 纸杯猜数 8 3 10
P307  【例52.1】 不与最大数相同的数字之和 9 3 10
P313  【例53.2】 白细胞计数 0 0 (无)
P317  【例54.2】 学生组队 3 1 10
P320  练54.3 竞选总统 14 2 9
 
参加人数
11
创建人