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.
- 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.
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}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.
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}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;significax = 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 += nex++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.
De minutos para horas
A variável total_minutes guarda um número de minutos. Imprima-o em horas e minutos, assim para 135:
135 minutes is 2h 15mUse divisão inteira e % - não é preciso laço.
- Imprime 2h 15m
Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.
Uma média correta
São dadas três notas inteiras de provas. Imprima a média delas com duas casas decimais:
Average: 84.33Cuidado com a divisão inteira.
- Imprime 84.33
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…