全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之一维数组
在编程的世界里,数组是一种基础且强大的数据结构,它允许我们高效地管理和操作一系列数据。接下来将深入探讨C++中的一维数组,从定义、初始化到访问和操作,全面解析这一编程基石。
一、一维数组的定义
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名,组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量,用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。
其中一维数组是最简单的数组,一维数组简而言之是一个线性集合,一维数组通过指定数据类型和数组大小来定义,定义格式如下:
数据类型 数组名[常量表达式];
或者dataType arrayName[arraySize];
其中dataType:数组中元素的数据类型,如int、float、char等;arrayName:数组的名称,用于在代码中引用;arraySize:数组的大小,即可以存储的元素数量,通常为常量或者常量表达式,但不能包含变量,也就是说,不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如本年级有100个学生,需要将所有学生的年龄存储起来,这时要定义一个存储100个整数的数组,即定义年龄的定义方式为:
int ages[100];
其中ages为数组名,数组变量ages[0],ages[1],ages[2],......a[99]分别对应100名学生的年龄值。
需要注意:
1、数组名的命名规则与变量名的命名规则一致。
2、常量表达式表示数组元素的个数。可以是常量和符号常量,但不能是变量。例如,int a[10+10],数组a的定义是合法的;int b[n],数组b的定义是非法的,n是一个变量,不是一个常量,在程序的运行过程中n的值可能会发生变化。
3、数组的下标从0开始。这意味着数组的第一个元素位于下标0的位置,第二个元素位于下标1的位置,依此类推,可以发现下标比位次小1,,因此数组下标的范围是从0到数组长度减1。如果数组的长度是n,那么有效的下标范围是0到n-1,所以ages[100]不存在,属于越界访问。
二、访问数组元素
数组必须先定义,然后使用,只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值,要想访问数组中的任何一个元素,可以通过给出的数组名称和这个元素在数组中的位置编号(即下标),即数组名[下标],这样程序可以引用这个数组中的任何一个元素。
假设定义了一个长度为10的整数数组,即int a[10],对于int a[10],其中a是一维数组的数组名,该数组有10个元素,那么这10个元素依次表示为∶a[0],a[1],a[2]a[3],a[4]a[5],a[6]a[7],a[8],a[9];如果想要访问第三个元素,那么即a[2](a为数组名,2为第三个元素的下标),注意∶a[10]不属于该数组的空间范围。
三、一维数组的初始化
一维数组的初始化的方式通常有3种:
1)、在定义数组时对全部数组元素赋予初值。例如: int a[10]={0,1,2,3,4,5,6,7,8,9};将数组元素的初值依次放在一对花括号内。经过上面的定义和初始化之后, a[0]=0, a[1]=1, a[2]=2, a[3]=3, a[4]=4, a[5]=5, a[6]=6,a[7]=7,a[8]=8,a[9]=9。
2)、可以只给一部分元素赋值。例如: int a[10]={0,1,2,3,4};定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值默认为0。
3)、在对全部数组元素赋初值时,可以不指定数组长度。例如: int a[5]={1,2,3,4,5};可以写成int a[]={1,2,3,4,5};
四、修改某元素的值
通过数组名和下标直接修改数组元素的值。
a[2]=30;//将下标为2的数组元素值修改为30
五、数组的输入与输出
在通常情况下,相同数据类型的变量比较多时,才考虑使用数组。通过我们的学习,可以看出循环和数组是一对“好兄弟”。
例如,数组下标从1开始执行,数组的输入方式如下:
int a[10];//首先定义一个长度为10的整型数组
for(int i=0;i<10;i++){//定义循环,循环量i的初始值为0,终值为9
cin>>a[i];//依次输入下标为i的元素值
}
输出与此类似:
for(int i=0;i<10;i++){
cout<<a[i]<<endl;
}
六、实战训练
阅读以下程序,写出程序运行结果。
#include<bits/stdc++.h>
using namespace std;
int main() {
int a[10],ans=0;
for(int i=0;i<10;i++){
a[i] = i;
}
ans = a[0] + a[9];
cout<<ans<<endl;
return 0;
}
问题分析,程序中首先定义一个长度为10的整型数组以及一个变量ans,并将ans初始化为0;然后使用for循环为数组a中的元素赋值,for循环变量初始值为0,终值为9,更新表达式为自增运算,循环体内执行将i的值赋值给下标为i的元素,即将0赋值给a[0],1赋值给a[1],……,9赋值给a[9],循环结束后将a[0]和a[9]的值相加,并赋值给ans,所以ans为9,最后将ans的值输出,所以程序运行结果为:9。
