Ir ao conteúdo
  • Cadastre-se

Questão de concurso em C


brunus
Ir à solução Resolvido por Massita,

Posts recomendados

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.

Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
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!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!