LINUX.ORG.RU

История изменений

Исправление 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, что приведёт к выходу из внешнего цикла.