Observando o código em linguagem C que contém uma estrutura de repetição while, avalie as afirmações abaixo:
#include <stdio.h>
int main()
{
    float Tc, Tf;
    Tc = 34.5;
    while(Tc <= 53){
    Tf = (((Tc*9.0)/5.0)+32.0);
    printf("Tc = %.1f C = %.1f F \n", Tc, Tf);
    Tc++;
    }
return 0;
}
Com base no código acima, identifique as opções verdadeiras:
I. Este programa não poderia ser feito usando o laço de repetição “for” nem o laço de repetição “do/while”.
II. O laço de repetição se repete até que a variável “Tf” seja menor ou igual a 53 .
III. Somente ao final do programa é mostrado a última temperatura em graus Celsius e em Graus Fahrenheit.
IV. A equação do “Tf” poderia ter sido reescrita como: Tc*9.0/5.0+32.0 devido a prioridade das operações matemáticas.
V. O comando Tc++; significa o mesmo que \mathrm{Tc}=\mathrm{Tc}+1; na linguagem C .
Assinale a alternativa que contém as afirmações corretas:
◯ a. Apenas II e V.
◯ b. Apenas I, II e IV.
◯ c. Apenas IV e V.
◯ d. Apenas I e V.
◯ e. Apenas II, IV e V.

Passo 1

O enunciado dá o código C abaixo e pede para identificar quais afirmações I–V são verdadeiras:
#include <stdio.h>
int main()
{
    float Tc, Tf;
    Tc = 34.5;
    while(Tc <= 53){
    Tf = (((Tc*9.0)/5.0)+32.0);
    printf("Tc = %.1f C = %.1f F \n", Tc, Tf);
    Tc++;
    }
return 0;
}
As cinco afirmações a avaliar são:
I. Este programa não poderia ser feito usando o laço de repetição “for” nem o laço de repetição “do/while”.
II. O laço de repetição se repete até que a variável “Tf” seja menor ou igual a 53.
III. Somente ao final do programa é mostrado a última temperatura em graus Celsius e em Graus Fahrenheit.
IV. A equação do “Tf” poderia ter sido reescrita como: \mathrm{Tc}*9.0/5.0+32.0 devido a prioridade das operações matemáticas.
V. O comando \mathrm{Tc}++ significa o mesmo que \mathrm{Tc}=\mathrm{Tc}+1 na linguagem C.
Informações relevantes do código (retiradas do enunciado):
  • A variável de controle começa com \mathrm{Tc}=34{,}5.
  • A condição do laço é \mathrm{Tc} \le 53.
  • Dentro do laço calcula-se \mathrm{Tf} pela expressão dada e imprime-se com \text{printf}.
  • Ao final de cada iteração há \mathrm{Tc}++.

Passo 2

Entendendo o funcionamento do laço \texttt{while}: em C o comando
\texttt{while}(\text{condição})\{ \text{bloco} \}çã
avalia a condição antes de cada iteração; se a condição for verdadeira, executa o bloco e volta a testar; se for falsa, sai do laço. No código a condição é \mathrm{Tc} \le 53. Portanto o laço repete enquanto a variável testada for \mathrm{Tc} \le 53. A afirmação II diz que o laço se repete até que \mathrm{Tf} seja menor ou igual a 53. Isso é incorreto porque a condição usa \mathrm{Tc}, não \mathrm{Tf}. Conclusão: a afirmação II é falsa.

Passo 3

Avaliação da afirmação I: “não poderia ser feito com for nem do/while”. Qualquer laço \texttt{while} que tenha inicialização, teste e incremento pode ser reescrito como um \texttt{for} com a mesma lógica. Por exemplo, a mesma lógica em \texttt{for} seria:
\texttt{for(}\mathrm{Tc}=34{,}5;\\ \mathrm{Tc}\le 53;\\ \mathrm{Tc}++\texttt{)\\ \{ ... \}}
Também pode-se usar \texttt{do \{ ... \} while(Tc <= 53);} — neste caso como a condição inicial \mathrm{Tc}=34{,}5 já satisfaz \mathrm{Tc}\le53, o \texttt{do/while} produziria comportamento equivalente (apenas atenção: \texttt{do/while} garante pelo menos uma execução, o que aqui é compatível). Logo dizer que não poderia ser feito com \texttt{for} ou \texttt{do/while} é falso. Conclusão: a afirmação I é falsa.

Passo 4

Avaliação da afirmação III: onde e quando as temperaturas são mostradas? No código o \texttt{printf} está dentro do bloco do laço:
\texttt{printf("Tc = \%.1f C = \%.1f F \textbackslash n", Tc, Tf);}
Isto imprime uma linha em cada iteração. Portanto o programa mostra várias linhas (uma por valor de \mathrm{Tc}), e a última linha impressa corresponde à última iteração, mas não é verdade que “somente ao final do programa é mostrado a última temperatura” no sentido de que nada é mostrado durante o laço — na verdade cada iteração imprime. A interpretação natural da afirmação III é que somente ao final algo é mostrado (como se só um único print ocorresse no final), o que é falso. Conclusão: a afirmação III é falsa.

Passo 5

Avaliação da afirmação IV (prioridade de operações): a linha no código é
\mathrm{Tf} = (((\mathrm{Tc}\times 9{,}0)/5{,}0)+32{,}0);
Em C (e em matemática usual) multiplicação e divisão têm precedência maior que adição e subtração e, entre \times e /, a avaliação é da esquerda para a direita (associatividade). Assim a expressão sem parênteses
\mathrm{Tc}*9.0/5.0+32.0
significa exatamente calcular primeiro \mathrm{Tc}\times 9{,}0, depois dividir o resultado por 5{,}0 e por fim somar 32{,}0. Além disso, como os literais são \,9{,}0 e \,5{,}0 (tipo ponto flutuante), a divisão é em ponto flutuante, evitando problemas de divisão inteira. Portanto a reescrita proposta é correta. Conclusão: a afirmação IV é verdadeira.

Passo 6

Avaliação da afirmação V (incremento): em C o operador pós-incremento \mathrm{Tc}++ adiciona 1 à variável \mathrm{Tc}. Quando usado como uma instrução isolada:
\mathrm{Tc}++;
é funcionalmente equivalente a
\mathrm{Tc} = \mathrm{Tc} + 1;
A única diferença entre \mathrm{Tc}++ e \mathrm{Tc}=\mathrm{Tc}+1 aparece quando o valor da expressão é usado dentro de uma expressão maior (por exemplo \mathrm{a} = \mathrm{Tc}++ atribui o valor antigo de \mathrm{Tc} a \mathrm{a} e só depois incrementa). Mas no código dado \mathrm{Tc}++ está sozinho como comando de incremento; portanto a equivalência afirmada na V é correta. Conclusão: a afirmação V é verdadeira.

Passo 7

Resumindo as verdades/mentiras:
  • I: falsa
  • II: falsa
  • III: falsa
  • IV: verdadeira
  • V: verdadeira
Portanto a alternativa correta é a que contém apenas IV e V.

Resposta

c. Apenas IV e V.

Exercícios relacionados