Ir ao conteúdo
  • Cadastre-se

C Divisão não lê decimal


Posts recomendados

Bom dia pessoal, antes de mais nada, fiz um busca no google em vários sites, mas não achei algo que me fizesse entender.

Comecei a programar faz muito pouco tempo e estou fazendo um programa simples de conversão de temperatura, porém o programa lê a divisão 9/5 como 1 em vez de 1,8 gostaria de saber o motivo e como corrigir:

 

#include <math.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

float tc, tf;

main () {
setlocale (LC_ALL, "Portuguese");
printf ("Insira a temperatura em graus celsius:");
scanf ("%f", &tc);
tf = (9/5*tc)+32;
printf ("\n %f graus celsius tem o mesmo valor de %f graus fahrenheit", tc, tf);
	
	
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

quando você faz 9/5 você está dividindo um inteiro por outro inteiro, o resultado disso sempre será um inteiro. Prove desta forma:

tf = ((float)9/(float)5*tc)+(float)32;

Desta maneira, usando cast, você está indicando que se tratam de numeros flotantes já que você indica de forma implicita, você tem o controle do seu programa.

Para você fazer uma ideia, se dividir um float por un int você perde a parte decimal, mesmo guardando o resultado em um float, pois acontece uma conversão de tipo explicita(não transparente ao programador), por isso deve indicar que se trata de flotantes ao compilador já que ele pode mal entender o que você quer lograr, faça a prova.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Vangodp, tentei do jeito que você falou mas o resultado foi o mesmo ele ainda multiplica por 1 em vez de 1,8

adicionado 11 minutos depois

Aproveitando tópico para sanar outra dúvida : Por que o programa não está lendo esse último printf :

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>

float sa, pa, sn;

main () {
setlocale (LC_ALL, "Portuguese");
printf ("Digite o salário atual do funcionário:");
scanf ("%f", &sa);
printf ("Digite o percentual de aumento:");
scanf ("%f", pa);
sn = sa+((pa*sa)/100);
printf ("\n O salário do funcionário com %f de aumento é %f\n", pa, sa);
system ("pause");
	
}

 

Já vi o problema desse, não precisa

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Pedro Henrique Monteiro    o primeiro está funcionando bem :

#include <math.h>
#include <locale.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
float tc,tf;
int main(){
    setlocale (LC_ALL, "Portuguese");
    printf ("Insira a temperatura em graus celsius:");
    scanf ("%f", &tc);
    tf = (float)(9/(float)5*tc)+(float)32;
    printf ("\n%.2f graus celsius tem o mesmo valor de %.2f graus fahrenheit\n\n",tc,tf);
    getch();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...