ЖАНРЫ

Язык Си - руководство для начинающих

Д. МАРТИН

Шрифт:

7. Выбор вариантов

Хотите научиться создавать мощные, "интеллектуальные", универсальные и полезные программы? Тогда вам потребуется язык, обеспечивающий три основные формы управления процессом выполнения программ. Согласно теории вычислительных систем (которая является наукой о вычислительных машинах, а не наукой, создаваемой такими машинами), хороший язык должен обеспечивать реализацию следующих трех форм управления процессом выполнения программ:

1. Выполнение последовательности операторов.

2. Выполнение определенной последовательности операторов до тех пор, пока некоторое условие истинно.

3. Использование проверки истинности условия для выбора между различными возможными способами действия.

ОПЕРАТОР if

Начнем с очень простого примера. Мы уже видели, как нужно написать программу, подсчитывающую число символов в файле. Предположим, вместо символов мы хотим подсчитать строки. Это можно сделать путем счета числа символов "новая строка" в файле. Ниже приводится соответствующая программа:

/* подсчет строк */

#include < stdio.h>

main

{

int ch;

int linecount = 0;

while((ch = getchar) != EOF)

if(ch =='\n')

 linecount ++;

printf(" Янасчитала%d строк\n", linecount);

}

Сердцевиной" программы является оператор

if(ch == '\n') linecount ++;

Этот "оператор if" служит указанием компьютеру увеличить значение переменной linecount на 1, если только что прочитанный символ (содержимое переменной ch) представляет собой символ "новая строка". Знак == не является опечаткой; его смысл выражается словами "равняется". Не путайте эту операцию с операцией присваивания (=).

Что происходит в случае, когда значение переменной ch не является символом "новая строка"? Тогда в цикле while производится чтение следующего символа.

Оператор if, который мы только что применили в программе, считается одиночным оператором, начинающимся от ключевого слова if и завершающимся символом "точка с запятой". Вот почему мы не использовали фигурные скобки, чтобы отметить начало и конец тела цикла while.

Совсем несложно усовершенствовать программу так, чтобы она подсчитывала символы и строки одновременно; давайте попробуем это сделать.

/* 1cс - подсчет числа строк и символов */

#include

 main

{

int ch;

int linecount = 0;

int charcount = 0;

while((ch = getchar) != EOF)

{

charcount ++ ;

if(ch == '\n' ) linecount++ ;

}

printf(" Я насчитала %d символов и %d строк.\n", charcount, linecount);

}

Теперь в цикл while входят два оператора; поэтому мы использовали фигурные скобки, чтобы отметить начало и конец тела цикла.

Мы вызываем скомпилированную программу Icc и используем операцию переключения, чтобы подсчитать число символов и строк в файле с именем chow.

Ice <chow Я насчитала 8539 символов и 233 строки

Следующий шаг в "развитии" этой программы - придание ей способности подсчитывать число слов. Это лишь немного труднее того, что мы делали до сих пор, но сначала нам нужно изучить ряд дополнительных вопросов, связанных с использованием операторов if.

РАСШИРЕНИЕ ОПЕРАТОРА if С ПОМОЩЬЮ else

Простейшей формой оператора if является та, которой мы только что воспользовались:

if(выражение)оператор

Обычно под выражением здесь понимают условное выражение, с его помощью сравниваются значения двух величин (например x > y или c == 6). Если такое выражение истинно (x больше у или c равно 6), то оператор выполняется. В противном случае он пропускается. Вообще говоря, в качестве условия может быть использовано любое выражение, и если его значение равно 0, то оно считается ложным– дальнейшие детали мы обсудим чуть позже. Оператор может быть простым, как в нашем примере, или составным (блоком), начало и конец которого отмечены фигурными скобками:

if (score > big) printf(" Полная победа!\n"); /* простой оператор */

 if (jое > rоn) /* составной оператор */

{

joecash + + ; printf(" Ты проиграл, Рон.\n");

}

Простая форма оператора if позволяет выбрать оператор (возможно, составной) или пропустить его. Язык Си предоставляет также возможность выбрать любой из двух операторов путем использования конструкции if-else.

Выбор: конструкция if-else

В предыдущей главе мы привели очень простую программу шифровки сообщений, которая заменяла каждый символ следующим по порядку в таблице ASCII. К сожалению, она заменила даже символ "новая строка", что привело к объединению нескольких строк в одну. Можно исключить эту проблему, написав программу, реализующую простой выбор: если символ - "новая строка", то оставить его без изменений, в противном случае преобразовать его. Вот как это можно запрограммировать на языке Си:

/* код1 */

#include

 main

{

char ch;

while((ch = getchar) != EOF)

 {

if(ch =='\n' ) /* оставить символ */

putchar(ch); /* "новая строка" неизменным */

else

putchar(ch + 1); /* заменить остальные символы */

Поделиться с друзьями: