Продолжение, начало см. в МК №1-3, 5, 7, 9 (224-226, 228, 230, 232)
Здравствуйте всем, кто все еще хочет научиться программировать на Си. Мы уже поговорили о многих составляющих языка и даже написали маленькую программку. Но пока мы умеем в своих программах двигаться только по прямой (некоторую свободу дает условная (тернарная) операция, но свобода эта, к сожалению, весьма ограничена). А ведь так хочется, чтобы мы могли не только пройти по этой прямолинейной дороге до самого горизонта, но и попасть в любую точку на любой дороге...
Вот для этого мы сейчас начнем изучать всякие ответвления, разветвления и повторения. Конструкции, которые занимаются всякими разными ветвлениями, так и называются операторами ветвления или просто ветвлениями. А те, которые ответственны за всевозможные повторения, зовутся операторами цикла (или циклами). Начнем с ветвлений.
7. Попробуйте вот это
Первым из ветвлений рассмотрим самое употребительное среди них —если. Конструкция его такова:
if(условное_выражение) оператор
Или, в расширенной форме:
if(условное_выражение) оператор1 else оператор2
Это переводится так (первый вариант): «если (по-английски —if) условное_выражение не нулевое — выполни оператор». И второй вариант: «если условное_выражение не нулевое — выполни оператор1, иначе (по-английски —else), то есть, если нулевое — выполни оператор2». Вы обратили внимание, что тут нет ключевых для многих языков понятий «правда» и «неправда»? Ведь в сях и правда, и неправда — это числовые значения. Неправда равна нулю, таким образом «ненулевое» значит «не неправда», то есть за правду оператором if (да и любым другим оператором ветвления) принимаются все значения кроме нуля.
Вообще, то, что «правда» и «ложь» воспринимаются как обычные целочисленные значения, может показаться странным, если вы раньше писали на каком-нибудь языке с «традиционной» трактовкой логики, но если привыкнуть (а привыкнуть несложно), то это дает дополнительные возможности. Простой пример: надо вам приписать к числу слева единичку, но только в том случае, если оно одноцифренное. Пишете так: x+=10*(x<10). Если икс меньше десяти (одноцифренный), то в скобках будет 1, и таким образом прибавится десять; если же икс многоцифренный — в скобках ноль, и не прибавится ничего.
Но вернемся к нашему Ифу (не замку, а оператору). В его контексте численность логики чаще всего используется для сравнений на ноль/не ноль: if(a) вместо if(a!=0) и if(!a) вместо if(a==0). Вы можете, конечно, написать и что-то вроде if(a-b) там, где надо if(a!=b), но незачем. Общепринятые же сокращения удобны для читабельности программы, особенно когда уже есть привычка к «числовой правде».
Может быть, вас смущает то, что, судя по моей записи, «при условии» может быть выполнен всего один оператор? В таком случае вспомните про составные операторы, а именно: если вам в конкретном случае нужен не один оператор, а несколько — просто запихните их все в общие фигурные скобки.
Как видите, оператор «если» не зря считается самым простым ветвлением — он и в самом деле достаточно прост. Теперь давайте перепишем нашу программку из предыдущей части с использованием этого ветвления:
`#include void main() { int a,b; printf("Введите два целых числа через пробел: "); scanf("%d%d",&a,&b); if(a>b) printf("Первое число больше второго.\n"); else if(ab) printf("Первое число больше второго.\n"); if(a. Сишная часть этого перевода может пригодиться и жителям других ОСей, ибо, как я уже говорил, основная часть языка независима от системы. Опять же, для непосвященных рассказываю, как пользоваться: для справки по какой-то конкретной функции вам нужна страница с именем типа имя_функции.3; 3 — номер раздела манов, в котором лежат все сишные доки.
Все книги, которые я перечислил выше, наверняка есть в электронных версиях где-то в Инете; Гугль его знает, где.
