Обработка матриц. Цикл. Проверьте ошибки пожалуйста - C (СИ)
Формулировка задачи:
проверьте на ошибки, пожалуйста. Задача такая: Считывается n размер матрицы. Каждый элемент матрицы равен (i*10+j). Выводятся элементы в строчку в таком порядке: начиная с элемента (1;n) и дальше змейкой, как показано на рисунке, до левого нижнего угла. Вложение 780441
я написал так:
еще не оптимизировал для для матриц маленьких размеров (2х2, 1х1), но уже и для рабочих тестов программа не работает: либо зацикливается, либо выводит какую-то дичь с многозначными и отрицательными числами, так еще и с ошибкой при завершении. в чем проблема?
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- const int maxn = 10;
- int StepBack (int x)
- {
- x = x - 1;
- return x;
- }
- int StepForth(int x)
- {
- x = x + 1;
- return x;
- }
- int main()
- {
- int i, j, n;
- int m[maxn][maxn];
- scanf("%i", &n);
- for (i = 1; i != (n+1); i++)
- for (j = 1; j != (n+1); j++)
- m[i][j] = (i * 10 + j);
- i = 1; j = n;
- printf("%3d ", m[i][j]);
- do
- {
- if (j != 1)
- j = StepBack(j);
- else
- i = StepForth(i);
- printf("%3d ", m[i][j]);
- while ((j != n) || (i != n))
- {
- i = StepForth(i);
- j = StepForth(j);
- printf("%3d ", m[i][j]);
- }
- if (i != n)
- i = StepForth(i);
- else
- j = StepBack(j);
- printf("%3d ", m[i][j]);
- if ((i == n) && (j == 1))
- break;
- while ((i != 1) || (j != 1))
- {
- i = StepBack(i);
- j = StepBack(j);
- printf("%3d ", m[i][j]);
- }
- }
- while ( 1 );
- }
Решение задачи: «Обработка матриц. Цикл. Проверьте ошибки пожалуйста»
textual
Листинг программы
- scanf("%i", &n);
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- m[i][j] = ((i+1) * 10 + j + 1);
Объяснение кода листинга программы
В этом коде:
scanf(
%i, &n);
- программа запрашивает у пользователя ввод целого числа, которое будет использоваться как размер матрицы.for (i = 0; i < n; i++)
- начинается цикл, который будет выполнятьсяn
раз, гдеn
- размер матрицы.for (j = 0; j < n; j++)
- внутри предыдущего цикла начинается еще один цикл, который также будет выполнятьсяn
раз.m[i][j] = ((i+1) * 10 + j + 1);
- в этой строке происходит заполнение матрицы значениями. Для каждой ячейки матрицыm[i][j]
присваивается значение, равное(i+1) * 10 + j + 1
. Список:- Программа запрашивает у пользователя ввод целого числа.
- Цикл выполняется
n
раз. - Внутри цикла выполняется еще один цикл, также выполняющийся
n
раз. - Ячейка матрицы
m[i][j]
заполняется значением(i+1) * 10 + j + 1
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д