Ir ao conteúdo

Questão de concurso em C


brunus

Posts recomendados

Postado

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.

Postado

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 :)

Postado

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!

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!