Есть задача из книги Дейтелов:
Из-за высокой цены на бензин водители интересуются пробегом своих автомобилей. Некий водитель отследил несколько заправок своего автомобиля, записывая пройденное расстояние в милях и объем каждой заправки в галлонах. Разработайте программу на С для ввода пройденного расстояния в милях и объема каждой заправки в
галлонах. Программа должна вычислять и отображать на экране количество пройденных миль на галлон для каждой заправки автомобиля. После обработки всей входной информациипрограмма должна вычислить и вывести общее количество пройденных миль на галлон по всем заправкам.Введите расход бензина (-1, если ввод закончен) : 12.8
Введите пройденный путь: 287
Для этой заправки получено миль/галлон 22.421875
Введите расход бензина (-1, если ввод закончен): 10.3
Введите пройденный путь: 200
Для этой заправки получено миль/галлон 19.417475
Введите расход бензина (-1, если ввод закончен): 5
введите пройденный путь: 120
Для этой заправки получено миль/галлон 24.000000
Введите расход бензина (-1, если ввод закончен): -1
Среднее число миль/галлон 21.601423
Собственно моя программа:
/*The program should calculate and display the miles per gallon obtained for each tankful. After processing
all input information, the program should calculate and print the combined miles per gallon
obtained for all tankfuls*/
#include <stdio.h>
int main(void)
{
int counter = 0;
float total = 0, result = 0, petrol, way;
while(petrol != -1)
{
printf("Enter the gallons used (-1 to end): ");
scanf("%f", &petrol);
if(petrol != -1)
{
printf("Enter the miles driven: ");
scanf("%f", &way);
}
if(petrol != 0)
{
if(petrol != -1)
{
result = way / petrol;
printf("The miles/gallon for this tank was: %f\n", result);
}
}
else
printf("No results were entered!\n");
total += result;
counter++;
}
if(counter != 0)
{
total /= counter;
printf("The overall average miles/gallon was %f\n", total);
}
else
printf("No results were entered!");
return 0;
}
Вывод следующий:
Enter petrol consuption (-1, input is complete): 12.8
Enter the passed path: 287
For this refueling received: 22.421875
Enter petrol consuption (-1, input is complete): 10.3
Enter the passed path: 200
For this refueling received: 19.417475
Enter petrol consuption (-1, input is complete): 5
Enter the passed path: 120
For this refueling received: 24.000000
Enter petrol consuption (-1, input is complete): -1
Average number of mills/gallons: 22.459837
Ошибка в расчётах у меня в логике программы? Проблема в том что используется тип float? - (насколько я понял он всегда представляется весьма приблизительно), но тогда бы он показывал другие цифры после точки, а разница выходит в целом числе, а не в его дробной части.
Спасибо за потраченное время!