数组

本文详细介绍了数组的概念,包括一维数组的声明、初始化、赋值及其注意事项,同时提到了二维数组和动态数组的相关内容。通过示例展示了如何在C++中操作数组,如查找最大数的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数组概述

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;

}

七、二维数组

八、动态数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值