Шрифт:
Вообще говоря, вы не должны смешивать типы; вот почему в некоторых языках это запрещено. Но бывают ситуации, когда это оказывается полезным. Философия языка Си заключается в том, чтобы не устанавливать барьеров на вашем пути, но при этом возложить на вас всю ответственность за злоупотребление предоставленной свободой.
Резюме: операции в языке Си
Ниже перечислены операции, которые мы уже обсудили.
= Присваивает величину справа от знака переменной слева от него
+ Прибавляет величину справа от знака к величине слева от него
– Вычитает величину справа от знака из величины слева от него
– Унарная операция, изменяет знак величины справа от знака
* Умножает величину справа от знака на величину слева от него
/ Делит величину слева от знака на величину справа от него.
Результат усекается, если оба операнда целые числа
% Дает остаток при делении величины слева от знака на величину
справа от него (только для целых чисел)
++ Прибавляет 1 к значению переменной слева от знака (префиксная форма)
или к значению переменной справа от знака (постфиксная форма)
-- Аналогичная операции ++, но вычитает 1
sizeof Дает размер операнда, стоящего справа, в байтах.
Операнд может быть спецификацией типа, заключенного в круглые скобки,
как, например, sizeof (float), или именем конкретной переменной,
массива и т. п., например sizeof foo
(тип) Операция приведения: приводит величину, стоящую справа, к типу,
определяемому ключевым словом (или словами) в скобках. Например,
(float)9 преобразует целое число 9 в число с
плавающей точкой 9.0.
ПРИМЕР ПРОГРАММЫ
На рис. 5.8 приведена программа, которая может оказаться полезной тем, кто занимается бегом, и которая иллюстрирует некоторые положения данной главы. Она выглядит довольно длинной, но все вычисления в ней выполняются шестью операторами, помещенными в конце. Большей частью программа занимается организацией диалога между машиной и пользователем. Мы ввели в программу достаточно большое число комментариев, чтобы сделать ее почти самодокументируемой. Просмотрите ее, а затем мы объясним некоторые ее моменты.
/* бег */
# define SM 60 /* число секунд в минуте */
# define SH 3600 /* число секунд в часе */
# define МК 0.62137 /* число миль в километре */
main
{
float distk, distm; /* дистанция в км и милях */
float rate; /* средняя скорость в милях в час */
int min, sec; /* время бега в минутах и секундах */
int time; /* время бега в секундах */
float mtime; /* время пробега одной мили в секундах */
int mmin, msec; /* время пробега одной мили в минутах и секундах */
printf(" Эта программа пересчитывает ваше время пробега дистанции, выраженной в км, \n");
printf(" во время, требуемое для пробега одной мили, и вашу среднюю \n");
printf(" скорость в милях в час,\n");
printf(" Укажите, пожалуйста, дистанцию в километрах.\n");
scanf(" %f ", &distk);
printf(" Введите затем время в минутах и секундах. \n ");
printf(" Начните с ввода минут. \n");
scanf(" %d", &min);
printf(" Теперь вводите секунды. \n");
scanf(" %d", &sec);time = SM * mm + sec; /* переводит время в секунды */
distm = MK * distk; /* переводит километры в мили */