#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 не является скриптовым языком. Это программа, а не скрипт.