Как добавить два массива для создания третьего? - PullRequest
0 голосов
/ 20 мая 2019

Вот мой код:

#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

Ответы [ 3 ]

1 голос
/ 20 мая 2019

Я думаю, что «ожидаемый результат», который вы указали ранее, неправильный (я думаю, это должно быть: 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;
}
0 голосов
/ 20 мая 2019

Как добавить два массива для создания третьего?

Мы можем написать такую ​​функцию, как эта

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];
    }
}

Это, конечно, неt дает результат, ожидаемый ОП, но благодаря Бишалу Джайсвалу , который, очевидно, обратил внимание на "правильную" формулу, мы можем использовать это

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;
        //              ^^^             ^^^         ^^^^^
    } 
}

Тестируемый ЗДЕСЬ.

В коде, отправленном asker, помимо использования неправильной формулы, массивы индексируются с неправильными переменными

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]);
//                                         ^^^          ^^^
0 голосов
/ 20 мая 2019

в третьем цикле вы используете 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]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...