一、数组概述
1、数组是存储类型相同的多个变量的数据类型,存储在连续内存空间中。
2、数组元素、数组下标、下标变量等
二、数组分类
三、数组声明(一维数组)
(一)声明格式
数组元素类型 数组名[元素个数]; 例如 int a[10];
(二)注意:
1、元素个数:必须是常数、常数表达式;
#include <iostream>
using namespace std;
int MAXN=1000; //正确:constant int MAXN=1000;
int a[MAXN];
int main(){
return 0;
}
出现错误:
[Error] array bound is not an integer constant before ‘]’ token
2、[]是下标运算符,运算等级最高,结合性从左向右结合。用途:
(1)声明数组:标识该标识符是数组。
(2)标识数组元素:a[i]指数组a中第i个元 素。
(三)引用:数组下标的使用
1、使用格式:数组名[下标];
2、下标可以是任何值为整型的表达式,甚至是函数调用。数组下标从0取值。
3、使用时不对下标越界进行检查,写程序时保证下标不越界。
/*
读入n个整数将其反向输出(n<=10000)
输入样例:
5
45 12 34 89 21
输入出样例
21 89 34 12 45
*/
#include <iostream>
using namespace std;
const int MAXN=10000;
int a[MAXN];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=n-1;i>=0;i--)
cout<<a[i]<<" ";
return 0;
}
/*
斐波那契数列指的0、1、1、2、3、5、8、……。
求数列的前20项并安排好从在到小顺序输出。
*/
#include <iostream>
using namespace std;
int a[20];
int main(){
a[0]=0;a[1]=1;
for(int i=2;i<20;i++)
a[i]=a[i-1]+a[i-2];
for(int i=19;i>=0;i--)
cout<<a[i]<<" ";
return 0;
}
四、数组初始化 (一维数组)
1、对局部数组,如果没有初始化,其值为不确定值。
1、声明初始化:类型名 数组名={值1,值2、……值n};
int a[10]={0,1,2,3,4,5,6,7,8,9};
2、赋值初始化:只能使用下标逐个赋值.
(1) 赋值a[10]只代表数组一个元素,而越界了。 {0,1,2}也无法作为右值 。
(2)a只代表数组的首地址,并代表整个数组。
以下都错误的:
int a[3];
a[3]={1,2,3};
a={1,2,3};
3、部分初始化:其它自动初始化0、或空字符。
4、全局数组初始化:自动初始化0、空字符。
5、初始化数组为0的方法:
(1)部分初始化:int a[100]={0};
(2)全局数组:int a[100];
(3)函数方法:#include memset(a,0,sizeof(a));
/*
输入年、月、日,输出该天是这一年的第几天
*/
#include <iostream>
using namespace std;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int year,month,day,ans=0;
cin>>year>>month>>day;
for(int i=1;i<month;i++){
ans+=a[i];
}
ans+=day;
if((year % 4==0 && year % 100!=0)or(year % 400==0))
if(month>2) ans++;
cout<<ans<<endl;
return 0;
}
#include <iostream>
using namespace std;
int a[10];//全局数组
int main(){
int b[10]={1,2};//部分初始化
int c[10];//没有初始化
for(int i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
for(int i=0;i<10;i++) cout<<b[i]<<" ";
cout<<endl;
for(int i=0;i<10;i++) cout<<c[i]<<" ";
return 0;
}
输入结果:
0 0 0 0 0 0 0 0 0 0
1 2 0 0 0 0 0 0 0 0
582 0 0 0 8917888 0 8920048 0 8917888 0
五、数组赋值(一维数组)
对数组赋值,只能对数组元素进行赋值。不能整体进行赋值。
六、数组相关操作
/*
输入n个整数,输出最大数所在位置(n<=10000)
*/
#include
using namespace std;
int main(){
int n,max,k;
int a[10001];
cin>>n;
cin>>a[1];
max=a[1];k=1;
for(int i=2;i<=n;i++){
cin>>a[i];
if(a[i]>max){
max=a[i];
k=i;
}
}
cout<<k<<endl;
return 0;
}