Управление 1.1
вначале y=1 | |
if ( y!=0 ) x=5; (y!=0) (1!=0) | На первом шаге вычисляется условие. |
TRUE | Так как условие - ИСТИНА, то выполняется первая часть условного оператора. |
x=5 |
Управление 1.2
вначале y=1 if (y==0) x=3; else x=5; | |
(y==0) FALSE | Вычисляем условие. |
x=5 | Выполняем вторую (ложную) часть условного оператора. |
Управление 1.3
вначале y=1 x=1; if (y0) x=3; else x=5; | |
x=1; if (y0) x=3; else x=5; } | Вначале x присваивается 1. Фигурные скобки показывают вложенность операторов. |
(y | Условие первого условного оператора - ЛОЖЬ, так что часть оператора, соответствующая истинному значению условия, пропускается. Оператор, следующий за else, находится в первой части первого условного оператора, так как он относится ко второму условному оператору. В языке С действует правило: оператор, следующий за else, относится к ближайшему if. |
Управление 1.4
вначале y=1 if ( z=y | |
(z=(y | Начинаем с вычисления первого условия. Как и прежде, мы будем использовать скобки для обозначения соответствия операций и операндов. |
(z=(1 | |
(y==0) FALSE | Так как условие первого if - ЛОЖЬ, выполняется вторая часть этого оператора, которая опять оказывается условным оператором; знакчит вычисляется его условие. |
x=7 | Условие - ЛОЖЬ, поэтому выполняется вторая часть второго условного оператора. |
Управление 1.5
вначале y=1 if (z=(y==0)) x=5; x=3; | |
if (z=(y==0)) { x=5; } x=3; | Первая часть условного оператора может быть одиночным оператором или блоком и следует сразу за условием. |
(z=(y==0)) (z=FALSE) FALSE и z=0 | Вычисляем условие. |
x=3 | Так как условный оператор не имеет второй части, то управление переходит к следующему оператору. |
Управление 1.6
вначале y=1 if (x=z=y); x=3; | |
if (x=z=y) { ; } x=3; | Первая часть условного оператора есть пустой оператор. |
( x = ( z = y ) ) ( x = ( z = 1) ) (x=1) и z=1 TRUE и x=1 | Вычисляем условие. |
x=3 | Условие - ИСТИНА, поэтому выполняется первая часть оператора, но поскольку там пустой оператор, то выполняется оператор, следующий за условным. |
Управление 2.1
вначале x=0, y=0 while( y<10 ) ++y; x += y; | |
while( y<10 ) ++y; | Начнем с изучения факторов, управляющих выполнением оператора while. |
( y<10 ) | Условие продолжения цикла. Тело цикла будет выполняться до тех пор, пока условие продолжения цикла - ИСТИНА. |
( y>=10 ) | Условие выхода их цикла. Это отрицание условия продолжения цикла, и в случае нормального окончания цикла оно имеет значение ИСТИНА. |
y=0 | Начальное значение управляющей переменной - это значение, которое имеет такая переменная при первом выполнении тела цикла. |
++y | Изменение управляющей переменной при выполнении тела цикла. |
y=0 до 9 в цикле | При первом выполнении цикла y=0. Каждый раз в теле цикла значение y увеличивается на 1. |
y=10 на выходе | Когда y=10, условие продолжения цикла становится ложным и выполнение цикла прекращается. |
x+=y x=0+10 x=10 | Управление передается оператору, следующему за телом цикла. |
Управление 2.2
вначале x=0, y=0 while( y<10 ) x += ++y; | |
(y<10) | Условие продолжения цикла. |
(y>=10) | Условие выхода их цикла. |
y=0 | Начальное значение управляющей переменной. |
++y | Изменение в цикле управляющей переменной. |
y=0 до 9 в цикле | Так же, как и в предыдущей задаче. |
x+=++y | К x в цикле после его увеличения на 1 прибавляется значение y. |
x=55 y=10 на выходе | Сумма всех целых от 1 до 10. |
Управление 2.3
вначале y=1 while( y<10 ) { x = y++; z = ++y; } | |
(y<10) | Условие продолжения цикла. |
(y>=10) | Условие выхода их цикла. |
y=1 | Начальное значение управляющей переменной. |
y++, ++y | Изменение в цикле управляющей переменной. |
y=1,3,5,7,9 в цикле | В первый момент в цикле y=1, и при каждом выполнении цикла оно увеличивается на 2. |
x=1,3,5,7,9 | В цикле до того, как y увеличивается на 1, его значение присваивается x. |
z=3,5,7,9,11 | В цикле после того, как y увеличивается на 2, его значение присваивается z. |
y=11 на выходе |
Управление 2.4
for ( y=1; y<10; y++ ) x=y; | В операторе for собраны все выражения, определяющие выполнение цикла. |
y<10 | Условие продолжения цикла. |
y>=10 | Условие выхода их цикла. |
y=1 | Начальное значение. |
y++ | Изменение. |
y=1 до 9 в цикле x=1 до 9 y=10 на выходе | В теле цикла x принимает значение y. |
for ( y=1; (x=y)<10; y++ ); | |
y<10 | Условие продолжения цикла. |
y>=10 | Условие выхода их цикла. |
y=1 | Начальное значение. |
y++ | Изменение. |
y=1 до 9 в цикле x=1 до 9 y=10 на выходе | Как раз перед вычислением условия продолжения цикла x принимает значение y. Заметим, что условие продолжения цикла вычисляется на один раз больше, чем выполняется тело. |
for ( x=0, y=1000; y>1; x++, y/=10 ) PRINT2(d,x,y); | |
y>1 | Условие продолжения цикла. |
y<=1 | Условие выхода их цикла. |
y=1000 | Начальное значение. |
y/=10 | Изменение. |
y=1000,100 в цикле x=0,1,2 в цикле | Перед началом цикла x=0. После выполнения тела цикла, но перед вычислением условия продолжения цикла x увеличивается. (Оператор PRINT2 находится в теле цикла.) |
y=1 на выходе x=1 на выходе |