Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Glaucco

C media entra números

Recommended Posts

dev-C++

 

Ajuda por favor.

 

1º) Faça um programa em C que receba(leia) três números, calcule e

mostre(escreva) a média aritmética entre elas.

 

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

main() {
	   
	   int a, b, c;
	   double media;
	   
printf("Digite o primeiro numero");
scanf("%d", &a);
 printf("Digite o segundo numero");
  scanf("%d", &b);
   printf("Digite o terceiro numero");
	scanf("%d", &c);
	 media = (a + b + c) / 3
	  printf("A media dos numeros e", media); ta dando erro  aqui <<<<<<<<<< pq ??? como eu resolvo esse erro?
	   system("pause");
	   {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem sempre. Exemplo:

 

9/2 = 4,5

 

Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem sempre. Exemplo:

 

9/2 = 4,5

 

Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media.

 

O groove tem razao. 4,5 não é inteiro ..... por isso é melhor usar cast mesmo-

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode provar isso? Nem sempre se, o resultado for um valor "redondo".

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkk

 

Calma ai que confusão.

O groove disse isso:

 

Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media.

Eu disse que o número resultante nem sempre é inteiro.

Não precisa de cast porque o cast se torna automático nesse caso já que double é maior que int.

Se fosse o contrário precisaria.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
int main() {
  int A=9,B=2;
  printf("%d \t %lf\n",A/B,A/B);
  return 0;
}

 

linux-0khy> ./a.out

4 -0.000000

 

 

 

#include <stdio.h>
int main() {
  int A=9,B=2;
  printf("%d \t %f\n",A/B,A/(B*1.0));
  return 0;
}

 

linux-0khy> ./a.out

4 4.500000

 

 

 

#include <stdio.h>
int main() {
  float A=9,B=2;
  printf("%d \t %f\n",A/B,A/B);
  return 0;
}

 

linux-0khy> ./a.out

0 0.000000

 

 

 

#include <stdio.h>
int main() {
  int A=9,B=2;
  printf("%d \t %f\n",A/B,(float)A/B);
  return 0;
}

 

linux-0khy> ./a.out

4 4.500000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu disse que o número resultante nem sempre é inteiro.

Não precisa de cast porque o cast se torna automático nesse caso já que double é maior que int.

Se fosse o contrário precisaria.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Bom, o debug da Isis responde tudo já, mas como o cast se torna automático? Não se trata de ser maior ou menor e sim que isso é uma especificação da linguagem, se dividir inteiro por inteiro é impossível retonar um float...se puder nos mostrar de onde tirou essa informação, pois fiquei curioso :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o casting que ele falou eh tipo o upcasting de java.Não sei como explicar mas é algo como subconjuntos de um domínio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei que não é java. Mas isso não significa que a idéia não seja análoga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, estou confundindo as bolas mesmo.

O casting que falei é do Java mesmo.

 

Mals

 

Eu sei que não é java. Mas isso não significa que a idéia não seja análoga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uns testes aqui e virou uma bangunça só.

 

Vejam esse código:

 

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

int main() {
   float A=9,B=2,c;
   int d;
   c = 10/3;
   d = 10/3;
   printf("%f\n",c);
   printf("%d \t %f \t %d\n",A/B,A/B,d);
   system("pause");
   return 0;
}

3.000000

0 0.000000 1074921472

Pressione qualquer tecla para continuar. . .

 

Alguém consegue explicar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kandrade, isso é problema no printf velho, agora não sei porque...fiz separado, veja:

 

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

int main() {
   float A=9,B=2,c;
   int d;
   c = 10/3;
   d = 10/3;
   printf("%f\n",c);

   printf("\n%d",d);
   printf("\n%d",A/B);
   printf("\n%f",A/B);
   system("pause");
   return 0;
}
Só não entendi tb ali onde divido A/B e mostro como int, fica zero o resultado, não deveria pegar a primera casa antes da vírgula?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Axo que pelo valor ser real e ter alocado uma variavél int ele pega tipo lixo de memoria e joga na saida, semelhante a vetores quando erramos na indexação que vem um monte de lixo.

abs

 

 

Pessoal não to entendendo nada. Pode por como resolvido.

Se ler os topicos entenderá, surgiu uma nova questão referente a sua dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

kisuke, acho que não tem nada a ver isso, pois fiz os printf separados ali e retornou outros valores, os "corretos".

Compartilhar este post


Link para o post
Compartilhar em outros sites

pior que tem cara de ser bug no printf mesmo.da uma olhada:

 

#include <stdio.h>
int main() {
  float A=9,B=2,c;
  int d;
  c = 10/3;
  d = 10/3;
  printf("%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",c,c,c,c,c,c,c,c);
  printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",d,d,d,d,d,d,d,d);
  printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",c,c,c,c,c,c,c,c);
  printf("%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",d,d,d,d,d,d,d,d);
  return 0;
}

 

 

isis@linux-0khy:~/src> ./cast

3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 C como float

3 3 3 3 3 3 3 3 D como int

0 1074266112 0 1074266112 0 1074266112 0 1074266112 C como int

0.000000 0.000000 0.000000 0.000000 3.000000 3.000000 3.000000 3.000000 D como float

 

#include <stdio.h>
int main() {
  float A=9,B=2,c;
  int d;
  c = 10/3;
  d = 10/3;
  int i=0;
  for(i=0;i<7;i++)
  printf("%f\t",c);
  puts("");

  for(i=0;i<7;i++)
 printf("%d\t",d);
  puts("");

  for(i=0;i<7;i++)
 printf("%d\t",c);
  puts("");

  for(i=0;i<7;i++)
 printf("%f\t",d);

  return 0;
}

 

isis@linux-0khy:~/src> ./cast

3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000

3 3 3 3 3 3 3

0 0 0 0 0 0 0

3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000

 

#include <stdio.h>
int main() {
  float A=9,B=2,c;
  int d;
  c = 10/3;
  d = 10/3;
  printf(" %d \t%f \t D=%d \t D=%d \t D=%d \t %f \t %f \t %f \t %f \t%f\n",A/B,A/B,d,d,d,d,d,d,d,d);

  return 0;
}

 

isis@linux-0khy:~/src> ./cast

0 0.000000 D=1074921472 D=3 D=3 0.000000 0.000000 0.000000 -0.040965 262144.007830

 

 

#include <stdio.h>
int main() {
  float A=9,B=2,c;
  int d;
  c = 10/3;
  d = 10/3;
  printf("%f\n",A/B);
  printf(" %d \t%f \t D=%d \t D=%d \t D=%d \t %f \t %f \t %f \t %f \t%f\n",A/B,A/B,d,d,d,d,d,d,d,d);

  return 0;
}

 

isis@linux-0khy:~/src> ./cast

4.500000

0 0.000000 D=1074921472 D=3 D=3 0.000000 0.000000 0.000000 2.000000 0.000000

 

 

Será que rola uma entrada no bugzilla da libc?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.