Неожиданный результат о делении на C

Моя цель – вывести среднее значение входного числа и его разворот.

Когда я ввожу 974, результатом будет 726.0 вместо 726.5. Я давно думаю об этой проблеме, но я до сих пор не могу получить ответ.

Надеюсь, кто-нибудь может мне помочь. Большое спасибо!

#include  int main(void) { int N, D1, D2, D3; double aver; scanf("%d", &N); D1 = N % 10; D2 = ((N - D1) / 10) % 10; D3 = (N - D1 - D2) / 100; aver = (D1*100 + D2*10 + D3 + N) / 2; printf("%lf", aver); return 0; } 

    В вашем коде N , D1 , D2 , D3 все являются int s, поэтому вычисление

     (D1*100 + D2*10 + D3 + N) / 2; 

    выполняется как целочисленная арифметика, а затем результат повышается до double . Таким образом, результатом является просто double представление значения int .

    Чтобы обеспечить арифметику с плавающей запятой,

    1. Измените типы данных операндов на double или float .
    2. Включите по крайней мере один операнд для float .

    Просто добавьте double . Увидеть ниже:

     #include  int main(void) { int N, D1, D2, D3; double aver; scanf("%d", &N); D1 = N % 10; D2 = ((N - D1) / 10) % 10; D3 = (N - D1 - D2) / 100; aver = (double)(D1*100 + D2*10 + D3 + N) / 2; printf("%lf", aver); return 0; } 

    Оформить заказ Код запуска