② Seis questões de leitura de código
Execute mentalmente antes de clicar em uma alternativa. Se errar, leia a explicação.
Q1. Divisão entre inteiros
printf("%d\n", 17 / 5);
Qual é a saída?
3.4
3
4 (arredondado)
3.400000
Explicação: Em C, a divisão de dois inteiros produz um inteiro, descartando a parte fracionária em direção a zero. Assim, 17 / 5 resulta em 3, e não em 3.4; não há arredondamento para o inteiro mais próximo. Para preservar a fração, use 17.0 / 5 ou (double)17 / 5.
Q2. Conversão para divisão real
int a = 17, b = 5;
printf("%f\n", (double)a / b);
Qual é a saída?
3.000000
3.400000
3
Erro de compilação
Explicação: (double)a converte a para double antes da divisão. Assim, 17.0 / 5 resulta em 3.4, e %f exibe 3.400000. A expressão (double)a / b equivale a ((double)a) / b.
Q3. Testar usando o resto (%)
int n = 17;
printf("%d %d\n", n / 5, n % 5);
Qual é a saída?
3 2
3.4 0
3 5
2 3
Explicação: n / 5 fornece o quociente inteiro, 3, e n % 5 fornece o resto, 2, pois 17 = 5 × 3 + 2. O operador % também serve para testar divisibilidade: n % 2 == 0 identifica números pares.
Q4. Atribuição composta
int a = 10;
a += 5;
a *= 2;
printf("%d\n", a);
Qual é a saída?
25
30
20
15
Explicação: Acompanhe as atribuições: a=10; depois, a += 5 equivale a a = a + 5, produzindo 15; por fim, a *= 2 produz 30. A saída é 30.
Q5. Pós-incremento
int x = 5;
int y = x++;
printf("x=%d y=%d\n", x, y);
Qual é a saída?
x=5 y=6
x=6 y=5
x=6 y=6
x=5 y=5
Explicação: x++ é um pós-incremento. Em y = x++, y recebe o valor anterior de x (5), e x passa a 6. Logo, y=5 e x=6. Com ++x, o incremento ocorre antes de fornecer o valor da expressão, e y também seria 6.
Q6. Precedência dos operadores
printf("%d\n", 2 + 3 * 4);
Qual é a saída?
20
14
9
24
Explicação: O operador * tem maior precedência que +. Primeiro calculamos 3 * 4 = 12; depois, 2 + 12 = 14. Para obter 20, escreva (2 + 3) * 4, usando parênteses.