Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бочков C.. Язык программирования Си для персонального компьютера - royallib.ru.doc
Скачиваний:
39
Добавлен:
11.03.2016
Размер:
901.98 Кб
Скачать

Оператор-выражение

Синтаксис:

<выражение >;

Действие:

<Выражение > вычисляется в соответствии с правилами, изложенными в разделе 4 "Выражения". Отличие оператора-выражения состоит в том, что значение содержащегося в нем выражения никак не используется. Кроме того, он может быть записан лишь там, где по синтаксису допустим оператор.

Примеры:

х = у+3; /*пример 1*/

х++; /*пример 2*/

f(x); /*пример 3*/

В первом примере х присваивается значение у+3 . Во втором примере х инкрементируется.

В третьем примере показано выражение вызова функции. Если функция возвращает значение, то обычно оператор-выражение содержит операцию присваивания, чтобы запомнить значение, возвращаемое вызванной функцией. В данном примере возвращаемое значение не используется.

Условный оператор if

Синтаксис:

if(<выражение >)

<оператор1 >

[else

< оператор2 > ]

Действие:

Тело условного оператора if выполняется в зависимости от значения <выражения >.

Сначала вычисляется <выражение >. Если значение выражения истинно (не равно нулю), то выполняется <оператор1 >. Если же значение выражения ложно, то выполняется <оператор2 >, непосредственно следующий за ключевым словом else .

Если значение <выражения > ложно, но конструкция else опущена, то управление передается на оператор, следующий в программе за оператором if .

Пример:

if(i > 0)

У = х/i;

else {

х = 1;

у = f(x);

}

В примере, если i больше нуля, выполняется оператор у=x/i; . Если i меньше или равно нулю, то значение i присваивается переменной х , а значение, возвращаемое функцией f(x) , присваивается переменной у .

Вложенность

Оператор if может быть вложен в <оператор1 > или <оператор2 > другого оператора if . При вложении операторов if рекомендуется для ясности группирования операторов использовать фигурные скобки, ограничивающие <оператор1 > и <оператор2 >.

Если же фигурные скобки отсутствуют, то компилятор ассоциирует каждое ключевое слово else с ближайшим оператором if , у которого отсутствует конструкция else .

На ключевое слово if можно поставить метку, а на ключевое слово else — нельзя (однако можно поставить метку на <оператор2 >, следующий за else ).

Примеры.

/* пример 1 — без скобок */

if(i > 0)

if(j > i)

x = j;

else x = i;

/* пример 2 со скобками */

if(i > 0) {

if(j > i)

x = j;

}

else

x = i;

В первом примере ключевое слово else ассоциируется с внутренним условным оператором if . Если i меньше или равно нулю, то переменной х ничего не присваивается.

Во втором примере фигурные скобки ограничивают внутренний условный оператор if и тем самым делают конструкцию else частью внешнего условного оператора if . Если i меньше или равно нулю, то переменной х присваивается значение i .

Оператор пошагового цикла for

Синтаксис:

for([<начальное-выражение >]; [<условное-выражение >]; [<выражение-приращения >])

< оператор >

Действие:

Тело оператора цикла for выполняется до тех пор, пока <условное-выражение > не станет ложным. Если оно изначально ложно, то тело цикла не будет выполнено ни разу. <Начальное-выражение > и <выражение-приращения > обычно используются для инициализации и модификации параметров цикла или других значений.

Первым шагом при выполнении оператора цикла for является вычисление начального выражения, если оно имеется. Затем вычисляется условное выражение и производится его оценка следующим образом:

1) Если условное выражение истинно (не равно нулю), то выполняется тело оператора. Затем вычисляется выражение приращения (если оно есть), и процесс повторяется.

2) Если условное выражение опущено, то его значение принимается за истину и процесс выполнения продолжается, как описано выше. В этом случае оператор цикла for представляет бесконечный цикл, который может завершиться только при выполнении в его теле операторов break , goto , return .

3) Если условное выражение ложно, то выполнение оператора for заканчивается и управление передается следующему за ним оператору в программе. Оператор for может завершиться и при выполнении операторов break , goto , return в теле оператора.

Пример:

for(i = space = tab = 0; i < MAX; i++) {

if(line[i] == '\x20')

space++;

if(line[i] =='\1'){

lab++;

line[i] = '\x20';

}

}

В приведенном примере подсчитываются символы пробела ('\x20') и горизонтальной табуляции ('\1') в массиве символов с именем line и производится замена каждого символа горизонтальной табуляции на пробел.

Сначала i , space и tab инициализируются нулевыми значениями. Затем i сравнивается с константой МАХ. Если i меньше МАХ, то выполняется тело оператора. В зависимости от значения line[i] выполняется тело одного из операторов if (или ни одного из них). Затем переменная i инкрементируется и снова сравнивается с именованной константой МАХ. Тело оператора выполняется до тех пор, пока значение i не станет больше или равно МАХ.