Константы
Некоторые значения никогда не меняются, пока программа работает: ставка НДС, число дней в неделе, максимум баллов за тест. Для них в C есть константы. Константа — это переменная с const перед ней:
const double VAT_RATE = 0.21;const (от constant, «постоянная») означает, что значение менять нельзя. Константа получает значение при создании и хранит его до конца программы. Константы пишут заглавными буквами (UPPER_CASE) с подчёркиваниями между словами, чтобы с первого взгляда было видно, что имя принадлежит константе.
Почему бы просто не написать 0.21 прямо в вычислении? Есть три веские причины:
- Имя объясняет число.
price * VAT_RATEговорит, что происходит; сprice * 0.21приходится гадать. - Если ставка изменится, вы поменяете её в одном месте, и изменятся все вычисления, которые её используют.
- Компилятор следит за этим. Если вы случайно измените константу, программа не скомпилируется.
#include <stdio.h>
int main(void) {
const double VAT_RATE = 0.21;
VAT_RATE = 0.15;
printf("%.2f\n", VAT_RATE);
return 0;
}Компилятор сообщает:
main.c:5:14: error: cannot assign to variable 'VAT_RATE' with const-qualified type 'const double'Он говорит, что присвоить VAT_RATE новое значение нельзя, потому что её тип — const double. В остальном константу используют как любую другую переменную:
const double VAT_RATE = 0.21;
double price = 40.0;
printf("НДС: %.2f EUR\n", price * VAT_RATE);Выведется:
НДС: 8.40 EURА как вывести знак процента? В printf знак % начинает спецификатор формата, например %d. Чтобы вывести сам знак, напишите его дважды, %%:
printf("Ставка НДС: %d%%\n", 21);Выведется:
Ставка НДС: 21%Если поставить только один %, как в "Ставка НДС: 21%\n", программа не скомпилируется. Компилятор сообщает invalid conversion specifier '\x0a': после % он ожидал букву вроде d, а нашёл перевод строки (\x0a — так он записывает \n).
Задание
- 1
Максимум за тест — 50 баллов. В начале
mainсоздайте константуMAX_POINTSтипаintсо значением50. - 2
Измените
printfтак, чтобы он выводил и максимум, взятый из константы:Баллов: 42 из 50 - 3
На следующей строке выведите результат в процентах: баллы, умноженные на 100 и разделённые на
MAX_POINTS. Сначала умножайте:42 / 50само по себе равно 0, как вы знаете. Знак процента выведите с помощью%%:Результат: 84%