Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык C. Ч4.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
92 Кб
Скачать
☆

Int main(void)

{

const double SCALE = 0.333; // еще один вид символической константы

double shoe, foot;

printf("Размер обуви (мужской) длина ступни\n");

shoe = 3.0;

while (shoe < 18.5) /* начало цикла while*/

{ /* start of block */

foot = SCALE * shoe + ADJUST;

printf("%10.1f %15.2f дюймов\n", shoe, foot);

shoe = shoe + 1.0;

} /* конец блока */

printf("Если обувь подходит, носите ее.\n");

return 0;

}

Вот как выглядит сжатая версия вывода программы shoes2 .с:

обуви (мужской)

длина ступни

3.0

8.31 дюймов

4 . 0

8.64 дюймов

5.0

8.97 дюймов

6.0

9.31 дюймов

16.0

12.64 дюймов

17.0

12.97 дюймов

18.0

13.30 дюймов

Если обувь подходит, носите ее.

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

shoe < 18.5

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

shoe = shoe + 1.0;

В этой точке управление возвращается к порции while, чтобы проверить условие. Но почему именно в этой точке? Причина в том, что в следующей строке находится закрывающая фигурная скобка (}), а код использует пару таких скобок ({}) для обозначения границ цикла while. Операторы, находящиеся между двумя фигурными скобками, повторяются. Раздел программы внутри фигурных скобок и сами фигурные скобки называются блоком. А теперь вернемся к программе. Значение 4.0 меньше 18.5, поэтому все операторы, заключенные в фигурные скобки (блок), следующие за while, повторяются. (На компьютерном жаргоне можно сказать, что программа “проходит в цикле” по этим операторам.) Это продолжается до тех пор, пока переменная shoe не достигнет значения 19.0. Тогда условие shoe <18.5 получает значение false, потому что 19.0 не меньше 18.5. Как только это произойдет, управление передается первому оператору, следующему за циклом while. В данном случае им является финальный оператор printf ().

Рассмотренную программу можно легко модифицировать для выполнения других преобразований. Например, установив SCALE в 1.8 и ADJUST в 32.0, вы получите программу, которая преобразует значение температуры по Цельсию в значение по Фаренгейту. Присвоив SCALE значение 0.6214 и ADJUST — 0, вы реализуете преобразование километров в мили. Естественно, понадобится также соответствующим образом изменить выводимые сообщения. Цикл while предоставляет в ваше распоряжение удобное и гибкое средство управления внутри программы. Теперь давайте перейдем к ознакомлению с фундаментальными операциями, которые вы можете применять в своих программах.

Фундаментальные операции

Для представления арифметических действий в языке С используются операции. Например, операция + вызывает сложение двух значений, находящиеся по обе стороны символа операции. Если термин операция кажется вам странным, подумайте о том, что вещи такого рода должны как-то называться. “Операция” представляется более удачным вариантом, чем, скажем, “эта вещь” или “арифметический транзактор”. Теперь рассмотрим операции, применяемые для базовой арифметики: =, * и /.

Операция присваивания =

В языке С знак = не означает “равно”. Вместо этого им обозначается операция присваивания значения. Например, следующий оператор присваивает значение 2002 переменной по имени bmw:

bmw = 2002;

То есть элемент, расположенный слева от знака =, представляет собой имя переменной, а элемент справа — значение, присваиваемое этой переменной. Символ = называется операцией присваивания. Еще раз: ни в коем случае не думайте, что эта строка гласит: “переменная bmw равна 2 002”. Взамен читайте ее так: “присвоить переменной bmw значение 2 002". Для этой операции действие происходит справа налево.

Возможно, такое различие между именем переменной и ее значением выглядит запутанным, но взгляните на следующий типичный пример оператора:

i = i + 1;

С точки зрения математики этот оператор не имеет смысла. После прибавления 1 к конечному числу результат не может быть “равен” исходному числу, однако как компьютерный оператор присваивания он совершенно корректен. Его смысл таков: “извлечь значение переменной по имени i, добавить 1 к этому значению и затем присвоить новое значение переменной i” (рис. 5.1).

Оператор наподобие

2002 = bmw;

в С не имеет смысла (и, разумеется, не является допустимым), т.к. 2002 — это то, что в языке С называется значением, которое в данном случае представляет собой просто литеральную константу. Присвоить значение константе невозможно; она уже является эквивалентом значения. Следовательно, не забывайте, что элемент слева от знака = должен быть именем переменной.

Базовая операция присваивания в языке С несколько отличается от других операций. Рассмотрим короткую программу, показанную в листинге 5.3.

Листинг 5.3. Программа golf.с

/* golf.c -- таблица результатов турнира по гольфу*/

#include <stdio.h>