Analise o código abaixo escrito em C. int main() { int a, b; a = 3; b = 7; int c = a * (b + a); c = b; printf(“%d”; c); return } Assinale, a seguir, o valor impresso ao final da execução do código.
- A)7
Certa: apos c receber o valor de b, a saida impressa e 7.
- B)10
Errada: 10 seria um valor ligado ao calculo de (b + a), mas ele nao e o valor final de c.
- C)24
Errada: 24 nao corresponde a nenhuma operacao executada no codigo.
- D)30
Errada: 30 e o resultado intermediario de a * (b + a), mas foi substituido pela atribuicao seguinte.
Gabarito: A
Em C, primeiro voce observa a ordem das instrucoes: as variaveis recebem valores, os calculos acontecem e, por fim, o que estiver na variavel no momento do printf e o que aparece na tela. Aqui, a recebe 3 e b recebe 7. Depois, c e calculada como a * (b + a), o que daria 3 * (7 + 3) = 30. So que, logo em seguida, vem a linha c = b;, que sobrescreve esse valor e faz c passar a valer 7. Ou seja, o resultado do calculo anterior some da memoria da variavel c, porque ela foi reatribuida. Em programacao, isso e muito comum: a ultima atribuicao e a que vale no final. Por isso, quando o programa imprime c, o que sai e o valor de b, isto e, 7. Em questoes de prova, sempre vale prestar atencao nessa ordem de execucao. Muitas vezes a banca coloca uma conta bonita para distrair, mas depois troca o valor da variavel antes da impressao. E o tipo de pegadinha classica: voce faz a conta certa, mas esquece que ela foi jogada fora por uma nova atribuicao. Observacao: o trecho tem pequenas inconsistencias de escrita, como o formato do printf e o return sem valor, mas, na logica da questao, a intencao clara e verificar atribuicao de variaveis e o valor final impresso.