1.数组的定义
int a[5],b[10];
float c[5];
double d[6];
char e[7];
string f[20];
2.数组的初始化
int a[3] = {0,1,3};
int b[] = {0,1,1};
int c[5] = {0,1,1}; //后面没有给出的则默认为0
char d[3] = {'a','b','c'};
int e[10] = {0}; //将数组全部初始化为0的写法
int a[100] = {0}; //数组下标一定从0开始
//此数组的范围就是 a[0]~a[99]
3.实现斐波那契数列
int f[100];
f[0]=0,f[1]=1;
int n;
cin >> n;
for(int i=2;i<=n;i++)
{
f[i] = f[i-1]+f[i-2];
}
cout << f[n] << endl;
4.顺序存储倒序输出
int a[100];
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] << " ";
cout << endl;
5.计算数组的k次旋转(算数右位移)
普通做法
int a[100];
int n,k;
cin >> n >> k;
for(int i=0;i<n;i++) cin >> a[i];
while(k--)
{
int t = a[n-1];
for(int i=n-2;i>=0;i--)
{
a[i+1]=a[i];
a[0]=t;
}
for(int i=0;i<n;i++) cout << a[i] << " ";
return 0;
}
技巧做法
// 12345 => 45123
//(1)54321 (2)45321 (3)45123
int a[100];
int n,k;
cin >> n >> k;
for(int i=0;i<n;i++) cin >> a[i];
reverse(a,a+n);
reverse(a,a+k);
reverse(a+k,a+n);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
6.多维数组
int a[3]={0,1,2};
int b[3][4]={{1,2,3,4},{2,2,3,4},{3,2,3,4}};
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
cout << b[i][j] << " ";
}
cout << endl;
}
7.memset函数
用于给数组赋值0或1 效率极高 :#include <cstring>
int a[10],b[10];
//menset以字节为单位,第一个指数组,第二个指赋值0(全0)或-1(全1),第三个指赋值长度
memset(b,0,sizeof(a));
for(int i=0;i<10;i++) cout << b[i] << " ";
cout << endl;
return 0;
8.memcpy函数
用于复制数组
int a[10],b[10];
for(int i=0;i<10;i++) a[i]=i;
//第一个为待复制数组,第二个为原数组,第三个为复制长度
memcpy(b, a,sizeof(b));
for(int i=0;i<10;i++) cout << b[i] << " ";
return 0;
9.利用数组实现高精度计算
#include <iostream>
using namespace std;
//const只允许读取,不允许修改。
const int N = 3010;
int main()
{
int a[N]={1};
int n;
cin >> n;
int m = 1;
for(int i=0;i<n;i++)
{
int t = 0;
for(int j=0;j<m;j++)
{3
t = t+a[j]*2;
a[j]=t%10;
t=t/10;
}
if(t) a[m++]=1;
}
for (int i =m-1;i>=0;i--)
{
cout << a[i];
}
cout << endl;
return 0;
}