数组行是横坐标,数组的列是纵坐标。数组定义存储数据
一维数组
框架
#include <iostream>
using namespace std;
int main()
{
int a[i],b;//定义数组[i],表示长度为i的数组
float c(11);
double d[13];
char e[14];//字符串
string g[25];
}
数组初始化
法一:int a[3] = {0, 1, 3};//表示一个长度为3的数组,三个值表示0,1,3
法二:int b[] = {0, 1, 3};//表示一个长度为3的数组
法三:int c[5] = {0, 1, 1};//表示长度为5的数组,没有给出的值默认为0
法四:char d[] = {'a', 'b', 'c'};//表示长度为3的数组
int f[10] = {0}//定义初始值全是0的写法
未赋值的数组输出后是随机数
eg ;
int a[100];
for (int i = 0);i < 100;i ++) cout << a[i] << endl;
注:
1.函数内部定义长数组要注意报错,如果过长移动到函数外面。
** 2.int main里面的数组未定义是随机数,int main外面的数组未定义是0**
数组定义
int a[100] = {0}数组下标一定是从0开始
a[0] = 1定义一个初始化, a[1], a[2],a[99]应用某一个位置时。
eg:
#include <iostream>
using namespace std;
int main()
{
int a[3] = {0, 1, 2};//数组下标从0开始
cout << a[0] <<' '<< a[1] <<' '<<a[2] << endl;
a[0] = 5; //对a[0]初始化
cout << a[0] <<endl;
return 0;
}
输出
0 1 2
5
数组应用练习
练习斐波那契数列
分析:f[0] =1,f[1]=2,f[2] = 3,f[i]=f[i -1] + f[i-2]
#include <iostream>
using namespace std;
int main()
{
int a[100];//定义长度为100的数组
a[0] = 0, a[1] = 1;//初始化
int n;//读入一个n求第n项
cin >> n;
for (int i = 2; i < 100;i ++)//循环从2开始
a[i] = a[i - 1] + a[i - 2];
cout << a[n]<< endl;//n项求和
return 0 ;
}
输入一个n,在输入n个整数。将这n个整数逆序输出
#include <iostream>
using namespace std;
int main()
{
int a[100];//定义一个长度为100的数组
int n; // 读入一个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;
return 0;
}
2.输入一个n,在输入n个整数。将这个数组顺时针旋转k(k<= n)次,最后将输出结果。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[100];
int n,k;
cin >> n >> k;
for (int i = 0; i < n; i++) cin >> a[i];//读入数组
while (k --)//旋转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
第一步:输入原数组,翻转;54 321
第二步:翻转前半部;45 321
第三步:反转后半部;45 123
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[100];
int n,k;
cin >> n >> k;
for (int i = 0; i < n; i++) cin >> a[i];//读入数组
reverse(a,a + n);//第一步:输入原数组,翻转;54 321
reverse(a, a + k);//第二步:翻转前半部;45 321
reverse(a + k, a + n);//第三步:反转后半部;45 123
for (int i = 0; i < n ;i++)
cout << a[i] <<' ';
return 0;
}
3、计算2的n次方,n<=10000
分析求2的n次方中的n,相当于log以10为底 的2 n次方= n log10 2;位数很大,应用数组。
数组号数右边开始为个数,应用于加减乘而除法不必。
分析过程
#include <iostream>
using namespace std;
const int N = 3010;
int main()
{
int a[N] = {1}, size = 1;//定义一个数组范围,size表示位数
int n;
cin >> n;
for (int i = 0;i < n; i++) // 输入循环
{
int t = 0;//定义变量t
for (int j = 0; j < size ; j++)//位数循环
{
t += 2 * a[j];//定义a的位数
a[j] = t % 10; //相当于b[0]
t /= 10;//进位
}
if (t) a[size ++] = 1;//判断是否有进位 如果t不为0 则a[]进一位
}
for (int i = size - 1 ;i >= 0 ; i --) cout << a[i];
cout << endl;
return 0;
}
cmath 库中函数pow(2, n)可以得到2的n次方的值
const
#include <iostream>
#include <cmath>
using namespace std;
const int N = 3010;
int main()
{
int a[N] = {1};
int n;
cin >> n;
int m = 1;
cout << (int)pow(2, n) << endl;
for (int i = 0;i < n; i ++)
{
int t = 0;
for (int j = 0;j < m; j ++)
{
t += a[j] * 2
a[j] = t % 10; //相当于b[0]
t /= 10;//进位
}
if (t) a[size ++] = 1;//判断是否有进位 如果t不为0 则a[]进一位
}
for (int i = size - 1 ;i >= 0 ; i --) cout << a[i];
cout << endl;
return 0;
}
表示不需要其他人员更改变量,降低代码出错概率。
二维数组
矩阵;i行j列
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a[3][4];//范围
for (int i = 0;i < 3;i ++)//矩阵循环定义a[i][j]
for (int j = 0;j < 4;j ++)
a[i][j] = i + j; //累加
for (int i = 0;i < 3;i ++)//输出
{ for (int j = 0;j < 4;j ++) cout << a[i][j] << ' ';
cout << endl;
}
return 0 ;
}
输出
0 1 2 3
1 2 3 4
2 3 4 5
初始化
定义二维数组
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a[3] = {0, 1, 2};//初始化一维数组
int b[3][4] = {
{1, 2, 3, 4},
{2, 2, 3, 4},
{3, 2, 3, 4}
};//二维数组初始化,三个行4列
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 4; j ++) cout << b[i][j] << ' ';
cout << endl;
}
return 0;
}
输出
1 2 3 4
2 2 3 4
3 2 3 4
memset函数 (库)
多组测试数据定义初始化,所有的单位是字节 byte有8位=8 bit ,1KB = 1024 byte,1MB = 1024KB
bk表示位,B是byte字节
memset(数组名字,初始化值,初始化长度)
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
int a[10], b[10];
memset(a, 0, 40);//a 表示字符串名字,0 表示初始化赋值,40 表示int长度
for (int i = 0;i < 10; i ++) cout << a[i] <<' ';
return 0;
}
结果得到00000000000,注 只有两个初始值才可得到一样的 -1 ,0
sizeof运算符用法
后面不需要加括号,主要是用来求某个数组占字节数量,输出方式cout << sizeof a << endl 表示所占字节大小。
memcpy用法
memcpy(复制目标数组,原数组,长度)