C++中的数组

本文详细介绍了C++中的一维和多维数组,包括数组的定义、初始化、元素访问,以及一系列的例题求解,涵盖了一维数组、二维数组的应用,如数组替换、填充、选择等操作,还涉及到了课间习题中的数组变换和斐波那契数列等挑战。
摘要由CSDN通过智能技术生成

C++中的数组


一一维数组

1.数组的定义
数组的定义方式和变量类似。

2 数组的初始化

3 访问数组元素

strong text

二多维数组

多维数组就是数组的数组。
依次嵌套,最后一个括号代表变量

三例题求解

1.行号 2.起点 3.终点
课内例题

**1.数组替换 **

#include <cstdio>

int main()
{
    int x[10];

    for (int i = 0; i < 10; i ++ ) scanf("%d", &x[i]);

    for (int i = 0; i < 10; i ++ )
        if (x[i] <= 0)
            x[i] = 1;

    for (int i = 0; i < 10; i ++ ) printf("X[%d] = %d\n", i, x[i]);

    return 0;
}

2.数组填充

#include <cstdio>

int main()
{
    int n[10];
    int v;
    scanf("%d", &v);
    n[0] = v;

    for (int i = 1; i < 10; i ++ ) n[i] = n[i - 1] * 2;

    for (int i = 0; i < 10; i ++ ) printf("N[%d] = %d\n", i, n[i]);

    return 0;
}

3.数组选择

#include <cstdio>

int main()
{
    double a[100];
    for (int i = 0; i < 100; i ++ ) scanf("%lf", &a[i]);

    for (int i = 0 ; i < 100; i ++ )
        if (a[i] <= 10)
            printf("A[%d] = %.1lf\n", i, a[i]);

    return 0;
}

4.数组中的行


#include <cstdio>

int main()
{
    double a[12][12];

    int l;
    char t;
    scanf("%d\n%c", &l, &t);

    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            scanf("%lf", &a[i][j]);

    double s = 0;
    for (int i = 0; i < 12; i ++ ) s += a[l][i];

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / 12);

    return 0;
}

5.数组的右上半部分

#include <cstdio>

int main()
{
    char t;
    scanf("%c", &t);
    double a[12][12];

    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            scanf("%lf", &a[i][j]);

    int c = 0;
    double s = 0;

    for (int i = 0; i < 12; i ++ )
        for (int j = i + 1; j < 12; j ++ )
        {
            c ++ ;
            s += a[i][j];
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

6.数组的左上半部分


#include <cstdio>

int main()
{
    double a[12][12];
    char t;

    scanf("%c", &t);
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            scanf("%lf", &a[i][j]);

    int c = 0;
    double s = 0;
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j <= 10 - i; j ++ )
        {
            c ++ ;
            s += a[i][j];
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

7.数组的上方区域

#include <cstdio>

int main()
{
    char t;
    double a[12][12];

    scanf("%c", &t);
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            scanf("%lf", &a[i][j]);

    double s = 0, c = 0;
    for (int i = 0; i < 5; i ++ )
        for (int j = i + 1; j <= 10 - i; j ++ )
        {
            c += 1;
            s += a[i][j];
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

8.数组的左方区域


#include <cstdio>

int main()
{
    char t;
    scanf("%c", &t);

    double q[12][12];
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            scanf("%lf", &q[i][j]);

    double s = 0, c = 0;
    for (int i = 1; i <= 5; i ++ )
        for (int j = 0; j <= i - 1; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    for (int i = 6; i <= 10; i ++ )
        for (int j = 0; j <= 10 - i; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

9.平方矩阵

#include <iostream>

using namespace std;

int main()
{
    int n;
    while (cin >> n, n)
    {
        for (int i = 1; i <= n; i ++ )
        {
            for (int j = 1; j <= n; j ++ )
            {
                int up = i, down = n - i + 1, left = j, right = n - j + 1;
                cout << min(min(up, down), min(left, right)) << ' ';
            }
            cout << endl;
        }

        cout << endl;
    }

    return 0;
}

课间习题

1.数组变换

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    int a[20], b[20];

    for (int i = 0; i < 20; i ++ ) cin >> a[i];
    for (int i = 19, j = 0; i >= 0; i --, j ++ ) b[j] = a[i];

    for (int i = 0; i < 20; i ++ ) printf("N[%d] = %d\n", i, b[i]);

    return 0;
}

2.斐波那契数列

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    long long f[61];
    f[0] = 0, f[1] = 1;

    for (int i = 2; i <= 60; i ++ ) f[i] = f[i - 1] + f[i - 2];

    int n;
    cin >> n;
    while (n -- )
    {
        int x;
        cin >> x;
        printf("Fib(%d) = %lld\n", x, f[x]);
    }

    return 0;
}

3.最小数和它的位置


#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    int a[1001];
    int n;

    cin >> n;
    for (int i = 0; i < n; i ++ ) cin >> a[i];

    int p = 0;
    for (int i = 1; i < n; i ++ )
        if (a[i] < a[p])
            p = i;

    printf("Minimum value: %d\n", a[p]);
    printf("Position: %d\n", p);

    return 0;
}

**4.数组中的列 **

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    int c;
    char t;
    double q[12][12];

    cin >> c >> t;
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            cin >> q[i][j];

    double s = 0;
    for (int i = 0; i < 12; i ++ ) s += q[i][c];

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / 12);

    return 0;
}

5.数组的右下半部分


#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    char t;
    cin >> t;
    double q[12][12];

    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            cin >> q[i][j];

    double s = 0, c = 0;
    for (int i = 1; i <= 11; i ++ )
        for (int j = 12 - i; j <= 11; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

6.数组的左下半部分


#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char t;
    cin >> t;

    double q[12][12];
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            cin >> q[i][j];

    double s = 0, c = 0;
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j <= i - 1; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

7.数组的下方区域


#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char t;
    cin >> t;

    double q[12][12];
    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            cin >> q[i][j];

    double s = 0, c = 0;
    for (int i = 7; i <= 11; i ++ )
        for (int j = 12 - i; j <= i - 1; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

**8.数组的右方区域 **

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    char t;
    cin >> t;
    double q[12][12];

    for (int i = 0; i < 12; i ++ )
        for (int j = 0; j < 12; j ++ )
            cin >> q[i][j];

    double s = 0, c = 0;
    for (int i = 1; i <= 5; i ++ )
        for (int j = 12 - i; j <= 11; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    for (int i = 6; i <= 10; i ++ )
        for (int j = i + 1; j <= 11; j ++ )
        {
            s += q[i][j];
            c += 1;
        }

    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

9.平方矩阵

#include <iostream>

using namespace std;

int q[100][100];

int main()
{
    int n;
    while (cin >> n, n)
    {
        for (int i = 0; i < n; i ++ )
        {
            q[i][i] = 1;
            for (int j = i + 1, k = 2; j < n; j ++, k ++ ) q[i][j] = k;
            for (int j = i + 1, k = 2; j < n; j ++, k ++ ) q[j][i] = k;
        }

        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < n; j ++ ) cout << q[i][j] << ' ';
            cout << endl;
        }
        cout << endl;
    }

    return 0;
}

10.平方矩阵


#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int n;
    while (cin >> n, n)
    {
        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < n; j ++ )
            {
                int v = 1;
                for (int k = 0; k < i + j; k ++ ) v *= 2;
                cout << v << ' ';
            }
            cout << endl;
        }

        cout << endl;
    }

    return 0;
}

**11.蛇形矩阵 **

#include <iostream>

using namespace std;

int res[100][100];

int main()
{
    int n, m;
    cin >> n >> m;

    int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};

    for (int x = 0, y = 0, d = 0, k = 1; k <= n * m; k ++ )
    {
        res[x][y] = k;
        int a = x + dx[d], b = y + dy[d];
        if (a < 0 || a >= n || b < 0 || b >= m || res[a][b])
        {
            d = (d + 1) % 4;
            a = x + dx[d], b = y + dy[d];
        }
        x = a, y = b;
    }

    for (int i = 0; i < n; i ++ )
    {
        for (int j = 0; j < m; j ++ ) cout << res[i][j] << ' ';
        cout << endl;
    }

    return 0;
}

学习资源 《语法基础》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值