Программа на C для преобразования Фаренгейта в Цельсий всегда печатает ноль - PullRequest
7 голосов
/ 03 февраля 2011

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

Ответы [ 8 ]

23 голосов
/ 03 февраля 2011

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

Попробуйте 5.0/9.0.

9 голосов
/ 03 февраля 2011

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

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

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

2 голосов
/ 03 февраля 2011

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

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

0 голосов
/ 03 июня 2015

5 и 9 имеют тип int типа
, следовательно, 5/9 всегда приведет к 0.

Вы можете использовать 5/9.0 или 5.0/9 или 5.0/9.0

Вы также можете проверить C программу для преобразования Фаренгейта в Цельсий

0 голосов
/ 14 января 2012
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();
}
0 голосов
/ 03 февраля 2011

При работе с числами с плавающей точкой он должен быть равен 5,0 / 9,0f.

При работе с числами с удвоением он должен быть равен 5,0 / 9,0.

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

0 голосов
/ 03 февраля 2011

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

0 голосов
/ 03 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...