Добавьте столбцы для многомерного массива размером 2×4

#c

#c

Вопрос:

 #include <stdlib.h>

int main() {
    int i, j, sum;
    int a[2][4] = {{ 11, 15, 22, 7 }, { 12, 9, 16, 21 }};

    for (i = 0; i < 2; i  ) {
        for (j = 0; j < 4; j  ) {
            printf("%d ", a[i][j]);
        }
        printf("n");
    }

    for (i = 0; i < 2; i  ) {
        sum = 0;
   
        for (j = 0; j < 4; j  ) {
            sum = sum   a[j][i];
        }
        printf("n%d", sum);
    }
 
    return 0;
}
 

Я пытался переключиться a[i][j] на a[j][i] , но он не добавляет столбцы. У меня нет проблем с добавлением строк. Я также хотел, чтобы каждый столбец соответствовал букве. Например, первый столбец A будет 11 12 следующим.

Комментарии:

1. [i] [j] должно быть синхронизировано с диапазоном индексов. Если i из 0-1 и j из 0-3, то порядок должен быть a[i] [j]. Чтобы суммировать столбцы, вы должны изменить порядок циклов for . Сначала пройдите через j, а не через i.

Ответ №1:

Почему два цикла? Достаточно одного:

 for (i = 0; i < 4; i  )
{
    sum = a[0][i]   a[1][i];
    printf("%d ", sum);
}
printf("n");
 

Если вы хотите два цикла:

 for (i = 0; i < 4; i  )
{
    sum = 0;
    for (j = 0; j < 2; j  )
    {
        sum  = a[j][i];
    }
    printf("%d ", sum);
}
printf("n");
 

должно сработать.

Больше проблем

 #include <stdlib.h>
 

должно быть

 #include <stdio.h>
 

Кроме того, объявление переменных, когда это необходимо, является хорошей привычкой в современном C, и выбирайте лучшие имена для своих переменных, т. Е. предпочитайте row и col снова i j и table снова a . Наконец, не используйте магические числа, такие как 2 и 4, в циклах, они подвержены ошибкам:

 #include <stdio.h>

int main(void)
{
    enum {rows = 2, cols = 4};
    int table[rows][cols] =
    {
        {11, 15, 22, 7},
        {12, 9, 16, 21}
    };

    for (size_t row = 0; row < rows; row  )
    {
        for (size_t col = 0; col < cols; col  )
        {
            printf("%d ", table[row][col]);
        }
        printf("n");
    }
    for (size_t col = 0; col < cols; col  )
    {
        int sum = 0;

        for (size_t row = 0; row < rows; row  )
        {
            sum  = table[row][col];
        }
        printf("%d ", sum);
    }
    printf("n");
    return 0;
}
 

Комментарии:

1. Большое вам спасибо! Кроме того, есть ли у вас какие-нибудь идеи, можно ли добавить еще одну строку, но содержащую только буквы? Так что A соответствует 11 12, а B соответствует 15 9 и т. Д.?

2. Так что A соответствует 11 12, а B соответствует 15 9 и т. Д.? Я вас не понимаю, лучше, если вы исправите свой код и зададите новый вопрос с более подробной информацией.

Ответ №2:

Перед добавлением к нему любого другого значения установите значение sum равным 0. Язык программирования C не инициализирует значения нулем по умолчанию, вам нужно сделать это вручную.

 int i, j, sum = 0;
 

Кроме того, добавление к сумме должно быть записано следующим образом:

 sum = sum   a[i][j];
 

Кроме этого, вам не нужно использовать два цикла, просто добавьте предыдущую строку в первый цикл после печати.

Комментарии:

1. Переменная sum устанавливается в 0 на каждой итерации первого цикла, поэтому проблем нет, и sum = sum a[i][j]; это не то, что хочет OP: например, первый столбец A будет 11 12. циклы должны быть переключены: for (i = 0; i < 4; i ) ... for (j = 0; j < 2; j ) вместо for (i = 0; i < 2; i ) ... for (j = 0; j < 4; j )