История изменений
Исправление Nebuchadnezzar, (текущая версия) :
Начинали бы вы с K&R, ибо пример, честно говоря, какой-то уёбищный и мнится мне, что и вся книга написана в том же ключе.
Данная программа n раз (for (i = 1; i <= n; i++)) вызывает 2 оператора:
1. Вложенный цикл (for (j = n; j > -n; j--)), который при каждом вызове 2n раз (от n до -n, не включая -n) печатает (printf («%5d», i * j)) произведение текущих значений переменных i и j.
2. Функцию печатающую символ новой строки '\n'.
Допустим n равно 5, тогда на первой итерации внешнего цикла (т.е. для i равного 1), внутренний цикл будет работать так:
j = n = 5, i * j = 1 * 5 = 5, печатаем 5
j = j - 1 = 4, i * j = 1 * 4 = 4, печатаем 4
j = j - 1 = 3, i * j = 1 * 3 = 3, печатаем 3
j = j - 1 = 2, i * j = 1 * 2 = 2, печатаем 2
j = j - 1 = 1, i * j = 1 * 1 = 1, печатаем 1
j = j - 1 = 0, i * j = 1 * 0 = 0, печатаем 0
j = j - 1 = -1, i * j = 1 * -1 = -1, печатаем -1
j = j - 1 = -2, i * j = 1 * -2 = -2, печатаем -2
j = j - 1 = -3, i * j = 1 * -3 = -3, печатаем -3
j = j - 1 = -4, i * j = 1 * -4 = -4, печатаем -4
j = j - 1 = -5, -5 не больше -n, выходим из цикла
После завершения работы внутреннего цикла, вызывается функция printf(«\n»), переводящая курсор на новую строчку. Внешний цикл начинает вторую итерацию, внутренний цикл работает так же, но на этот раз i равно 2:
j = n = 5, i * j = 2 * 5 = 10, печатаем 10
j = j - 1 = 4, i * j = 2 * 4 = 8, печатаем 8
j = j - 1 = 3, i * j = 2 * 3 = 6, печатаем 6
j = j - 1 = 2, i * j = 2 * 2 = 4, печатаем 4
j = j - 1 = 1, i * j = 2 * 1 = 2, печатаем 2
j = j - 1 = 0, i * j = 2 * 0 = 0, печатаем 0
j = j - 1 = -1, i * j = 2 * -1 = -2, печатаем -2
j = j - 1 = -2, i * j = 2 * -2 = -4, печатаем -4
j = j - 1 = -3, i * j = 2 * -3 = -6, печатаем -6
j = j - 1 = -4, i * j = 2 * -4 = -8, печатаем -8
j = j - 1 = -5, -5 не больше -n, выходим из цикла
И т.д. пока i не станет больше n, что приведёт к выходу из внешнего цикла.
Исходная версия Nebuchadnezzar, :
Начинали бы вы с K&R, ибо пример, честно говоря, какой-то уёбищный и мнится мне, что и вся книга написана в том же ключе.
Данная программа n раз (for (i = 1; i <= n; i++)) вызывает 2 оператора:
1. Вложенный цикл (for (j = n; j > -n; j--)), который при кажом вызове 2n раз (от n до -n, не включая -n) печатает (printf («%5d», i * j)) произведение текущих значений переменных i и j.
2. Функцию печатающую символ новой строки '\n'.
Допустим n равно 5, тогда на первой итерации внешнего цикла (т.е. для i равного 1), внутренний цикл будет работать так:
j = n = 5, i * j = 1 * 5 = 5, печатаем 5
j = j - 1 = 4, i * j = 1 * 4 = 4, печатаем 4
j = j - 1 = 3, i * j = 1 * 3 = 3, печатаем 3
j = j - 1 = 2, i * j = 1 * 2 = 2, печатаем 2
j = j - 1 = 1, i * j = 1 * 1 = 1, печатаем 1
j = j - 1 = 0, i * j = 1 * 0 = 0, печатаем 0
j = j - 1 = -1, i * j = 1 * -1 = -1, печатаем -1
j = j - 1 = -2, i * j = 1 * -2 = -2, печатаем -2
j = j - 1 = -3, i * j = 1 * -3 = -3, печатаем -3
j = j - 1 = -4, i * j = 1 * -4 = -4, печатаем -4
j = j - 1 = -5, -5 не больше -n, выходим из цикла
После завершения работы внутреннего цикла, вызывается функция printf(«\n»), переводящая курсор на новую строчку. Внешний цикл начинает вторую итерацию, внутренний цикл работает так же, но на этот раз i равно 2:
j = n = 5, i * j = 2 * 5 = 10, печатаем 10
j = j - 1 = 4, i * j = 2 * 4 = 8, печатаем 8
j = j - 1 = 3, i * j = 2 * 3 = 6, печатаем 6
j = j - 1 = 2, i * j = 2 * 2 = 4, печатаем 4
j = j - 1 = 1, i * j = 2 * 1 = 2, печатаем 2
j = j - 1 = 0, i * j = 2 * 0 = 0, печатаем 0
j = j - 1 = -1, i * j = 2 * -1 = -2, печатаем -2
j = j - 1 = -2, i * j = 2 * -2 = -4, печатаем -4
j = j - 1 = -3, i * j = 2 * -3 = -6, печатаем -6
j = j - 1 = -4, i * j = 2 * -4 = -8, печатаем -8
j = j - 1 = -5, -5 не больше -n, выходим из цикла
И т.д. пока i не станет больше n, что приведёт к выходу из внешнего цикла.