Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RareScrap
1 / 1 / 0
Регистрация: 14.10.2013
Сообщений: 85
#1

int/int != float? Why not? - C++

14.10.2013, 20:20. Просмотров 620. Ответов 5
Метки нет (Все метки)

Всем доброго времени суток!

Объясните пожалуйста, почему результатом этих операций является целочисленное значение. Ведь должно получиться же 1.333333...

C++
1
2
3
4
5
float a;
int b, c;
b = 1;
c = 3;
a = b / c;
Я занимаюсь изучением С++ по книге "С++ для чайников" Книга довольно стара (2003 год) и приходится переделывать почти каждый исходник. Эта книга написана очень понятным языком, за что мне и нравится. Посоветуйте книгу для новичка, в которой очень подробно описывается каждый аспект языка C++.

P.S. Прошу прощения за столь глупый вопрос
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2013, 20:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос int/int != float? Why not? (C++):

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) - C++
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй подпрограме.Извиниет за ошибки.Не владею руским.Помогите...

Функции float average(int arrray[],int from,int to) - C++
Напишите код функции float average(int arrray,int from,int to). Возвращаемым значением функции должно быть среднее значение элементов...

Почему при умножении разнотипных переменных (например, float и int) получается int? - C++
Почему при умножении разнотипных переменных (float price и int unit) получается int? Это же не преобразование типов данных. Почему...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5 #define col 5 using namespace...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
14.10.2013, 20:33 #2
RareScrap, попробуйте почитать вот здесь по соседству: rand
Если вопросы останутся, задавайте. )
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
14.10.2013, 20:35 #3
вообще должно получиться 0.3333333333...
А т.к. в при делении int на int получается int, то дробная часть отбрасывается и остаётся 0.
Хочешь чтобы был float. Делаешь так
b * 1.0 / c
или так (float)b / c
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
14.10.2013, 20:40 #4
SummerRain, ничего никуда не отбрасывается. Это целочисленное деление. 1 / 2 == 0 и остаток 1.
0
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
14.10.2013, 20:53 #5
Переменные b и c являются целочисленными переменными типа int. Часто бывает, что в выражениях языка С++, типы операндов отличаются. Т.е., например, в той же операции деления x/y, типы переменных x и y могут быть разными. В этом случае осуществляется так называемое автоматическое приведение типов данных, т.е. компилятор приводит операнды в выражении к одному типу. Не буду вдаваться в особенности конкретных типов и какие преобразования при этом выполняются, т.к. эта довольна обширная и отдельная для обсуждения тема.

В данном случае, в выражении b/c оба операнда имеют тип int, собственно никаких преобразований выполнять не надо, в результате будет выполняться целочисленное деление 1/3 = 0. Далее, это значение 0 типа int присваивается переменной a типа float. Здесь опять осуществляется автоматическое преобразование типов: осуществляется преобразование типа результата выражения к типу l-операнда, т.е. к типу переменной a (float). Но, по-умолчанию, компилятор отбрасывает лидирующие нули, т.е. если мы переменной a присвоим значение 1.000000 по-умолчанию в нее запишется значение 1. Существует несколько способов заставить компилятор выводить лидирующие нули, регулировать кол-во знаков после "запятой" и т.д.

Вообще, советую пользоваться отладчиком, "поиграться" с типами переменных, различными их значениями, посмотреть отладчиком, как будут изменяться типы результирующих выражений и т.д., вариантов много.

На счет книги, лично мне нравится книга С.Прата "Язык программирования С++. Лекции и упражнения". Из названия легко догадаться, что теория сопровождается решением задач. Желательно издательство поновее, например 2011 года.

Удачи.
0
RareScrap
1 / 1 / 0
Регистрация: 14.10.2013
Сообщений: 85
14.10.2013, 20:55  [ТС] #6
Большое всем спасибо! Как я сам не додумался?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2013, 20:55
Привет! Вот еще темы с ответами:

[Linker error] undefined reference to `sterling(int, int, int)' - C++
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int sterling(int); int main() { ...

int main() и int _tmain(int argc, _TCHAR* argv[]) - C++
При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный шаблон #include &quot;stdafx.h&quot; int...

[Linker Error] Unresolved external 'Sort(int near*near ,int, int) - C++
не могу понять в чем ошибка при компиляции ошибок не выдает при запуске программы - выдает эту ошибку Unresolved external 'Sort(int...

Написать функцию типа Beaty(int iA, int iB, int *pc) - C++
Задание: Написать функцию типа Beaty(int iA, int iB, int *pc); для выражения (iA+iB)/(iA*iB). Помогите решить!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.10.2013, 20:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru