Glaucco 1 Denunciar post Postado Agosto 28, 2008 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
Kandrade 7 Denunciar post Postado Agosto 28, 2008 Substitua aquela linha por essa: printf("A media dos numeros e %f \n", media); Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 28, 2008 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 7 Denunciar post Postado Agosto 28, 2008 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
Giovanni Ritchie 0 Denunciar post Postado Agosto 29, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 29, 2008 Pode provar isso? Nem sempre se, o resultado for um valor "redondo". Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 29, 2008 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
_Isis_ 202 Denunciar post Postado Agosto 29, 2008 #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
Glaucco 1 Denunciar post Postado Agosto 29, 2008 Pode coloca como resolvido. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 29, 2008 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
_Isis_ 202 Denunciar post Postado Agosto 29, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 29, 2008 Hm, mas isso não é java. Vamos ver o que ele diz. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 30, 2008 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
Kandrade 7 Denunciar post Postado Agosto 30, 2008 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
Kandrade 7 Denunciar post Postado Agosto 30, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 30, 2008 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
Glaucco 1 Denunciar post Postado Agosto 30, 2008 Pessoal não to entendendo nada. Pode por como resolvido. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Agosto 30, 2008 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
gRoOvE 0 Denunciar post Postado Agosto 31, 2008 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
_Isis_ 202 Denunciar post Postado Agosto 31, 2008 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