Умножение матриц в C-скрипте

#arrays #c

#массивы #c

Вопрос:

Привет сообществу StackOverflow!

Мне нужно немного вашего внимания и помощи. У меня есть задание создать умножение матриц, но проблема в том, что код застревает после ввода первого измерения массива. Он не будет передавать аргумент во второе измерение B.

Вот код:

 int main()
{
    int k, n, m;
    printf("Dimensions for A array: ");
    scanf("%d %d", amp;n, amp;k);
    int A[n][k];
    for (int i = 0; i<n; i  ) {
        for (int r = 0; r<k; r  ) {
            scanf("%d", amp;A[i][r]);
        }
    }
    printf("Dimensions for B array: ");
    scanf("%d %d", amp;k, amp;m);

    int B[k][m];
    for (int i = 0; i<k; i  ) {
        for (int r = 0; r<m; r  ) {
            scanf("%d", amp;B[i][r]);
        }
    }
    if (n != m) {

        int C[0][0];
    }
    else {
        int total;
        int C[n][m];
        for (int i = 0; i<n; i  ) {
            for (int l = 0; l<m; l  ) {
                for (int g = 0; g<k; g  ) {
                    total  = A[i][g] * B[g][l];
                }
                C[i][l] = total;
                total = 0;
            }

        }
        for (int i = 0; i<n; i  ) {
            for (int c = 0; c<m; c  ) {
                printf("%d    ", C[i][c]);
            }
            printf("n");
        }

    }
    return 0;
}
  

Цель, которую я пытаюсь достичь с помощью этого скрипта:

Формат ввода:

Строка 1: два целых числа, разделенных пробелом, n и k.

Строка со 2 по n 1: строка i 1 содержит k целых чисел, разделенных пробелами: строка i матрицы A.

Строка n 2: два целых числа, разделенных пробелом, k и m.

Строка от n 3 до n k 4: Строка i n 3 содержит m целых чисел, разделенных пробелами: строка i матрицы B.

Пример ввода:

     1 2

    4 5 1
  

Формат вывода:

Строка 1: два разделенных пробелом n и m, размерность матрицы C.

От строки 2 до m 1: Строка i 1 содержит m целых чисел, разделенных пробелами: строка i матрицы C.

Пример вывода:

     2 4 4

    1 1
  

Любая помощь или предложение будут оценены!

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

1. Лучше бы было намного больше входных данных, чем то, что вы нам показываете. Там едва есть даже одна матрица, намного меньше размеров и плоти секунды. Честно говоря, я бы начал с кодирования вашего ввода-вывода, чтобы убедиться, что вы действительно считываете достоверные данные, а не просто слепо предполагаете, что все операции ввода-вывода работают в 100% случаев, как и ожидалось. У вас есть четыре критические scanf точки в этом коде, и точно ни одна из них никогда не проверяется на валидацию и надлежащие диапазоны.

Ответ №1:

 scanf("%d %d", amp;n, amp;k);

scanf("%d %d", amp;k, amp;m);
  

Вы перезаписываете k переменную, поэтому вы больше не знаете размеры первого массива. Поскольку вы используете заглавные буквы для матриц, я предлагаю a,b,c,d для измерений.

 if (n != m) {

    int C[0][0];
}
else {
  

Матрицы совместимы, если внутренние размеры равны ( b != c если вы используете предложенные выше имена). Кроме того, вы можете захотеть напечатать сообщение в этой ветке, чтобы вы могли следить за тем, что происходит на выходе.

И одно небольшое замечание: C не является скриптовым языком. Это программа, а не скрипт.