② Seis questões de leitura de código
Execute mentalmente antes de clicar em uma alternativa. Se errar, leia a explicação.
Q1. Cadeia de else if
int score = 85;
if (score >= 90) printf("S\n");
else if (score >= 80) printf("A\n");
else if (score >= 70) printf("B\n");
else printf("C\n");
Qual é a saída?
S
A
A B C
B
Explicação: As condições são testadas de cima para baixo: 85 >= 90 é falsa; 85 >= 80 é verdadeira. O programa exibe A e encerra a cadeia. As alternativas restantes não são executadas; B também não aparece.
Q2. Confundir = e ==
int a = 3;
if (a = 0) printf("A\n");
else printf("B\n");
printf("a=%d\n", a);
Qual é a saída?
A
a=3
B
a=3
A
a=0
B
a=0
Explicação: a = 0 é uma atribuição, não uma comparação. Ela atribui zero a a, e o valor da expressão também é zero. Como zero é falso, o programa entra no else e exibe B. Depois, a continua valendo zero, então aparece a=0. Para comparar, use a == 0.
Q3. Combinação lógica de um intervalo
int a = 7;
if (0 <= a && a < 10) printf("in\n");
else printf("out\n");
Qual é a saída?
in
out
Nada
Erro de compilação
Explicação: Para a=7, tanto 0 <= a quanto a < 10 são verdadeiras; com &&, o resultado também é verdadeiro, e a saída é in. Não escreva 0 <= a < 10: em C, isso equivale a (0 <= a) < 10.
Q4. Esquecer break no switch
int n = 2;
switch (n) {
case 1: printf("A ");
case 2: printf("B ");
case 3: printf("C ");
default: printf("D ");
}
Qual é a saída?
B
B C D
A B C D
B D
Explicação: Como n=2, a execução começa em case 2. Sem break, ela continua por case 3 e default: esse comportamento é chamado fallthrough. Por isso, a saída é B C D. Para impedir a continuação, termine o case com break;.
Q5. A qual if pertence o else?
int a = 0, b = 0;
if (a > 0)
if (b > 0) printf("both+\n");
else printf("a+ b nao positivo\n");
else printf("a not+\n");
Qual é a saída?
both+
a+ b nao positivo
a not+
Nada
Explicação: Como a=0, o primeiro if (a > 0) é falso, e o else externo é executado. A regra é associar cada else ao if mais próximo que ainda não tenha else; neste código, o else final corresponde ao if externo. A saída é a not+. A indentação não muda essa associação. Use { } para deixar a estrutura clara.
Q6. Apenas default corresponde
int n = 5;
switch (n) {
case 1: printf("one"); break;
case 2: printf("two"); break;
default: printf("other");
}
Qual é a saída?
one
two
other
Nada
Explicação: O valor n=5 não corresponde a nenhum case; portanto, o programa executa default e exibe other. A alternativa default trata os valores que não correspondem a nenhum dos cases.