1.3. Оператор FOR.
Как и можно было ожидать, имеется множество различных
способов написания каждой программы. Давайте рассмотрим та-
кой вариант программы перевода температур:
MAIN() /* FAHRENHEIT-CELSIUS TABLE */
{
INT FAHR;
FOR (FAHR = 0; FAHR <= 300; FAHR = FAHR + 20)
PRINTF(“%4D %6.1F\N”, FAHR, (5.0/9.0)*(FAHR-32.0));
}
Эта программа выдает те же самые результаты, но выглядит
безусловно по-другому. Главное изменение - исключение боль-
шинства переменных; осталась только переменная FAHR , причем
типа INT (это сделано для того, чтобы продемонстрировать
преобразование %D в функции PRINTF). Нижняя и верхняя грани-
цы и размер щага появляются только как константы в операторе
FOR , который сам является новой конструкцией, а выражение,
вычисляющее температуру по цельсию, входит теперь в виде
третьего аргумента функции PRINTF , а не в виде отдельного
оператора присваивания.
Последнее изменение является примером вполне общего пра-
вила языка “C” - в любом контексте, в котором допускается
использование значения переменной некоторого типа, вы можете
использовать выражение этого типа. Так как третий аргумент
функции PRINTF должен иметь значение с плавающей точкой,
чтобы соответствовать спецификации %6.1F, то в этом месте
может встретиться любое выражение плавающего типа.
Сам оператор FOR - это оператор цикла, обобщающий опера-
тор WHILE. Его функционирование должно стать ясным, если вы
сравните его с ранее описанным оператором WHILE . Оператор
FOR содержит три части, разделяемые точкой с запятой. Первая
часть
FAHR = 0
выполняется один раз перед входом в сам цикл. Вторая часть -
проверка, или условие, которое управляет циклом:
FAHR <= 300
это условие проверяется и, если оно истинно, то выполняется
тело цикла (в данном случае только функция PRINTF ). Затем
выполняется шаг реинициализации
· 19 -
FAHR =FAHR + 20
и условие проверяется снова. цикл завершается, когда это ус-
ловие становится ложным. Так же, как и в случае оператора
WHILE , тело цикла может состоять из одного оператора или из
группы операторов, заключенных в фигурные скобки. Инициали-
зирующая и реинициализирующая части могут быть любыми от-
дельными выражениями.
Выбор между операторами WHILE и FOR произволен и основы-
вается на том , что выглядит яснее. Оператор FOR обычно удо-
бен для циклов, в которых инициализация и реинициализация
логически связаны и каждая задается одним оператором, так
как в этом случае запись более компактна, чем при использо-
вании оператора WHILE , а операторы управления циклом сосре-
дотачиваются вместе в одном месте.
Упражнение 1-5.
Модифицируйте программу перевода температур таким обра-
зом, чтобы она печатала таблицу в обратном порядке, т.е. От
300 градусов до 0.
1.4. Символические константы.
Последнее замечание, прежде чем мы навсегда оставим
программу перевода температур. Прятать “магические числа”,
такие как 300 и 20, внутрь программы - это неудачная практи-
ка; они дают мало информации тем, кто, возможно, должен бу-
дет разбираться в этой программе позднее, и их трудно изме-
нять систематическим образом. К счастью в языке “C” предус-
мотрен способ, позволяющий избежать таких “магических чи-
сел”. Используя конструкцию #DEFINE , вы можете в начале
программы определить символическое имя или символическую
константу, которая будет конкретной строкой символов. Впос-
ледствии компилятор заменит все не заключенные в кавычки по-
явления этого имени на соответствующую строку. Фактически
это имя может быть заменено абсолютно произвольным текстом,
не обязательно цифрами
#DEFINE LOWER 0/* LOWER LIMIT OF TABLE */
#DEFINE UPPER 300 /* UPPER LIMIT */
#DEFINE STEP 20 /* STEP SIZE */
MAIN () /* FAHRENHEIT-CELSIUS TABLE */
{
INT FAHR;
FOR (FAHR =LOWER; FAHR <= UPPER; FAHR =FAHR + STEP)
PRINTF(“%4D %6.1F\N”, FAHR, (5.0/9.0)*(FAHR-32));
}
величины LOWER, UPPER и STEP являются константами и поэ-
тому они не указываются в описаниях. Символические имена
обычно пишут прописными буквами, чтобы их было легко отли-
чить от написанных строчными буквами имен переменных. отме-
тим, что в конце определения не ставится точка с запятой.
Так как подставляется вся строка, следующая за определенным
именем, то это привело бы к слишком большому числу точек с
запятой в операторе FOR .
· 20 -
... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...
... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...
... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...
... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...
0 комментариев