Quiz (Aritmética)

Quiz interativo sobre operadores aritméticos em C.

Questão 1 — divisão int / int

Preveja a saída.
int a = 7, b = 5;
printf("a / b = %d\n", a / b);

O que isso imprime?

a / b = 1.4
a / b = 1
a / b = 2
a / b = 1.400000
Explicação: int / int produz um int (divisão inteira).
7 / 5 é matematicamente 1.4, mas a parte fracionária é truncada, restando 1.
Lembre-se: a divisão inteira sempre trunca.

Questão 2 — Misturando int e double

int a = 7;
double b = 5.0;
printf("a / b = %f\n", a / b);

O que isso imprime?

a / b = 1.400000
a / b = 1.000000
a / b = 1
Explicação: Quando int e double são misturados, o int é automaticamente promovido para double (conversão implícita).
7.0 / 5.0 = 1.4 → impresso como 1.400000 com %f.
Se qualquer operando for um double, o resultado é um double.

Questão 3 — Cast (double)

int a = 7, b = 5;
printf("a / b = %f\n", (double)a / b);

O que isso imprime?

Erro
a / b = 1.000000
a / b = 1.400000
Explicação: (double)a converte explicitamente a para double. A divisão passa a ser double / int, e b também é promovido para double.
7.0 / 5.0 = 1.4 → 1.400000.
Fazer cast de um operando é como se obtém divisão de ponto flutuante a partir de duas variáveis int.

Questão 4 — Operador módulo (%)

int a = 17, b = 5;
printf("%d / %d = %d resto %d\n", a, b, a/b, a%b);

O que isso imprime?

17 / 5 = 3 resto 2
17 / 5 = 3.4 resto 0
17 / 5 = 2 resto 3
Explicação: a / b = 17 / 5 = 3 (truncado), e a % b = resto = 2.
% retorna o resto e só funciona com tipos inteiros — não com doubles.
Usos comuns incluem verificação de par/ímpar (ex.: n % 2 == 0) e extração de dígitos.

Questão 5 — Precedência de operadores

Como na matemática, * e / são avaliados antes de + e -.
int a = 2 + 3 * 4;
printf("a = %d\n", a);

O que isso imprime?

a = 20
a = 14
a = 24
a = 9
Explicação: Em C, assim como na matemática, * / % têm precedência maior que + -.
(1) 3 * 4 = 12 é avaliado primeiro.
(2) 2 + 12 = 14.
A avaliação não é estritamente da esquerda para a direita — os operadores de maior precedência são executados primeiro.

Questão 6 — Alterando a ordem com parênteses

Parênteses aumentam a precedência do que estiver dentro deles.
int a = (2 + 3) * 4;
printf("a = %d\n", a);

O que isso imprime?

a = 14
a = 24
a = 20
a = 5
Explicação: Expressões dentro de ( ) são avaliadas primeiro.
(1) (2 + 3) = 5.
(2) 5 * 4 = 20.
Quando estiver em dúvida sobre precedência, adicione parênteses explícitos — isso também torna o código mais fácil de ler.

Questão 7 — Usando % em um double

O operador módulo funciona em qualquer tipo?
double a = 7.0, b = 2.0;
printf("%f\n", a % b);

O que acontece?

Imprime 1.000000
Erro de compilação
Imprime 0.000000
Imprime 3.500000
Explicação: O operador % só funciona com tipos inteiros. Usá-lo com valores double causa um erro de compilação.
Para restos de ponto flutuante, inclua <math.h> e use fmod(a, b).

Questão 8 — Divisão com números negativos

O que acontece quando você divide um int negativo?
int a = -7, b = 2;
printf("%d\n", a / b);

O que isso imprime?

-3
-4
-3.5
3
Explicação: Desde o C99, a divisão inteira trunca em direção a zero.
-7 / 2 é matematicamente -3.5. Truncar em direção a zero resulta em -3 (não -4).
O módulo é definido de forma que a = (a/b)*b + a%b ainda se mantenha — aqui, -7 % 2 = -1.

Questão 9 — A posição do cast importa

Onde você coloca o cast muda o resultado.
int a = 7, b = 2;
printf("%f\n", (double)(a / b));

O que isso imprime?

3.500000
3.000000
3
Erro de compilação
Explicação: A posição do cast é o que importa.
(1) A expressão entre parênteses a / b é avaliada primeiro (int / int → 7/2 = 3, truncado).
(2) O resultado 3 é então convertido para (double) → 3.0.
(3) Impresso com %f3.000000.

Para realizar divisão de ponto flutuante de verdade, faça o cast antes da divisão: (double)a / b. Pelo menos um operando precisa ser um double no momento em que a divisão ocorre.

Aulas relacionadas

Operadores
Operadores aritméticos
Operadores aritméticos em C (+, -, *, /, %) com diagramas, mais as pegadinhas da divisão inteira.
Operadores
Atribuição e incremento
Operadores de atribuição e incremento (++)/decremento (--) em C.
Operadores
Operadores de comparação e lógicos
Operadores de comparação (==, !=, <, >) e lógicos (&&, ||, !) em C.
← Aula anterior
Aula 8: Operadores Aritméticos
Próxima aula →
Aula 10: Atribuição e Incremento