C++数组基础


数组行是横坐标,数组的列是纵坐标。数组定义存储数据

一维数组

框架

#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(复制目标数组,原数组,长度)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值