Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мова програмування С.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
489.95 Кб
Скачать

1.3 Твердження for

Існує багато способів написання програми для вирішення одного і того ж завдання. Тож, спробуймо інший варіант перетворювача температур.

#include <stdio.h>

/* виводить таблицю Фаренгейт-Цельсій */

main()

{

int fahr;

for (fahr = 0; fahr <= 300; fahr = fahr + 20)

printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

}

Це спричиняє ті самі відповіді, але, без сумніву, виглядає інакше. Одна з основних перемін — це видалення більшості змінних; залишилась тільки fahr, і ми оголосили її як int. Верхня й нижня межа та крок представлені як константи у твердженні for, — нової для нас конструкції. Вираз, що обчислює температуру за Цельсієм, з'являється як третій аргумент printf, замість окремого виразу присвоєння.

Ця остання зміна є прикладом загального правила — у будь-якому контексті, де вживається значення певного типу, ви можете використати складніший вираз того самого типу. Оскільки третім аргументом printf має бути число з рухомою точкою, щоб зійтися з %6.1f, то будь-який вираз, що повертає число з рухомою точкою, може зайняти це місце.

Твердження for також є циклом — узагальненим випадком while. Якщо ви порівняєте його з попереднім while, то робота for стане зрозумілою. Всередині дужок існують три частини, розділені крапкою з комою. Перша частина, ініціалізація

fahr = 0

відбувається один раз, ще до того, як увійти до циклу. Друга частина — це перевірка умови, яка контролює цикл:

fahr <= 300

Ця умова обчислюється; якщо вона істинна, буде виконано корпус циклу (в цьому випадку один вираз printf). Після цього виконується стадія приросту

fahr = fahr + 20

і умова оцінюється знову. Цикл завершиться тільки тоді, коли умова виявиться хибною. Так само як і з while, корпус циклу може містити одне твердження або групу тверджень, включених у фігурні дужки. Ініціалізацією, умовою та приростом може служити будь-який вираз.

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

Вправа 1-5. Змініть програму перетворення температур, щоб вона виводила таблицю у зворотній послідовності, тобто від 300 градусів до 0.

1.4 Символічні константи

Останнє спостереження, до того як ми назавжди залишимо програму перетворення температур. Вважається поганою практикою закопувати «магічні числа», такі як 300 та 20 десь всередині програми; вони мало про що кажуть тим, хто переглядає програму пізніше, і їх важко змінити у систематичний спосіб. Одним з рішень питання про «магічні числа» є надання їм осмислених імен. Рядочок #define означує символічну назву або символічну константу для ланцюжка якихось знаків:

#define назва заміна

Таким чином, будь-яку появу назви (не в лапках, і не як частина іншої назви) буде замінено на відповідний текст заміни. Назва має ту саму форму, що й назва змінних: послідовність літер і цифр, що починаються з літери. Текст заміни може складатися з довільної послідовності знаків; він не обмежений тільки числами.

#include <stdio.h>

#define LOWER 0 /* нижня межа температурної шкали */

#define UPPER 300 /* верхня межа */

#define STEP 20 /* розмір кроку */

/* виводить таблицю Фаренгейт-Цельсій */

main()

{

int fahr;

for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)

printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));

}

Величини LOWER, UPPER та STEP — це символічні константи, а не змінні, тож вони не з'являються в оголошеннях. Назви символічних сталих традиційно пишуться з великих літер, щоб легко було відрізнити їх від назв змінних у нижньому регістрі. Зверніть увагу, що крапки з комою немає в кінці рядка #define.