Программа для конверсии Фаренгейта в цель
Я пишу программу для classа, в котором я участвую, и мне нужна помощь в программе преобразования Фаренгейта в objectiveсий в C. Мой код выглядит так
#include int main (void) { int fahrenheit; double celsius; printf("Enter the temperature in degrees fahrenheit:\n\n\n\n"); scanf("%d", &fahrenheit); celsius = (5/9) * (fahrenheit-32); printf ("The converted temperature is %lf\n", celsius); return 0; }
Каждый раз, когда я его выполняю, результат равен 0,000000. Я знаю, что я что-то упускаю, но не могу понять, что.
- Как получить знак, мантисса и показатель числа с плавающей запятой
- Почему деление приводит к нулю вместо десятичного?
- Что возвращает sizeof (имя функции)?
- Декодирование и проверка токена JWT с использованием System.IdentityModel.Tokens.Jwt
- Плакат с 8 этапами перевода на языке C
- Как получить длину массива в C? Решение «sizeof»?
- Gcc автоматически инициализирует статические переменные до нуля?
- case switch: ошибка: метка case не сводится к целочисленной константе
- Что такое пакеты -devel?
- Использование транзакций или SaveChanges (false) и AcceptAllChanges ()?
- Почему я не могу назначить массивы как & a = & b?
- C - инициализация указателей, позиция звездочки
- C struct hack на работе
5/9 приведет к целочисленному делению, которое будет = 0
Вместо этого попробуйте 5.0/9.0
.
У вас проблема:
celsius = (5/9) * (fahrenheit-32);
5/9
всегда даст вам 0
. Вместо этого используйте ( 5.0/9.0
).
попробуйте celsius = ((double)5/9) * (fahrenheit-32);
Или вы можете использовать 5.0.
Дело в том, что «/» смотрит на тип операнда. В случае int результат также является int, поэтому у вас есть 0. Когда 5 рассматривается как double, то деление будет выполнено правильно.
пишите 5/9.0
вместо 5/9 – это приводит к двойному делению
Вы должны использовать арифметику с плавающей запятой, чтобы выполнять эти типы формул с любой точностью. Вы всегда можете преобразовать конечный результат обратно в целое число, если это необходимо.
При работе с float он должен быть 5.0f / 9.0f.
При работе с удвоениями он должен быть 5.0 / 9.0.
При работе с целыми числами остатки / фракции всегда усекаются. Результаты 5/9 между 0 и 1, поэтому он усекается до 0 каждый раз. Это умножает другую сторону на ноль и полностью аннулирует ваш ответ каждый раз.
5
и 9
имеют тип int
следовательно, 5/9
всегда будет 0
.
Вы можете использовать 5/9.0
или 5.0/9
или 5.0/9.0
Вы также можете проверить программу C для преобразования Фаренгейта в objectiveсий
using System; public class Calculate { public static void Main(string[] args) { //define variables int Celsius; int fahrenheit; string input; //prompt for input //read in the input and convert Console.WriteLine("Enter Celsius temperature"); input = Console.ReadLine(); Celsius = Convert.ToInt32(input); //calculate the result fahrenheit = ((Celsius * 9 )/5) + 32; //print to screen the result Console.WriteLine("32 degrees Celsius is {0}", "equivilant to 89.60 degrees fahrenheit"); Console.ReadLine(); }