3 8 Часть I. Структурное программирование
то выражение а + b имеет значение 7 и тип 1nt, а выражение а = b имеет значение,
равное помещенному в переменную а (в данному случае 5) и тип, совпадающий
с типом этой переменной. Таким образом, в C++ допустимы выражения вида
а = b = с: сначала вычисляется выражение b = с, а затем его результат становится
правым операндом для операции присваивания переменной а.
В выражение могут входить операнды различных типов. Если операнды имеют
одинаковый тип, то результат операции будет иметь тот же тип. Если операнды
разного типа, перед вычислениями выполняются преобразования типов по определенным
правилам, обеспечивающим преобразование более коротких типов
в более длинные для сохранения значимости и точности.
Преобразования бывают двух типов:
• изменяющие внутреннее представление величин (с потерей точности или без
потери точности);
• изменяющие только интерпретацию внутреннего представления.
К первому типу относится, например, преобразование целого числа в вещественное
(без потери точности) и наоборот (возможно, с потерей точности), ко второму
— преобразование знакового целого в беззнаковое.
В любом случае величины типов char, signed char, unsigned char, short int и
unsigned short int преобразуются в тип int, если он может представить все значения,
или в unsigned int в противном случае.
После этого операнды преобразуются к типу наиболее длинного из них, и он используется
как тип результата. Правила преобразований приведены в приложении
3.
Программист может задать преобразования типа явным образом (об этом рассказывается
в разделе «Преобразования типов» на с. 231).
Итак, мы потратили достаточно много времени, рассматривая самый нижний
уровень конструкций, составляющих язык программирования, и теперь пора начинать
строить из них нечто более осмысленное — сначала отдельные операторы,
а затем программы. Даже самая простая программа должна создаваться по определенным
правилам, тогда она будет надежна, эффективна и красива. Изучением
этих правил мы и займемся в следующем разделе.
29.
int rand (void);
Она генерирует псевдослучайное целое число на интервале значений от 0 до RAND_MAX. Последнее является константой, которая варьируется в зависимости от реализации языка, но в большинстве случаев составляет 32767. А что если нам нужны случайные числа от 0 до 9? Типичный выход из ситуации – использование операции деления по модулю.
rand() % 10
Если нам нужны числа от 1 (а не от 0) до 9, то можно прибавить единичку…
rand() % 9 + 1
30.
Локальные переменные представляют собой переменные, объявленные внутри функции. Локальные переменные известны только той функции, внутри которой они объявлены. Несколько функций могут использовать одно и то же имя для локальной переменной без каких-либо конфликтов. Глобальная переменная представляет собой переменную, чье имя и значение известны на протяжении всей программы. Чтобы объявить глобальную переменную, объявите переменную в начале вашего исходного файла вне какой-либо функции. Поскольку глобальные переменные могут быть легко изменены любой функцией, они привносят возможность появления трудно обнаруживаемьгх ошибок, поэтому избегайте использования глобальных переменных в своих программах.
31.
Переменная — это именованный участок памяти, в котором хранится значение, которое может быть изменено программой. Все переменные перед их использованием должны быть объявлены. Общая форма объявления[1] имеет такой вид:
тип список_переменных;
Здесь тип означает один из базовых или объявленных программистом типов (если необходимо — с одним или несколькими спецификаторами), а список_переменных состоит из одного или более идентификаторов, разделенных запятыми. Ниже приведены примеры объявлений:
int i,j,l;
short int si;
unsigned int ui;
double balance, profit, loss;
Необходимо помнить, что в С имя переменной никогда не определяет ее тип.
