Ответ 1
5/9 приведет к целочисленному делению, которое будет = 0
Попробуйте 5.0/9.0
.
Я пишу программу для класса, в котором я участвую, и мне нужна помощь в программе для преобразования Фаренгейта в цель по Celsius в C. Мой код выглядит следующим образом
#include <stdio.h>
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. Я знаю, что я что-то упускаю, но не могу понять, что.
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 для преобразования Фаренгейта в цельном порядке
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();
}