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

 

  gRoOvE disse:

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
  Kandrade disse:

Nem sempre. Exemplo:

 

9/2 = 4,5

 

  gRoOvE disse:

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:

 

  Citar

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
  Kandrade disse:

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

 

  import java.Isis disse:

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

 

 

  Glaucco disse:

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.