Всё для программиста

Глава 5
Индекс материала
Глава 5
ОСНОВНЫЕ ОПЕРАЦИИ
Операция сложения: +
Операция вычитания: -
Операция умножения: *
Операция деления: /
Порядок выполнения операций
НЕКОТОРЫЕ ДОПОЛНИТЕЛЬНЫЕ ОПЕРАЦИИ
Операции увеличения и уменьшения: ++ и --
Операция уменьшения: --
Старшинство операций
Не будьте слишком умными
ВЫРАЖЕНИЯ И ОПЕРАТОРЫ
Составные операторы (блоки)
Резюме: выражения и операторы
ПРЕОБРАЗОВАНИЕ ТИПОВ
Операция приведения
Резюме: операции в языке Си
ПРИМЕР ПРОГРАММЫ
ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ
ВОПРОСЫ И ОТВЕТЫ
Все страницы

Операции, выражения и операторы

КЛЮЧЕВЫЕ СЛОВА
while


ОПЕРАЦИИ
+  -  *  /  %  ++  --  (тип)

В гл 3 и 4 мы говорили о типах данных, используемых в языке Си. Здесь же мы рассмотрим способы обработки данных - для этого язык Си имеет широкий набор возможностей. Начнем с основных арифметических операций сложения, вычитания, умноже ния и деления. Чтобы сделать наши программы более интересными и поучительными, мы впервые в этой главе коснемся циклов. А пока, чтобы ввести вас в курс дела, приведем простую программу, выполняющую несложные арифметические действия

/* размер обуви1 */
#define OFFSET 7 64
#define SCALE 0 325
main( )
{
/* пересчет размера обуви в размер ноги в дюймах */
float shoe, foot;
shoe =90;
foot = SCALE*shoe + OFFSET,
printf(" Размер обуви (мужской) размер ноги\n"),
printf(" %10 lf %13 2f дюйм\n" , shoe, foot),
}

Здорово в нашей программе выполняется умножение и сложе ние, т.е. берется ваш размер обуви (если вы носите размер 9), а вам сообщается длина стопы в дюймах. Вы скажете, что могли бы решитъ данную задачу в уме за меньшее время, чем потребовалось для вода самой программы в машину. Это, конечно, правильно. Создание программы, способной оперировать только одним размером обуви, выглядит как ненужная трата времени и усилий. Мы бы придать программе большую эффективность, сделав ее диалоговой, но и это окажется непроизводительным использовани ем возможностей машины.

Нам нужно лишь каким то образом заставить компьютер выполнить повторяющиеся вычисления. Вообще говоря, именно эта по является одной из главных причин использования машин. Для выполнения арифметических вычислений. Язык Си предлагает несколько способов реализации повторяющихся вычислений, сейчас обсудим один из них. Данный способ, называемый "while", дает возможность использовать операторы языка более интересным образом. Ниже приводится модификация нашей программы, занимающейся пересчетом размеров обуви.

/* размер обуви2 */ 
#define OFFSET 7 64
#define SCALE 0 325
main()
{
/* пересчет размера обуви в размер ноги в дюймах */
float shoe, foot;
printf("Размер обуви (мужской) размер ноги\n");
shoe = 3.0;
while(shoe < 18.5)
{
foot = SCALE *shoe + OFFSET;
printf(" %10 lf %13 2f %l6 2f дюйма\n" , shoe, foot);
shoe = shoe + 1.0;
}
printf"'Ecли эта обувь годится вам, носите ее \n");
}

Вот результат работы программы, размер обуви2, приведенный в сокращеннoм виде.

Размер обуви (мужской)                     Размер ноги
3.01 8.61 дюйма
4.0 8.94 дюйма
... ...
... ...
17.0 13.16 дюйма
18.0 13.46 дюйма

Если эта обувь годиться вам, носите ее.

(Значения констант для данной программы пересчета были по лучены во время нашего визита инкогнито в обувной магазин. В единственном обнаруженном там классификаторе размеров приво дились данные только относительно мужской обуви. Лица, интере сующиеся размерами женской обуви, должны посетить обувной магазин сами).

Цикл while работает следующим образом. Когда программа в процессе выполнения впервые достигает оператора while, осушествляется проверка истинности условия, заключенного в круглые скобки. В этом случае соответствующее выражение имеет вид:

shoe < 18.5

где символ < означает "меньше". Вначале переменная shoe была инициализирована значением 3.0, которое, как видно, меньше 18.5. Поэтому данное условие истинно, и осуществляется переход к следующему оператору, который переводит размер обуви в дюймы. После этого результаты выводятся на печать. Следующий оператор

shoe = shoe + 1.0;

увеличивает значение переменной shoe на 1.0, делая его равным 4.0. В этом месте программы происходит возврат к началу фрагмента while, где вышеупомянутое условие проверяется вновь. По чему именно здесь? Это происходит потому, что следующей строкой программы является закрывающая фигурная скобка } - тело цикла while заключено в фигурные скобки. Операторы, располо женные между ними, являются той частью программы, которая может выполняться повторно. Теперь давайте вернемся к нашей программе: 4 меньше 18.5 ? Безусловно Поэтому весь набор операторов, заключенный в фигурные скобки и следующий за ключевым словом while, выполнится опять. (Специалисты по вычислительной технике в этом случае говорят, что программа выполняет эти операторы "в цикле"). Это продолжается, пока значение переменной shoe не достигнет величины 19.0. Когда условие

shoe < 18.5

станет ложным, поскольку 19.0 не меньше 18.5. При этом произойдет передача управления оператору, следующему сразу за телом цикла while. В нашем случае им является завершающий оператор printf().

Вы можете легко модифицировать эту программу, чтобы она осуществляла другие преобразования. Например, замените значение константы SCALE на 1.8, а константы OFFSET - на 32.0, и вы изучите программу, которая переводит температуру по Цельсию в температуру по Фаренгейту. Если заменить значение SCALE на 0.6214, a OFFSET на 0, то программа будет переводить мили в километры. Производя эти изменения, вы, по видимому, во избежание путаницы должны будете поменять также и печатаемые сообщения.

Цикл while служит удобным и гибким средством управления выполнения программы. Вернемся теперь к обсуждению набора основных операций, которые мы можем использовать в программах.