Действительные числа
Ранее рассматривался только один тип целочисленных переменных — int . На самом деле существует несколько основных целочисленных типов, тип int — лишь один (но наиболее часто используемый) из них.
Таблица основных целочисленных типов.
| Название | Размер | Знаковый | Синонимы |
|---|---|---|---|
| short | 2 байта | Знаковый | short int , signed short , signed short int |
| unsigned short | 2 байта | Беззнаковый | unsigned short int |
| int | 4 байта | Знаковый | signed int |
| unsigned | 4 байта | Беззнаковый | unsigned int |
| long | 4 байта | Знаковый | long int , signed long , signed long int |
| unsigned long | 4 байта | Беззнаковый | unsigned long int |
| long long | 8 байт | Знаковый | long long int , signed long long , signed long long int |
| unsigned long long | 8 байт | Беззнаковый | unsigned long long int |
То есть типы бывают “короткими” ( short ), обычными, длинными ( long ) и очень длинными ( long long ). Последний тип является расширением компилятора GNU C++ и не является стандартным типом для языка C++, поэтому он может отсутствовать в других реализациях языка или называться по-другому (например, в компиляторе Microsoft Visual C++ аналогичный тип называется int64 ). Чем “длиннее” тип, тем большее число различных значений он может принимать, тем больше памяти он занимает. Также типы бывают знаковыми ( signed ), которые могут принимать как положительные, так и отрицательные значения и беззнаковые ( unsigned ), которые принимают только неотрицательные значения.
Таблица значений, которые могут принимать различные типы:
| Название | Размер | Минимальное значение | Максимальное значение |
|---|---|---|---|
| short | 16 бит | -2 15 =- 32768 | 2 15 -1 = 32767 |
| unsigned short | 16 бит | 0 | 2 16 -1 = 65535 |
| int , long | 32 бита | -2 31 = -2147483648 | 2 31 -1 = 2147483647 |
| unsigned , unsigned long | 32 бита | 0 | 2 32 -1 = 4294967295 |
| long long | 64 бита | -2 63 = -9223372036854775808 | 2 63 -1 = 9223372036854775807 |
| unsigned long long | 64 бита | 0 | 2 64 -1 = 18446744073709551615 |
На самом деле в стандарте языка C++ не оговорены конкретные значения размеров типов. Оговорено только то, что одинаковые знаковые и беззнаковые типы имеют одинаковые размеры, и размер меньшего типа всегда не превосходит размера большего типа. Вот какие размеры могут быть у этих типов в зависимости от разрядности процессора компьютера:
| Тип | 16-битный процессор | 32-битный процессор | 64-битный процессор |
|---|---|---|---|
| short | 2 байта | 2 байта | 2 байта |
| int | 2 байта | 4 байта | 4 байта |
| long | 4 байта | 4 байта | 8 байт |
| long long | — | 8 байт | 8 байт |
Действительные типы
Действительные (вещественные) числа представляются в виде чисел с десятичной точкой (а не запятой, как принято при записи десятичный дробей в русский текстах). Для записи очень больших или очень маленьких по модулю чисел используется так называемая запись “с плавающей точкой” (также называемая “научная” запись). В этом случае число представляется в виде некоторой десятичной дроби, называемой мантиссой, умноженной на целочисленную степень десяти (порядок). Например, расстояние от Земли до Солнца равно 1.496·10 11 , а масса молекулы воды 2.99·10 -23 .
Числа с плавающей точкой в программах на языке C++, а также при вводы и выводе записавыются в виде мантиссы, затем пишется буква e , затем пишется порядок. Пробелы внутри этой записи не ставятся. Например, указанные выше константы можно записать в виде 1.496e11 и 2.99e-23 . Перед самим числом также может стоять знак минус.
Для представления в памяти ЭВМ действительных чисел существует три типа:
| Тип | Точность | Размер | Количество знаков мантиссы | Минимальное положительное значение | Максимальное значение |
|---|---|---|---|---|---|
| float | Одинарная | 4 байта | 7 | 1.4e-45 | 3.4e38 |
| double | Двойная | 8 байт | 15 | 5.0e-324 | 1.7e308 |
| long double | Расширенная | 10 байт | 19 | 1.9e-4951 | 1.1e4932 |
Операция деления
Для действительных чисел определены операции сложения, вычитания, умножения и деления.
При этом операция деления выполняется по-разному для переменных и констант целочисленного типа и для переменных и констант действительных типов. В первом случае деление производится нацело с отбрасыванием дробной части, во втором случае — деление производится точно и результатом является действительное число. Более точно, если делимое и делитель одновременно являются целочисленными константами или переменными целочисленных типов, то деление будет целочисленным, а если хотя бы одно из них действительное, то деление будет действительным. Например:
coutвыведет 3 в первой строке и 3.33333 в остальных строках.
Результат выполнения деления не зависит от того, какой переменной будет присвоен результат. Если написать double a = 10 / 3; , то переменная a будет равна 3, так как деление 10/3 будет целочисленным, независимо от того, чему будет присвоен результат.
Приведение типов
Иногда возникает необходимость привести выражение одного типа к такому же выражению другого типа. Например, если есть две переменные a и b типа int и требуется вычислить их частное (не целочисленное) и записать в переменную d типа double . Следующий код:
double d; d = a / bбудет неверным, т.к. деление a / b будет целочисленным. Правильный код такой:
double d; d = (double)a / b;В этом примере используется операция приведения типа: (double)a . Эта операция возвращает значение типа double , но равное значению переменной a . В результате деление будет выполняться, как деление вещественных чисел, поскольку будет выполняться деление действительного значения на целочисленное.
Операция приведения типа не меняет тип самой переменной и ее значение, а только возвращает значение другого типа.
Упражнение
Определите, чему будут равны следующие переменные
int a = 13 / 5; int b = 13 % 5; int c = 13.0 / 5; double d = 13 / 5; double e = 13 % 5; double f = 13.0 / 5; double g = 13 / 5 + 2 / 5; double h = 13.0 / 5 + 2.0 / 5; int i = 13.0 / 5 + 2.0 / 5;Список функций
В стандартную математическую библиотеку языка Си (а, значит, и C++) входит множество специальных математических функций, которые нужно знать и уметь использовать. Для того, чтобы использовать эти функции в своей программе, необходимо подключить заголовочный файл, содержащий описания этих функций, что делается строчкой в начале программы:
#include
Функция от одного аргумента вызывается, например, так: sin(x) . Вместо числа x может быть любое число, переменная или выражение. Функция возращает значение, которое можно вывести на экран, присвоить другой переменной или использовать в выражении:
y = sin(x); coutТакже в файле cmath есть набор полезных числовых констант, например, константа M_PI хранит значение числа \(\pi\).
В компиляторе Visual C++ для использования этих констант необходимо объявить директиву препроцессора _USE_MATH_DEFINES перед подключения заголовочного файла cmath .
#define _USE_MATH_DEFINES #includeТочность вывода
По умолчанию действительные числа выводятся с точностью в 6 знаков, но в переменной типа double числа храняться с точностью в 15-16 знаков. Для того, чтобы вывести число с большей точностью, например, с точностью в 15 знаков, нужно выполнить команду:
cout.precision(15);Как вывести дробное число в c
Для этого делал всё то же самое для целых чисел и всё работало. А сейчас, когда при компиляции ввожу дробное число в х, а потом хочу ввести игрек, то у меня сразу он считает и причем y=сложение чисел которые я ввел в икс. хотя я одно число ввожу а не два. а он думает что 2 видимо.
мне кажется что проблема в int main
может быть float main, или это вообще всё не так надо.
извините, я только учусь.Изображения
| Безымянный.png (7.6 Кб, 206 просмотров) | |
| 2.jpg (12.0 Кб, 132 просмотров) |
Регистрация: 22.05.2007
Сообщений: 9,518
Пробуйте вводить целые числа или у дроби другой разделитель ставьте (я уже не помню там, или .) перед вводом игрика можно буфер cin очистить, чтобы ничего автоматом в переменную не лезло и запрашивалось у пользователя.
Ну, и sum сначала посчитать нужно, а потом выводить.
Пользователь
Регистрация: 28.04.2010
Сообщений: 40
как сказал товарищ pu4koff выше, нужно сначала посчитать, а потом выводить
#include #include using namespace std; int main(void) < float x, y, sum; cout > x; cout > y; sum = x + y; cout
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Ошибка int main() | Пиу Пиуу | Общие вопросы C/C++ | 14 | 08.11.2014 13:33 |
| операция мод применимо к типу float,проверка числа- целое или дробное | all_is_fear | Помощь студентам | 3 | 17.11.2011 16:16 |
| функция float average(int arrray[],int from,int to) | yuliyayuliya | Помощь студентам | 0 | 25.04.2011 21:55 |
| error: '::main' must return 'int' | Without Soul | Общие вопросы C/C++ | 9 | 24.03.2011 07:26 |
| Ошибка`main' must return `int' | Hichigo | Общие вопросы C/C++ | 9 | 26.02.2011 15:33 |
Вывести дробное число прописью
Для вывода прописью дробного числа используется функция встроенного языка ЧислоПрописью(). Данная функция, принимает на вход параметр "ПараметрыПредметаИсчисления". С помощью этого параметра можно задать наименования целой и дробной части в разных падежах. Так как дробная часть может содержать разное количество знаков, то наименования целой и дробной части необходимо задавать в зависимости от этого количества.
Функция ПолучитьДробноеЧислоПрописью()
Представленная функция формирует строковое представление дробных чисел с точностью 9 знаков после запятой. На вход функция получает дробное число и возвращает его строковое представление.
Пример
ВыводимоеЧисло - 32.400567899
Результат - "Тридцать две целых четыреста миллионов пятьсот шестьдесят семь тысяч восемьсот девяносто девять миллиардных"
Функция ПолучитьДробноеЧислоПрописью(ВыводимоеЧисло)
ДробнаяЧасть = ВыводимоеЧисло - Цел(ВыводимоеЧисло);
КоличествоЗнаков = ?(ДробнаяЧасть = 0, 0, СтрДлина(ДробнаяЧасть) - 2);
Если КоличествоЗнаков = 1 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|десятая, десятых, десятых, ж, 1";
ИначеЕсли КоличествоЗнаков = 2 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|сотая, сотых, сотых, ж, 2";
ИначеЕсли КоличествоЗнаков = 3 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|тысячная, тысячных, тысячных, ж, 3";
ИначеЕсли КоличествоЗнаков = 4 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|десятитысячная, десятитысячных,
|десятитысячных, ж, 4";
ИначеЕсли КоличествоЗнаков = 5 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|стотысячная, стотысячных, стотысячных, ж, 5";
ИначеЕсли КоличествоЗнаков = 6 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|миллионная, миллионных, миллионных, ж, 6";
ИначеЕсли КоличествоЗнаков = 7 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|десятимиллионная, десятимиллионных,
|десятимиллионных, ж, 7";
ИначеЕсли КоличествоЗнаков = 8 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|стомиллионная, стомиллионных,
|стомиллионных, ж, 8";
ИначеЕсли КоличествоЗнаков = 9 Тогда
ПараметрыПредметаИсчисления = "целая, целых, целых, ж,
|миллиардная, миллиардных, миллиардных, ж, 9";
Иначе
ПараметрыПредметаИсчисления = ". 0";
КонецЕсли;
Возврат ЧислоПрописью(ВыводимоеЧисло, "Л=ru_RU; ДП=Истина", ПараметрыПредметаИсчисления);
КонецФункции
Комментарии (0)
| О сайте | Обратная связь | Правила | Новости 1С | Copyright © 2024 Цитирование материалов (тексты, изображения, программный код) допускается только с размещением активной ссылки на сайт 1CLenta.ru |
C++ Пользователь вводит с клавиатуры дробное число. Округлить его до двух знаков после запятой и вывести.
Пробовал вот таким образом, но в консоль выводится только целая часть. Не пойму почему.
int DROBi = int(DROB); // 33
double DROBs = DROB * 100; // 3344.55
int DROBe = int(DROBs); // 3344
double DROBee = DROBe / 100; // 33.44
int DROBeee = int(DROBee); // 33
double DROBeeee = DROBee - DROBeee; // 0.44
double DROBie = DROBi + DROBeeee; // 33.44
Лучший ответ
double DROBee = DROBe / 100.; // попробуй просто поставить точку после 100
hmoff1711Профи (603) 5 лет назад
Это сработало! Спасибо! А как это работает? Для чего это точка?
Miku Hatsune Мудрец (11173) Потому что когда делишь целое на целое - получаешь целое Делишь целое на число с плавающей точкой - получаешь число с плавающей точкой
Остальные ответы
#include "iostream"
#include "iomanip"
using namespace std;
int main()>f; cout
. Гений (84806) 5 лет назад
Если не выберут этот ответ - даже я расстроюсь =)
hmoff1711 Профи (603) я так понимаю, фиксированная точка и setprecision() выбор точки?
hmoff1711Профи (603) 5 лет назад
а что означает fixed << setprecision(2) ?
Miku Hatsune Мудрец (11173) Значит, что числа выводятся 1.В десятичной форме 2.С точностью до двух знаков после точки
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.