2011-02-03 2 views
7

Я пишу программу для класса я в и нуждаются в помощи с программой для преобразования Фаренгейта в градусы Цельсия в C. Мой код выглядит следующим образомпрограмма 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. Я знаю, что я что-то упускаю, но не могу понять, что.

+6

Вы работаете с целыми числами, вы должны работать с поплавками или двойниками. – Joe

+2

Боковое примечание, компиляторы обычно рассматривают 5.0 a double. Вы должны сказать 5.0f, чтобы делать вычисления с плавающей запятой. Кажется более актуальным для мобильных –

ответ

21

5/9 приведет целочисленное деление, которое будет = 0

Try 5.0/9.0 вместо этого.

+3

технически говоря, 5/9.0 хватает –

+0

это сработало! Большое спасибо :) – James

+0

@James Не забудьте принять ответ. –

0

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

0

записи 5/9.0 вместо 5/9 - это заставляет двойное деление

+0

спасибо за помощь всем, 5.0/9.0 сделал трюк, а также переключился на двойную работу. Еще раз спасибо – James

2

попробовать celsius = ((double)5/9) * (fahrenheit-32); Или вы можете использовать 5.0.

Дело в том, что «/» смотрит на тип операнда. В случае int результат также является int, поэтому у вас есть 0. Когда 5 рассматривается как double, то деление будет выполнено правильно.

8

Вы проблема здесь:

celsius = (5/9) * (fahrenheit-32); 

5/9 всегда даст вам 0. Вместо этого используйте (5.0/9.0).

0

При работе с поплавками он должен быть 5.0f/9.0f.

Имея дело с удвоениями, оно должно быть 5.0/9.0.

При работе с целыми числами остатки/фракции всегда усекаются. Результаты 5/9 между 0 и 1, поэтому он усекается до 0 каждый раз. Это умножает другую сторону на ноль и полностью аннулирует ваш ответ каждый раз.

-4
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(); 
} 
+3

Вопрос был о C. –

+2

Не только ответ не в C, *** это все еще неправильно, потому что он совершает ту же ошибку: целочисленное деление ***: «(Цельсий * 9)/5». –

Смежные вопросы