- •Предисловие.
- •1. Введение.
- •1.1. История создания языка си.
- •1.2. Стандарты языка си.
- •2. Основные сведения, необходимые для создания программ на языке си.
- •2.1 Процесс создания исполняемого файла.
- •2.2 Распределение памяти программы.
- •2.3 Некоторые основные понятия.
- •2.4 Данные.
- •2.5 Структура простой программы.
- •3. Определение размеров типов данных и объектов.
- •4. Строки и строковые константы.
- •5. Директива препроцессора # define.
- •6. Функции форматированного ввода – вывода.
- •6.1 Функция форматированного вывода printf().
- •6.2 Функция форматированного ввода scanf().
- •7. Операции и операторы.
- •7.1 Арифметические операции
- •7.4 Порядок выполнения операций.
- •8. Выражения и операторы
- •8.1 Выражения.
- •8.2 Операторы.
- •8.3 Составные операторы.
- •8.4 Преобразование типов.
- •8.5 Операция приведения типов.
- •9. Функции ввода и вывода символов.
- •9.1 Функции getchar() и putchar().
- •9.2 Функции getch() и getche().
- •9.3 Ввод и вывод последовательности символов.
- •9.4 Подсчет символов, вводимых с клавиатуры.
- •9.5 Вывод символов из вводимого с клавиатуры файла.
- •9.6 Переключение ввода-вывода данных.
- •10. Принятие решений.
- •10.1 Оператор если (if).
- •10.2 Оператор если - иначе (if else).
- •10.3 Множественный выбор на основе операторов if, else.
- •10.5 Приоритеты операций отношения.
- •10.6 Логические операции (and, or, not).
- •10.7 Операция условия ?:.
- •10.8 Множественный выбор на основе операторов switch, break, default.
- •11. Циклы.
- •11.1 Цикл пока (while).
- •11.2 Цикл для (for).
- •11.4 Операция запятая ,.
- •11.5 Цикл делай пока (do while).
- •11.6 Вложенные циклы.
- •11.7 Операторы выход из структуры (break), продолжение (continue), безусловный переход (to go).
- •Литература.
- •Оглавление.
8.5 Операция приведения типов.
Вообще говоря, нельзя смешивать типы; вот почему в некоторых языках это запрещено. Но бывают ситуации, когда это оказывается полезным. Философия языка Си заключается в том, чтобы не устанавливать барьеров на вашем пути, но при этом возложить на вас всю ответственность за злоупотребление предоставленной свободой.
Существует возможность точно указывать тип данных, к которому необходимо привести некоторую величину. Этот способ называется «приведением типов» и используется следующим образом: перед данной величиной в круглых скобках записывается имя требуемого типа. Скобки и имя типа вместе образуют операцию приведения. В общем виде она записывается (тип), где фактическое имя требуемого типа подставляется вместо слова "тип".
***************************************************************
/* ФРАГМЕНТ ПРОГРАММЫ:
/*=============*/
int mice;
mice = 1.6 + 1.7; /* строка 1 */
mice = (int)1.6 + (int)l.7; /* строка 2 */
/*=============*/
РЕЗУЛЬТАТ РАБОТЫ ФРАГМЕНТА ПРОГРАММЫ.
mice = 3
mice = 2
ПОЯСНЕНИЯ К ФРАГМЕНТУ ПРОГРАММЫ.
-
Строка 1. Сначала числа 1.6 и 1.7 складываются. Результат равен 3.3. Затем путем отбрасывания дробной части полученное число преобpaзyeтcя в 3 для согласования с типом int переменной mice.
-
Строка 2. 1.6 и 1.7 преобразуются в целые числа 1, так что переменной mice присваивается значение, равное 1+1, или 2.
***************************************************************
ПРИМЕЧАНИЕ.
Существует еще один вид преобразования типов. Для сохранения точности вычислений при арифметических операциях все величины типа float преобразуются в данные типа double. Это существенно уменьшает ошибку округления. Конечный результат, естественно, преобразуется обратно в число типа float, если это диктуется соответствующим оператором описания.
/* ПРОГРАММА:
run.c – бег.
*/
/*#############################################*/
/*============================= include */
#include<stdio.h>
/*============================= define */
# define SM 60 /* число секунд в минуте */
# define SH 3600 /* число секунд в часе */
# define МК 0.62137 /* число миль в километре */
/*============================= main() */
main()
{/*.---------------------------.begin main() */
/*------------- Описание переменных */
float distk, distm; /* дистанция в км и милях */
float rate; /* средняя скорость в милях в час */
int min, sec; /* время бега в минутах и секундах */
int time; /* время бега в секундах */
float mtime; /* время пробега одной мили в секундах */
int mmin, msec; /* время пробега одной мили в минутах и секундах */
/*------------- Диалог ПОЛЬЗОВАТЕЛЬ – ЭВМ */
printf(" Эта программа пересчитывает ваше время пробега дистанции, выраженной в км,");
printf(" во время, требуемое для пробега одной мили, и вашу среднюю");
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; /* переводит километры в мили */
rate = distm / time*SH;
/* число миль в сек * число сек в час = число миль в час */
mtime = (float)time / distm; /* время/дистанция = время на милю */
mmin = (int)mtime / SM; /* находит целое число минут */
msec = (int)mtime % SM; /* находит остаток в секундах */
/*------------- Вывод результатов на печать */
printf("Bы пробежали %1.2f KM (%1.2f мили) за %d мин %d с \n",
distk, distm, mm, sec);
printf(" Эта скорость соответствует пробегу мили за %d : мин", mmin);
printf("%d c.\n Ваша средняя скорость %l.2f миль/ч \n", msec, rate);
return 0;
}/*.---------------------------.end main() */
/*#############################################*/
РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ.
Эта программа пересчитывает ваше время пробега дистанции, выраженной в км, во время, требуемое для пробега одной мили, и вашу среднюю скорость, в милях в час.
Укажите, пожалуйста, дистанцию в километрах.
10,0.
Введите время в минутах и секундах.
Начните с ввода минут.
36
Теперь введите секунды.
23
Вы пробежали 10,00 км (6,21 мили) за 36 мин. 23 с.
Эта скорость соответствует пробегу мили за 5 мин 51 с.
Ваша средняя скорость 10.25 миль/ч
ПОЯСНЕНИЯ К ПРОГРАММЕ.
При переводе секунд в минуты, требуются аргументы целого типа. При преобразовании из метрической системы в мили используются числа с плавающей точкой. Мы применили операцию приведения для того, чтобы сделать преобразования явными. Использование операции приведения не только проясняет замысел программиста, но и упрощает компиляцию программы. Эту программу можно было бы написать, используя только автоматическое преобразование типов.
***************************************************************