Leve em consideração o código abaixo, em linguagem C: #incl...
#include <stdio.h> int a(int b){ if(b <= 1){ return 1;} return b * a(b - 1) -1;}
void main (){ int b = a(5), d = 0, c = 1, e = 43; while (1){ d = 1; c += 2; b -= 7; if ((c + e + d + b) <= 44); printf("%d\n", c); break; d = a(d); e -= c;} printf("%d\n", e); printf("%d", b);}
Os valores impressos na tela serão, respectivamente:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - 3, 43, 27.
A questão aborda conceitos de programação em linguagem C, com foco em recursividade, controle de fluxo com estruturas de laço e condicionais, assim como atribuição de variáveis e impressão de resultados. Para resolver a questão, é necessário entender como funciona a chamada de uma função recursiva, além de acompanhar os valores das variáveis alterados pelo laço de repetição while.
A função a(int b)
é uma função recursiva que calcula o fatorial de um número b
e subtrai 1 de cada resultado intermediário. A execução da função a(5)
resultará em (5 * a(4) - 1)
e assim sucessivamente, até a(1)
, onde retorna 1. Os cálculos são:
a(5) = 5 * a(4) - 1 = 5 * (4 * a(3) - 1) - 1 = 5 * (4 * (3 * a(2) - 1) - 1) - 1 = 5 * (4 * (3 * (2 * a(1) - 1) - 1) - 1) - 1 = 5 * (4 * (3 * (2 * 1 - 1) - 1) - 1) - 1 = 5 * (4 * (3 * 1 - 1) - 1) - 1 = 5 * (4 * 2 - 1) - 1 = 5 * 7 - 1 = 35 - 1 = 34
Portanto, int b = a(5)
terá o valor 34 após a execução da função recursiva.
Em seguida, o código inicia um loop while infinito, já que a condição é sempre verdadeira (while (1)
). Dentro do loop, as operações matemáticas alteram os valores das variáveis d
, c
, e b
, e uma condição verifica a soma desses valores com e
. A linha if ((c + e + d + b) <= 44);
contém um ponto e vírgula, o que significa que o corpo do if
sempre será executado, independentemente da condição. O primeiro valor impresso será o valor atual de c
, que recebeu um incremento de 2, sendo então 3. Logo após, o comando break;
força a saída do loop.
Depois da saída do loop, o código imprime os valores de e
e b
. A variável e
mantém seu valor inicial, pois a linha e -= c;
não é executada devido ao break;
, portanto, o segundo valor impresso é 43. Já a variável b
teve 7 subtraídos de seu valor inicial 34 uma única vez antes do break
, resultando em 27.
Assim, os valores impressos na tela serão, respectivamente, 3
, 43
, 27
, o que corresponde à alternativa (B).
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
No método main, há um ponto e vírgula depois do IF. Assim, o "break" vai ser executado independente dele.
Se não fosse essa "pegadinha", seria GAB A.
.
GAB B
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo