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 %f → 3.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 doubleno momento em que a divisão ocorre.