数组是具有相同属性的一组数据的总称。一个一维数组就相当于一个单行表格,我们称数组的一个“格子”为一个元素,每个数组元素都有唯一的编号,这个编号通常被称为下标。
一、一维数组的定义
定义格式如下: 类型名数组名[常量表达式];例如:int a[10];
说明:
(1)类型名是指数组元素的类型,它可以是任何类型,同一个数组中的元素具有相同类型。因此我们可以说,数组是由固定数量的相同类型的元素组成。上面例子中int说明这个数组的类型是整数类型。
(2)数组名必须是标识符,而数组元素的个数由常量表达式决定,这个值必须是正整数常量表达式,不能是变量或含有变量的表达式。上面例子中a是这个数组的数组名,[10]是这个数组元素的个数。
(3)数组元素的个数由常量表达式决定,数组下标从0开始。因此,如果你定义了一个含有n个元素的数组变量,只能够从0引用到n-1。例如int a[10];这个数组的下标为0~9,其元素分别为a[0]、[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。C++不检查数组下标是否越界!如果下标越界,程序会崩溃!
(4)定义一维数组元素可以直接赋初始值,如int a[5]=(10,20,30,40,50]则他们的值为a[0]是10、a[1]是20,a[2]是30,a[3]是40、a[4]是50。
注意:如果你想要使用10个数组变量,而且想这些变量的下标名是1~10,那么定义数组就应该为int a[11]。在这个数组中定义了11个数组元素,我们在使用的时候可放弃下标0不用,直接从1开始用,就可以实现10个数组元素的下标从1~10。
注:通常我们会把数组定义在主函数外面,这样数组元素就直接清零了。
二、一维数组的输入
(1)数组名代表的不是一个变量,而是一批变量,因此不能直接读入整个数组,而是要逐个读人数组元素,通常用循环语句来完成这一功能。
for(int i=1;i<=n;i++){//从键盘读入n个数组元素的值
cin>>a[i]; //当i=1时,输入的值就是给到a[1];当i=2时,输入的值就是给到a[2];当i=3时,输入的值就是给到a[3].....
}
(2)也可以单独输入某个数组元素,例如:
cin>>a[5]; //单独给下标为5的a数组输入数值
三、一维数组的赋值
(1)一维数组的赋值通常是利用循环语句来实现。
例如:一维数组的赋值
for(int i=1;i<=n;i++){
a[i]=i; //把1~n的赋值给数组元素a[1]~a[n]
}
例如:一维数组清零
for(int i=1;i<=n;i++){
a[i]=0; //数组元素清零
}
(2)单独给某个数组元素赋值,例如:
a[5]=100;
a[10]=a[2]+50;
a[15]=a[20];
四、一维数组的输出
(1)数组元素的输出通常用循环语句来实现。
例如:输出n个数组元素
for(int i=1;i<=n;i++){
cout<<a[i]<<" "; //数组元素之间用空格分隔;当i=1时,输出的值是a[1]的值;当i=2时,输出的值是a[2]的值.....
}
(2)单独输出某个数组元素,例如
cout<<a[5]; //单独输出下标为5的a数组的元素值
五、数组下标
数组下标用于标明某一元素在数组中的位置,它与数组元素一一对应。
例如:
#include<iostream>
using namespace std;
int a[11];
int main()
{
for(int i=1;i<=10;i++){
cin>>a[i];
}
for(int i=1;i<=10;i++){
cout<<a[i]<<" ";
}
return 0;
}
//输入数据:100 98 99 100 95 97 96 100 99 96
所以a数组其对应的元素值为:
a数组下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
数组元素值 | 100 | 98 | 99 | 100 | 95 | 97 | 96 | 100 | 99 | 96 |
六、实例
例1、成绩检查
英语老师已经把n个同学的成绩输入电脑,现在需要抽取学号a到学号b之间所有同学的成绩进行检查,请你编程序帮助英语老师解决。
【输入格式】
第一行,1个整数n(n<1000),代表学生总数;第二行,n个整数,代表每个同学的成绩;第三行,2个整数a,b(a<b)。
【输出格式】
从a到b之间的所有成绩,分数之间用空格隔开。
【输入样例】
10
98 96 100 97 96 98 97 98 87 89
3 5
【输出样例】
100 97 96
分析:可以用一维数组按学号顺序存储所有同学的成绩,那么学号a到学号b之间的成绩就是这个数组中位置a到位置b位置的所有数。
#include<iostream>
using namespace std;
int cj[1001];//用cj数组来储存同学的成绩
int main()
{
int n,a,b;
cin>>n;
for(int i=1;i<=n;i++)//按顺序输入n个成绩
cin>>cj[i];
cin>>a>>b;
for(int i=a;i<=b;i++)//按顺序输出学号a到学号b之间的成绩
cout<<cj[i]<<" ";
return 0;
}
例2、种小花
为了美化环境,市长提出全民种花活动:第一户种1盆,第二户种1盆,第三户种2盆,第四户种3盆,第五户种5盆,第六户种8盆……以此类推,请问第n户要种多少盆?
【输入格式】
1个整数n,代表第几户(n<1000)。
【输出格式】
1个整数,代表第n户要种花的盆数。
【输入样例】
10
【输出样例】
55
分析:根据题意,可以得出以下规律:第1个数是1,第2个数是1,从第3个开始,每个数等于前两个数之和,这就是著名的菲波那契数列。
#include<iostream>
using namespace std;
int a[1001];
int main()
{
int n;
cin>>n;
a[1]=1;a[2]=1;
for(int i=3;i<=n;i++)
a[i]=a[i-1]+a[i-2];
cout<<a[n];
return 0;
}