Revisão da ETAPA 2 — Aritmética, atribuição e incremento

Revise as aulas 8 a 11 com uma folha de consulta, seis questões de leitura de código e uma lista de erros frequentes.

① Folha de consulta

Revise os conceitos essenciais da ETAPA 2nas tabelas a seguir.

🧮 Operadores aritméticos

SímboloSignificadoExemploResultado
+Adição3 + 25
-Subtração3 - 21
*Multiplicação3 * 26
/Divisão7 / 23
%Resto7 % 21
  • Precedência: * / % antes de + e -
  • Parênteses ( ) explicita a ordem

⚠️ Inteiro ÷ inteiro = inteiro (truncado)

printf("%d", 7 / 2);       // 3 (sem a parte fracionária)
printf("%f", 7.0 / 2);     // 3.500000
printf("%f", (double)7 / 2); // 3.500000 (conversão de tipo)
  • Converta um operando para ponto flutuante para obter divisão real
  • cast (double)x força a conversão de tipo

🔄 Atribuição composta

Forma curtaForma expandida
a += 5a = a + 5
a -= 5a = a - 5
a *= 5a = a * 5
a /= 5a = a / 5
a %= 5a = a % 5
  • “atualizar a própria variável”.

⏫ Incremento e decremento

int a = 5;
a++;   // a = 6 (soma 1 a a)
a--;   // a = 5 (subtrai 1 de a)

// Prefixo e pós-fixo diferem dentro de expressões
int x = 5, y;
y = x++; // y=5, x=6 (incrementa x depois de atribuir a y)
y = ++x; // y=7, x=7 (incrementa antes de atribuir a y)
  • Em uma instrução isolada a++; , prefixo e pós-fixo têm o mesmo efeito
  • Dentro de expressões , observe a diferença entre prefixo e pós-fixo

🐞 Depuração com printf

int a = 10, b = 3;
printf("a=%d b=%d\n", a, b);
int avg = (a + b) / 2;
printf("avg=%d\n", avg); // Esperado:6.5 Resultado:6 ← divisão inteira!
  • Quando o resultado for inesperado, imprima os valores antes da operação
  • Nome da variável + valor facilita acompanhar a execução

② 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.

③ Lista de erros e dificuldades frequentes

Se reconhecer um erro que já cometeu, volte à página correspondente para revisar.
  1. 1
    Perder a parte fracionária na divisão inteira
    7 / 2 resulta em 3. Para preservar a fração, use 7.0 / 2 ou converta um operando, como em (double)x / y.
  2. 2
    Calcular uma média com divisão inteira
    (a + b) / 2 produz um inteiro quando a e b são int.(double)(a + b) / 2 faz a conversão necessária.
  3. 3
    Prefixo ++x e pós-fixo x++ confundidos
    Isoladamente têm o mesmo efeito, masdentro de uma expressão o momento do incremento muda o resultado. Na dúvida, separe em instruções.
  4. 4
    Confundir a precedência dos operadores
    2 + 3 * 4 resulta em 14, pois a multiplicação vem primeiro. Use parênteses para explicitar a ordem desejada.
  5. 5
    Confundir atribuição = com comparação ==
    if (x = 5) atribui 5 a x e testa esse valor, que é verdadeiro por não ser zero. Para comparar, use ==.
  6. 6
    Inverter a ordem das variáveis em printf
    printf("a=%d b=%d", b, a) troca os valores exibidos porque a ordem dos argumentos não corresponde ao formato.
  7. 7
    Esquecer de remover printf de depuração
    Mensagens de depuração podem poluir a saída final.Revise antes de fazer commit.

④ Páginas para revisar — retome os pontos difíceis

Use os links para voltar diretamente à explicação correspondente.
Aula 8: Operadores AritméticosPara revisar divisão inteira, conversões e precedência Quiz (Aritmética)Pratique com questões semelhantes Atribuição e IncrementoPara revisar += e ++ Aula 11: Acompanhar variáveis com printfPara investigar resultados inesperados Folha de consulta rápidaRevise a precedência em uma página