Learning Hub Logo

Sobre Diego Pinho

Professor especialista em tecnologia com mais de 10 anos de experiência. Autor de livros técnicos e criador de cursos que já impactaram milhares de estudantes.

Visite meu site principal →

Serviços

  • Área do Aluno
  • Solicite um orçamento
  • Trabalhe Conosco

Redes Sociais

  • Youtube
  • TikTok
  • Instagram
  • LinkedIn

Links

  • Site Institucional
  • Nosso Blog
  • Cursos Online
  • Livros Publicados

Professor Diego Pinho

Educação, Tecnologia e IA © 2026

C›Resumo Prático de C

Resumo Prático de C

Guia essencial de C em português para iniciantes. Conceitos fundamentais com exemplos práticos de programação procedural.

⚡1 min de leitura

1. Comentários e Estrutura Básica

1// Comentários de uma linha começam com // 2 3/* 4 Comentários de múltiplas linhas usam barra-asterisco 5 e terminam com asterisco-barra 6*/ 7 8// Incluir bibliotecas padrão
9#include <stdio.h> // entrada/saída
10#include <stdlib.h> // funções gerais
11#include <string.h> // manipulação de strings
12
13// Constantes
14#define PI 3.14159
15#define MAX 100
16
17// Ponto de entrada do programa
18int main() {
19 printf("Olá, Mundo!\n");
20 return 0; // 0 significa execução bem-sucedida
21}

2. Tipos de Dados e Variáveis

1#include <stdio.h> 2 3int main() { 4 // Inteiros 5 int numero = 42; // 32 bits (típico) 6 short numero_pequeno = 10; // 16 bits 7 long long numero_grande = 10000000000LL; // 64 bits garantidos (adicione LL) 8 9 // Números decimais 10 float altura = 1.75f; // 32 bits (adicione f) 11 double pi = 3.14159; // 64 bits (padrão) 12 13 // Caracteres 14 char letra = 'A'; // um caractere individual 15 char grade = 'B'; 16 17 // Constantes (não podem ser alteradas) 18 const int MAXIMO = 100; 19 20 // Imprimindo valores 21 printf("Número: %d\n", numero); // %d para int 22 printf("Altura: %.2f\n", altura); // %.2f para float com 2 casas 23 printf("Letra: %c\n", letra); // %c para char 24 printf("Grande: %lld\n", numero_grande); // %lld para long long 25 26 return 0; 27}

3. Entrada e Saída

1#include <stdio.h> 2#include <string.h> 3 4int main() { 5 // Saída simples 6 printf("Bem-vindo ao C!\n"); 7 printf("Sua idade: "); 8 9 // Entrada de dados 10 int idade; 11 scanf("%d", &idade); // & obtém o endereço da variável 12 13 // Limpar o buffer do teclado (boa prática após scanf) 14 while (getchar() != '\n'); 15 16 printf("Você tem %d anos\n", idade); 17 18 // Entrada de string 19 char nome[50]; // array de caracteres (string) 20 printf("Qual é seu nome? "); 21 fgets(nome, sizeof(nome), stdin); // fgets é mais seguro que scanf 22 nome[strcspn(nome, "\n")] = 0; // Remove o 'Enter' (\n) capturado pelo fgets 23 24 printf("Olá, %s!\n", nome); // %s para string 25 26 // Exibir resultados formatados 27 int numero = 42; 28 printf("Número em decimal: %d\n", numero); // => 42 29 printf("Número em hexadecimal: %x\n", numero); // => 2a 30 printf("Número em octal: %o\n", numero); // => 52 31 32 return 0; 33}

4. Operadores

1#include <stdio.h> 2 3int main() { 4 // Operadores aritméticos 5 int a = 10, b = 3; 6 7 printf("Soma: %d\n", a + b); // => 13 8 printf("Subtração: %d\n", a - b); // => 7 9 printf("Multiplicação: %d\n", a * b); // => 30 10 printf("Divisão: %d\n", a / b); // => 3 11 printf("Módulo: %d\n", a % b); // => 1 12 13 // Operadores de comparação 14 printf("a > b: %d\n", a > b); // => 1 (verdadeiro) 15 printf("a == b: %d\n", a == b); // => 0 (falso) 16 printf("a != b: %d\n", a != b); // => 1 (verdadeiro) 17 printf("a <= 10: %d\n", a <= 10); // => 1 18 19 // Operadores lógicos 20 printf("(a > b) && (b > 0): %d\n", (a > b) && (b > 0)); // => 1 21 printf("(a < 0) || (b > 0): %d\n", (a < 0) || (b > 0)); // => 1 22 printf("!(a < 0): %d\n", !(a < 0)); // => 1 23 24 // Atribuição composta 25 int x = 5; 26 x += 3; // x = x + 3 => x = 8 27 x -= 2; // x = x - 2 => x = 6 28 x *= 2; // x = x * 2 => x = 12 29 30 // Incremento e decremento 31 int contador = 5; 32 printf("%d\n", contador++); // imprime 5, depois incrementa 33 printf("%d\n", ++contador); // incrementa, depois imprime 7 34 35 // Operador ternário 36 int idade = 20; 37 char status = (idade >= 18) ? 'A' : 'M'; // A = adulto, M = menor 38 printf("Status: %c\n", status); // => 'A' 39 40 return 0; 41}

5. Estruturas de Controle

1#include <stdio.h> 2 3int main() { 4 // Condicional if/else 5 int temperatura = 28; 6 7 if (temperatura > 30) { 8 printf("Muito quente!\n"); 9 } else if (temperatura < 15) { 10 printf("Muito frio!\n"); 11 } else { 12 printf("Temperatura agradável\n"); // => será impresso 13 } 14 15 // Switch 16 int dia = 3; 17 switch (dia) { 18 case 1: 19 printf("Segunda-feira\n"); 20 break; 21 case 2: 22 printf("Terça-feira\n"); 23 break; 24 case 3: 25 printf("Quarta-feira\n"); // => será impresso 26 break; 27 default: 28 printf("Outro dia\n"); 29 } 30 31 // Operador ternário (if em uma linha) 32 int numero = 10; 33 printf("%s\n", (numero > 5) ? "Maior que 5" : "Menor ou igual a 5"); 34 // => "Maior que 5" 35 36 return 0; 37}

6. Laços de Repetição

1#include <stdio.h> 2 3int main() { 4 // Loop for 5 printf("Loop for:\n"); 6 for (int i = 0; i < 5; i++) { 7 printf("%d ", i); 8 } 9 printf("\n"); // => 0 1 2 3 4 10 11 // Loop while 12 printf("Loop while:\n"); 13 int contador = 0; 14 while (contador < 3) { 15 printf("Contagem: %d\n", contador); 16 contador++; 17 } 18 // => Contagem: 0 19 // Contagem: 1 20 // Contagem: 2 21 22 // Loop do-while (sempre executa pelo menos uma vez) 23 printf("Loop do-while:\n"); 24 int tentativa = 0; 25 do { 26 printf("Tentativa %d\n", tentativa); 27 tentativa++; 28 } while (tentativa < 2); 29 // => Tentativa 0 30 // Tentativa 1 31 32 // Break e continue 33 printf("Com break e continue:\n"); 34 for (int i = 0; i < 10; i++) { 35 if (i == 2) { 36 continue; // pula a iteração atual 37 } 38 if (i == 5) { 39 break; // sai do loop 40 } 41 printf("%d ", i); 42 } 43 printf("\n"); // => 0 1 3 4 44 45 return 0; 46}

7. Arrays e Strings

1#include <stdio.h> 2#include <string.h> 3 4int main() { 5 // Array de inteiros 6 int numeros[5] = {10, 20, 30, 40, 50}; 7 8 // Acessar elementos 9 printf("Primeiro número: %d\n", numeros[0]); // => 10 10 printf("Último número: %d\n", numeros[4]); // => 50 11 12 // Modificar elemento 13 numeros[2] = 35; 14 printf("Terceiro número agora: %d\n", numeros[2]); // => 35 15 16 // Iterar sobre array 17 printf("Todos os números: "); 18 for (int i = 0; i < 5; i++) { 19 printf("%d ", numeros[i]); 20 } 21 printf("\n"); // => 10 20 35 40 50 22 23 // Strings (arrays de caracteres) 24 char saudacao[50] = "Olá, Mundo!"; 25 printf("String: %s\n", saudacao); // => "Olá, Mundo!" 26 printf("Primeiro caractere: %c\n", saudacao[0]); // => 'O' 27 28 // Comprimento da string 29 printf("Comprimento: %zu\n", strlen(saudacao)); // => 12 30 31 // Concatenar strings 32 char nome[30] = "João"; 33 char sobrenome[30] = "Silva"; 34 char nome_completo[60]; 35 strcpy(nome_completo, nome); // copiar 36 strcat(nome_completo, " "); // concatenar espaço 37 strcat(nome_completo, sobrenome); // concatenar sobrenome 38 printf("Nome completo: %s\n", nome_completo); // => "João Silva" 39 40 // Array multidimensional 41 int matriz[2][3] = { 42 {1, 2, 3}, 43 {4, 5, 6} 44 }; 45 printf("Elemento [0][1]: %d\n", matriz[0][1]); // => 2 46 47 return 0; 48}

8. Funções

1#include <stdio.h> 2#include <string.h> 3 4// Protótipo de função (declare antes de usar) 5int somar(int a, int b); 6void saudacao(char *nome); 7int multiplicar(int x, int y); 8double calcularMedia(double nota1, double nota2, double nota3); 9void inverterString(char *str); 10 11int main() { 12 // Chamando funções 13 printf("Soma: %d\n", somar(5, 3)); // => 8 14 printf("Multiplicação: %d\n", multiplicar(4, 5)); // => 20 15 16 saudacao("Maria"); // => "Olá, Maria!\n" 17 18 return 0; 19} 20 21// Função com retorno 22int somar(int a, int b) { 23 return a + b; 24} 25 26// Função sem retorno (void) 27void saudacao(char *nome) { 28 printf("Olá, %s!\n", nome); 29} 30 31// Função com múltiplos parâmetros 32int multiplicar(int x, int y) { 33 return x * y; 34} 35 36// Função que calcula média 37double calcularMedia(double nota1, double nota2, double nota3) { 38 return (nota1 + nota2 + nota3) / 3; 39} 40 41// Função que inverte uma string 42void inverterString(char *str) { 43 int n = strlen(str); 44 for (int i = 0; i < n / 2; i++) { 45 char temp = str[i]; 46 str[i] = str[n - i - 1]; 47 str[n - i - 1] = temp; 48 } 49} 50 51/* 52// Exemplos de uso das outras funções: 53 54double media = calcularMedia(7.5, 8.0, 8.5); 55printf("Média: %.2f\n", media); // => 8.00 56 57char texto[] = "roma"; 58inverterString(texto); 59printf("Invertido: %s\n", texto); // => "amor" 60*/

9. Ponteiros e Endereços de Memória

1#include <stdio.h> 2#include <stdlib.h> 3 4int main() { 5 // Variável normal 6 int numero = 42; 7 8 // Ponteiro (armazena endereço de memória) 9 int *ptr = &numero; // & obtém o endereço 10 11 // Acessar endereço 12 printf("Endereço: %p\n", (void *)ptr); 13 printf("Valor na memória: %d\n", *ptr); // * acessa o valor 14 15 // Modificar valor através do ponteiro 16 *ptr = 100; 17 printf("Novo valor: %d\n", numero); // => 100 18 19 // Alocar memória dinamicamente 20 int *array = malloc(5 * sizeof(int)); // aloca espaço para 5 ints 21 22 if (array == NULL) { 23 printf("Erro ao alocar memória!\n"); 24 return 1; 25 } 26 27 // Usar o array alocado 28 for (int i = 0; i < 5; i++) { 29 array[i] = i * 10; 30 printf("%d ", array[i]); 31 } 32 printf("\n"); // => 0 10 20 30 40 33 34 // Liberar memória (importante!) 35 free(array); 36 array = NULL; // boa prática 37 38 return 0; 39}

10. Structs (Estruturas)

1#include <stdio.h> 2#include <string.h> 3 4// Definir uma struct 5struct Pessoa { 6 char nome[50]; 7 int idade; 8 float altura; 9}; 10 11// Definir uma struct para retângulo 12struct Retangulo { 13 int largura; 14 int altura; 15}; 16 17// Função que calcula área 18int calcularArea(struct Retangulo r) { 19 return r.largura * r.altura; 20} 21 22int main() { 23 // Criar uma variável do tipo struct 24 struct Pessoa pessoa; 25 26 // Atribuir valores aos membros 27 strcpy(pessoa.nome, "João Silva"); 28 pessoa.idade = 30; 29 pessoa.altura = 1.75; 30 31 // Acessar valores 32 printf("Nome: %s\n", pessoa.nome); // => "João Silva" 33 printf("Idade: %d anos\n", pessoa.idade); // => 30 anos 34 printf("Altura: %.2f metros\n", pessoa.altura); // => 1.75 metros 35 36 // Inicializar na declaração 37 struct Retangulo quad = {10, 5}; 38 printf("Área do retângulo: %d\n", calcularArea(quad)); // => 50 39 40 // Ponteiro para struct 41 struct Pessoa *ptr_pessoa = &pessoa; 42 43 // Acessar membros através de ponteiro (duas formas) 44 printf("Idade (forma 1): %d\n", (*ptr_pessoa).idade); // => 30 45 printf("Idade (forma 2): %d\n", ptr_pessoa->idade); // => 30 46 47 // Array de structs 48 struct Pessoa pessoas[3]; 49 50 strcpy(pessoas[0].nome, "Ana"); 51 pessoas[0].idade = 25; 52 53 strcpy(pessoas[1].nome, "Bruno"); 54 pessoas[1].idade = 28; 55 56 for (int i = 0; i < 2; i++) { 57 printf("%s tem %d anos\n", pessoas[i].nome, pessoas[i].idade); 58 } 59 // => Ana tem 25 anos 60 // Bruno tem 28 anos 61 62 return 0; 63}