繁体   English   中英

如何添加两个数组以产生第三个数组?

[英]How to add two arrays to produce a third one?

这是我的代码:

#include <stdio.h>

int main()
{
    int integer1[10], integer2[10], integertotal[10];
    int i, j, index;

    for (i = 0; i < 10; i++)
        integer1[i] = 2 * (i + 4);
    for (i = 0; i < 10; i++)
        printf("    %d", integer1[i]);

    printf("\n");

    for (j = 0; j < 10; j++)
        integer2[j] = 3 * (j + 3);
    for (j = 0; j < 10; j++)
        printf("    %d", integer2[j]);

    printf("\n");

    for (index = 0; index < 10; index++)
        integertotal[index] = integer1[i] * 12 + integer2[j] * 10;
    for (index = 0; index < 10; index++)
        printf("   %d", integertotal[index]);

    printf("\n\n");

    for (index = 0; index < 10; index++)
        printf("%d %d+%d=%d\n", index, integer1[i], integer2[j], integertotal[index]);
}

我希望输出应该是:

(Integer1)     8    10    12    14    16    18   20   22    24    26
(Integer2)     9    12    15    18    21    24   27   30    33    36 
(Integertotal) 374  484  594    704   814  924  1034  1144  1254  1364

但是实际结果是:

(Integer1)     8    10    12    14    16    18   20   22    24    26
(Integer2)     9    12    15    18    21    24   27   30    33    36 
(Integertotal) 80   92   104    116   128   140   152  164  176   188

我认为您之前输入的“期望输出”是错误的(我认为应该是: 186 240 294 348 402 456 510 564 618 672 ),并且您有不必要的循环和额外的索引变量。 再检查一遍。 这是我认为您要执行的操作:

int main() {

    int integer1[10], integer2[10], integertotal[10];
    int i;    
    for (i = 0; i < 10; i++) {
        integer1[i] = 2 * (i + 4);
        printf("    %d", integer1[i]);
    }
    printf("\n");

    for (i = 0; i < 10; i++) {
        integer2[i] = 3 * (i + 3);
        printf("    %d", integer2[i]);
    }
    printf("\n");

    for (i = 0; i < 10; i++) {
        integertotal[i] = integer1[i] * 12 + integer2[i] * 10;
        printf("   %d", integertotal[i]);
    }
    printf("\n");

    for (i = 0; i < 10; i++)
        printf("%d %d+%d=%d\n", i, integer1[i], integer2[i], integertotal[i]);  //I don't understand the output you want. 8+9=186? Why?
    printf("\n");

    return 0;
}

在第三个循环中,您将i和j用作integer1和integer2的索引,因此您尝试访问这两个数组中不存在的11个项目。 所以我认为您的代码应该是这样的。

#include <stdio.h>

int main()
{
    int integer1[10], integer2[10], integertotal[10];
    int i, j, index;

    for (i = 0; i < 10; i++)
        integer1[i] = 2 * (i + 4);
    for (i = 0; i < 10; i++)
        printf("    %d", integer1[i]);

    printf("\n");

    for (j = 0; j < 10; j++)
        integer2[j] = 3 * (j + 3);
    for (j = 0; j < 10; j++)
        printf("    %d", integer2[j]);

    printf("\n");

    for (index = 0; index < 10; index++)
        integertotal[index] = integer1[index] * 12 + integer2[index] * 10;
    for (index = 0; index < 10; index++)
        printf("   %d", integertotal[index]);

    printf("\n\n");

    for (index = 0; index < 10; index++)
        printf("%d %d+%d=%d\n", index, integer1[index], integer2[index], integertotal[index]);
}

如何添加两个数组以产生第三个数组?

我们可以写一个像这样的函数

void sum_arrays(size_t n, int *src_1, int *src_2, int *dest)
{
    for (size_t i = 0; i < n; ++i)
    {
        // Note that 'i' is local, initialized and it is used for all the arrays
        dest[i] = src_1[i] + src_2[i];
    }
}

当然,这不会产生OP期望的输出,但是由于Bishal Jaiswal显然是对“正确”公式进行了反向工程,我们可以使用它

void calc_array(size_t n, int *src_1, int *src_2, int *dest)
{
    for (size_t i = 0; i < n; ++i)
    {
        dest[i] = (src_1[i] * 12 + src_2[i] * 10 + (i + 1)) * 2;
        //              ^^^             ^^^         ^^^^^
    } 
}

可测试的在这里

在提问者发布的代码中,除了使用错误的公式外,数组还使用错误的变量进行索引

int integer1[10], integer2[10], integertotal[10];
int i, j, index;  // <---

for (i = 0; i < 10; i++)
// ...
for (j = 0; j < 10; j++)
// ...
// Now both 'i' and 'j' are equal to 10
// ...
for (index = 0; index < 10; index++)
    integertotal[index] = integer1[i] * 12 + integer2[j] * 10;
// Those are out of bounds now    ^^^                ^^^                
// ...
// Same later
for (index = 0; index < 10; index++)
    printf("%d %d+%d=%d\n", index, integer1[i], integer2[j], integertotal[index]);
//                                         ^^^          ^^^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM