Преобразования типов
При вычислении выражений некоторые операции требуют, чтобы операнды имели соответствующий тип, в противном же случае на этапе компиляции выдается сообщение об ошибке. Например, операция взятия остатка от деления (%) требует целочисленных операндов. Поэтому в языке С++ есть возможность приведения значений одного типа к другому.
Формат операции преобразования типов:
имя_типа (операнд)
Например, int(x), float(2/5), long(x+y/0.5).
Пример 1.
//Взятие цифры разряда сотых в дробном числе
#include <stdio.h>
void main(){
float s,t;
long int a,b;
printf("Введите вещественное число\n");
scanf("%f", &s);
t=s*100;
a=int(t);
//переменная t приводится к типу int в переменную a
b=a%10;
printf("\nЦифра разряда сотых числа %f равна %d.",s,b);
}
Преобразования типов нужно применять с осторожностью, так как данная операция может приводить к потере информации. Например, после приведения длинного типа к более короткому происходит усечение информации из старших битов.
Пример 2.Временной интервал
Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах.
Исходными данными для этой задачи являются шесть целых величин, задающих моменты начала и конца интервала, результатами – три целых величины (тип int).
Назовем переменные для хранения начала интервала hour1, min1 и sec1, для хранения конца интервала – hour2, min2 и sec2, а результирующие величины – hour, min и sec.
Для решения этой задачи необходимо преобразовать оба момента времени в секунды, вычесть первый из второго, а затем преобразовать результат обратно в часы, минуты и секунды. Следовательно, потребуется промежуточная переменная sum_sec, в которой будет храниться величина интервала в секундах. Она может иметь весьма большие значения, ведь в сутках 86400 секунд, что выходит за пределы типа int. Следовательно, для этой переменной выберем длинный целый тип (long int, сокращенно long).
Для перевода результата из секунд обратно в часы и минуты используется отбрасывание дробной части при делении целого числа на целое.
//Временной интервал. Форматированный ввод-вывод данных
#include <stdio.h>
void main () {
int hour1, min1, sec1, hour2, min2, sec2, hour, min, sec;
long int sum_sec;
printf("Введите время начала интервала (час мин сек)\n");
scanf("%d%d%d", &hour1,&min1,&sec1);
printf("Введите время окончания интервала (час мин сек)\n");
scanf("%d%d%d", &hour2,&min2,&sec2);
sum_sec = (hour2-hour1)*3600+(min2-min1)*60+sec2-sec1;
hour = sum_sec/3600;
min = (sum_sec-hour*3600)/60;
sec = sum_sec - hour*3600-min*60;
printf("Продолжительность промежутка от %d:%d:%d до
%d:%d:%d\n",hour1,min1,sec1,hour2,min2,sec2);
printf(" равна %d:%d:%d\n",hour,min,sec);
}
Задания
1.Найти сумму первых трех цифр дробной части вещественного числа. Например, для числа 23,16809 она равна 15.
2.Составить программу вычисления стоимости поездки на автомобиле на дачу (туда и обратно). Исходными данными являются: расстояние до дачи (в километрах); количество бензина, которое потребляет автомобиль на 100 км пробега; цена одного литра бензина. Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
Вычисление стоимости поездки на дачу.
Расстояние до дачи (км) – 67
Расход бензина (л на 100 км) – 8.5
Цена литра бензина (руб.) – 23.7
Поездка на дачу обойдется в 269 руб. 94 коп.
3.Составить линейную программу, печатающую значение 1, если указанное высказывание является истинным, и 0 – в противном случае. Величина d является корнем только одного из уравнений ах2 + bх + с = 0 и тх + п = 0относительно х.
Домашние задания
1.Наберите код программы из Примера 2. Сохраните код в файл с именем vr_int_f.cpp. Выполните компиляцию и запуск программы. Реализуйте потоковый ввод-вывод данных в этой задаче, сохранив под именем vr_int_р.cpp.
2.Разработайте программу для вычисления у. Числа a, b, c вводятся с клавиатуры. В данном задании используйте форматированный ввод-вывод данных.
;
3.Составить линейную программу, печатающую значение 1, если указанное высказывание является истинным, и 0 – в противном случае. Точка с координатами x, y не принадлежит единичному кругу с центром в начале координат и принадлежит кругу радиусом 3 и с центром в начале координат.
4.Составить программу, которая преобразует введенное с клавиатуры дробное число в денежный формат. Например, число 12,348 должно быть преобразовано к виду 12 руб. 35 коп. Решите данную задачу в двух вариантах: со стандартным потоком ввода-вывода и с форматированным вводом-выводом. Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
Преобразование числа в денежный формат.
Введите дробное число – 23,6
23.6 руб. – это 23 руб. 60 коп.
Дата добавления: 2015-02-16; просмотров: 1142;