Задать вопрос
@dandropov95

Как работать с делением и типами в Си?

У меня к примеру в ходе каких то вычислений получилось 2 числа. Первое это накопленная сумма. Второе количество чисел. Нужно к примеру найти среднее арифметическое. Как в данном случае поступить? Значение может получиться как целым так и вещественным, хотя в вычислениях будут участвовать только целые числа.

Пример:
printf("%d\n", 23 / 4);
printf("%f\n", 23 / 4); // (float) 23 / 4


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

Как правильно написать это? Заранее не известно же каким будет результат, целым или вещественным.
  • Вопрос задан
  • 471 просмотр
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Микропетпроджект - https://home-cloud.store/
Если хотите, чтобы деление "учитывало" возможную дробную часть, то:
- всегда в делении одно из чисел должно быть float (double)
- всегда результат помещать в float (double)
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Заранее не известно же каким будет результат, целым или вещественным.

Если есть шансы, что результат вычислений может быть не целым (и вам реально нужен вещественный результат в этом случае, т.е. с остатком), то нужно использовать вещественные операции для вычисления выражения, а не целые.
Часто бывает необходимо отбрасывать остаток, тогда намеренно используют целочисленную арифметику.

В отличии от языков с динамической типизацией, в С/С++ программист сам должен контролировать тип результата выражения и там где нужно делать преобразования типов явно для получения результата нужного типа.
И это не недостаток языка.
Ответ написан
Комментировать
В C любая константа имеет тип. 23 и 4 это две целочисленные константы, к ним применяется операция деления, в результате арифметической операции над целыми числами всегда будет целое число. Чтобы константа была с плавающей точкой, она должна содержать точку. Т.е. правильно 23./4. - перечитайте про задание констант.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы