Ir ao conteúdo
  • Cadastre-se
brunus

RESOLVIDO Questão de concurso em C

Recommended Posts

Boa tarde!

Comecei os estudos em linguagem C/C++ a qual nunca havia tido contato antes, estou achando bem interessante, porém, me deparei com uma situação que não estou conseguindo entender. Segue abaixo:

 

Não entendo o porque a saída/valor da variável a é = 6 no código abaixo:

int i=4, j=5, k=3;float a=6.0;a += (float) (i++/j*k);printf("a=%.2f i=%d \n",a,i);

Calculando a expressão (i++/j*k) acima, me retornaria '3' que somados ao valor de 'a' seria '9', porém o programa imprime '6'

 

Realizei alguns testes e fiz o seguinte:

Adicionei a variavel 'res', setei o valor '6.0' nela e apenas por fazer isso o programa retornou o valor '9'  :muro:

int i=4, j=5, k=3;float a=6.0, res=6.0;a += (float) (i++/j*k);printf("a=%.2f i=%d \n",res,i);

Não estou compreendendo o comportamento deste código... Se alguém puder me esclarecer eu ficaria muito grato. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes...

na expressão (i++/j*k)

primeiramente vamos ignorar o ++, já que é uma situação de pós-incremento, não vai alterar o valor final de a...

agora vamos resolver a expressão em partes...

Primeiro ponto a resolver é:

i/j = 4/5 = 0,8

Se seguirmos para o próximo passo e multiplicarmos 0,8 por k, teriamos:

0,8*3 = 2,4

que é diferente do 3 que você teve... Você chegou no 3 porque incrementou o i antes de realizar a operaçao, mas no caso, i++ incrementa-se i apenas depois da operaçao...

 

ATENÇÂO

MAS 2,4 ainda está errado!

Por quê?

Você está trabalhando com variáveis inteiras! Então quando realizamos uma operação, consideramos apenas os valores inteiros...

então, fazendo tudo de novo...

i/j = 4/5 = 0,8... Considerando apenas o valor inteiro temos 0

0 multiplicado por qualquer coisa = 0... 

0 * k = 0 * 3 = 0

a = a + 0

Como a já era 6.0, o resultado será 6.0...

Já calculamos a expressão, agora incrementamos i...

 

Espero que tenha entendido, qualquer duvida é só postar :)

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes...

na expressão (i++/j*k)

primeiramente vamos ignorar o ++, já que é uma situação de pós-incremento, não vai alterar o valor final de a...

agora vamos resolver a expressão em partes...

Primeiro ponto a resolver é:

i/j = 4/5 = 0,8

Se seguirmos para o próximo passo e multiplicarmos 0,8 por k, teriamos:

0,8*3 = 2,4

que é diferente do 3 que você teve... Você chegou no 3 porque incrementou o i antes de realizar a operaçao, mas no caso, i++ incrementa-se i apenas depois da operaçao...

 

ATENÇÂO

MAS 2,4 ainda está errado!

Por quê?

Você está trabalhando com variáveis inteiras! Então quando realizamos uma operação, consideramos apenas os valores inteiros...

então, fazendo tudo de novo...

i/j = 4/5 = 0,8... Considerando apenas o valor inteiro temos 0

0 multiplicado por qualquer coisa = 0... 

0 * k = 0 * 3 = 0

a = a + 0

Como a já era 6.0, o resultado será 6.0...

Já calculamos a expressão, agora incrementamos i...

 

Espero que tenha entendido, qualquer duvida é só postar :)

@Mention, entendi sim!

Muito obrigado por despender seu tempo elaborando uma explicação tão didática e clara!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×