Carregando
0x30Lição 4 de 20

Operadores e expressões

Faça contas em C - e conheça as duas surpresas que pegam todo mundo: a divisão inteira e a precedência dos operadores.

12 min Questionário com 6 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Usar operadores aritméticos, de comparação e de atribuição
  • Prever o resultado da divisão inteira e do %
  • Converter entre tipos com casts

Uma expressão é qualquer coisa que produz um valor: 3 + 4, price * quantity, x > 10. O C tem um conjunto rico de operadores para montá-las. A maioria se comporta como você espera das aulas de matemática - com algumas exceções importantes.

Aritmética

+ soma, - subtrai, * multiplica, / divide, e % (módulo) dá o resto da divisão inteira. O % é surpreendentemente útil: n % 2 == 0 testa se n é par, e n % 10 dá o último dígito dele.

arithmetic.c
1#include <stdio.h>
2
3int main(void) {
4    int a = 17, b = 5;
5    printf("%d + %d = %d\n", a, b, a + b);
6    printf("%d / %d = %d\n", a, b, a / b);
7    printf("%d %% %d = %d\n", a, b, a % b);
8    return 0;
9}
Saída
17 + 5 = 22
17 / 5 = 3
17 % 5 = 2

Casts: convertendo tipos

Um cast converte um valor para outro tipo: (double)a transforma o inteiro em a num double naquela expressão. O C também converte automaticamente quando você mistura tipos - um int combinado com um double é promovido a double. Atribuir um double a um int descarta a fração em silêncio, e o -Wall pode avisar você sobre isso.

average.c
1#include <stdio.h>
2
3int main(void) {
4    int sum = 7;
5    int count = 2;
6    double wrong = sum / count;
7    double right = (double)sum / count;
8    printf("wrong: %.1f\n", wrong);
9    printf("right: %.1f\n", right);
10    return 0;
11}
Saída
wrong: 3.0
right: 3.5

Repare em wrong: guardar o resultado num double não ajuda, porque a divisão inteira já aconteceu do lado direito. Converta antes de dividir.

Precedência

Como na matemática, *, / e % acontecem antes de + e -: 2 + 3 * 4 é 14. Operadores de mesma precedência em geral vão da esquerda para a direita: 10 - 4 - 3 é 3. Na dúvida, acrescente parênteses - eles não custam nada e deixam a intenção óbvia para o próximo leitor.

Atalhos de atribuição

O C tem formas compactas para atualizar uma variável:

  • x += 5; significa x = x + 5; (também -=, *=, /=, %=)
  • x++; e ++x; somam 1; x--; e --x; subtraem 1

x++ produz o valor antigo e depois incrementa; ++x incrementa primeiro. Numa linha sozinha, a diferença não importa. Dentro de uma expressão maior importa, e misturar ++ com outros usos da mesma variável numa única expressão pode ser indefinido - deixe os incrementos numa linha própria.

Comparações e lógica

Os operadores de comparação - ==, !=, <, >, <=, >= - produzem 1 para verdadeiro e 0 para falso. Combine-os com && (e), || (ou) e ! (não). Você vai usá-los o tempo todo na próxima unidade para tomar decisões.

Principais conclusões

  • A / inteira trunca (7 / 2 é 3) e % dá o resto. Faça o cast antes de dividir para obter um decimal: (double)a / b.

  • *, / e % têm precedência maior que + e -. Use parênteses na dúvida.

  • x += n e x++ são atalhos; == compara, = atribui.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C

Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.

Exercício 1

De minutos para horas

+25 XP

A variável total_minutes guarda um número de minutos. Imprima-o em horas e minutos, assim para 135:

135 minutes is 2h 15m

Use divisão inteira e % - não é preciso laço.

  • Imprime 2h 15m
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Exercício 2

Uma média correta

+25 XP

São dadas três notas inteiras de provas. Imprima a média delas com duas casas decimais:

Average: 84.33

Cuidado com a divisão inteira.

  • Imprime 84.33
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…