Aula 01 – Estrutura Geral de um Programa C

Anatomia de um programa C, o primeiro "Hello, World!" e como compilar no Code::Blocks

Visão Geral de um Programa C

Todo programa em C é formado por três elementos fundamentais que aparecem sempre juntos e sempre na mesma ordem:

Os três pilares de um programa C:
  1. Diretivas de pré-processador — instruções que começam com # e são processadas antes da compilação (ex: #include, #define).
  2. Definições de funções — blocos de código nomeados que realizam tarefas. A função main() é obrigatória e é o ponto de entrada de todo programa.
  3. Instruções (statements) — as ações executadas dentro das funções, sempre terminadas com ponto e vírgula ;.

Diferentemente do Java, que organiza o código em classes e objetos, o C é uma linguagem procedural: o código é organizado em funções independentes, sem o conceito de classe. Isso o torna mais próximo do hardware e mais simples em sua estrutura base.

DICA: Assim como no Java, o C usa chaves { } para delimitar blocos de código e ponto e vírgula ; para encerrar cada instrução. Quem já conhece Java sentirá essa familiaridade imediatamente.

O Primeiro Programa: "Olá, Mundo!"

Por convenção histórica, o primeiro programa aprendido em qualquer linguagem imprime "Hello, World!" na tela. Em C, ele tem a seguinte forma:

/* hello.c — Meu primeiro programa em C */
#include <stdio.h>

int main() {
    printf("Olá, Mundo!\n");
    return 0;
}
Olá, Mundo!

Cada linha desse programa tem um papel bem definido. Veja a anatomia completa:

Linha O que é O que faz
/* ... */ Comentário de bloco Texto ignorado pelo compilador; serve para documentar o código.
#include <stdio.h> Diretiva de pré-processador Importa a biblioteca padrão de entrada e saída (Standard Input/Output), que fornece as funções printf e scanf.
int main() Declaração da função principal Define o ponto de entrada obrigatório do programa. O int indica que a função retorna um número inteiro ao sistema operacional.
{ } Chaves de bloco Delimitam o corpo da função main. Todo o código do programa fica entre essas chaves.
printf("Olá, Mundo!\n"); Chamada de função Imprime o texto na tela. O \n é um caractere especial de nova linha (equivalente ao Enter).
return 0; Instrução de retorno Encerra a função main e retorna o valor 0 ao sistema operacional, sinalizando que o programa terminou com sucesso.
Atenção — extensão dos arquivos: Todo arquivo de código em C deve ser salvo com a extensão .c (exemplo: hello.c). Crie sempre uma pasta dedicada para seus projetos C e evite espaços ou caracteres especiais nos nomes de pastas e arquivos.

Sequências de Escape no printf

Dentro das aspas do printf, certos pares de caracteres têm significado especial. Eles são chamados de sequências de escape e permitem inserir formatação no texto de saída:

Sequência Nome Efeito
\n Nova linha (newline) Move o cursor para a próxima linha
\t Tabulação horizontal (tab) Insere um recuo de tabulação
\\ Barra invertida literal Imprime o caractere \
\" Aspas duplas literais Imprime o caractere " dentro da string
\0 Caractere nulo Marca o fim de uma string (veremos mais adiante)
#include <stdio.h>

int main() {
    printf("Linha 1\nLinha 2\n");          // quebra de linha
    printf("Nome:\tCarlos\n");             // tabulação
    printf("Ele disse: \"Olá!\"\n");       // aspas dentro do texto
    return 0;
}

Linha 1

Linha 2

Nome:   Carlos

Ele disse: "Olá!"

Lendo Dados do Usuário: scanf

Para receber dados digitados pelo usuário, o C usa a função scanf. Ela é o equivalente da classe Scanner do Java. Veja um exemplo completo:

#include <stdio.h>

int main() {
    int numero;

    printf("Digite um número: ");
    scanf("%d", &numero);               // lê um inteiro e armazena em 'numero'
    printf("Você digitou: %d\n", numero);

    return 0;
}

Digite um número: 42

Você digitou: 42

O operador & (lê-se "endereço de") diz ao scanf onde na memória ele deve gravar o valor digitado. Sem o &, o programa compila, mas se comporta de forma imprevisível, pois o scanf não saberia o endereço de destino do dado.

O símbolo %d dentro do scanf e do printf é chamado de especificador de formato. Ele indica o tipo do dado que será lido ou impresso:

Especificador Tipo de dado Exemplo
%d Inteiro (int) printf("%d", 42);
%f Ponto flutuante (float) printf("%f", 3.14);
%lf Ponto flutuante duplo (double) scanf("%lf", &x);
%c Caractere (char) printf("%c", 'A');
%s String (texto) printf("%s", "Olá");
%p Endereço de memória (ponteiro) printf("%p", &x);
DICA — Lendo um char com scanf: Sempre coloque um espaço antes de %c ao usar scanf:
scanf(" %c", &letra);  // o espaço descarta o '\n' que ficou no buffer
Sem o espaço, o scanf pode capturar a tecla Enter da leitura anterior em vez do caractere desejado.

C versus Java: Estrutura Comparada

Se você conhece Java, as diferenças de estrutura ficam muito claras quando colocamos os dois programas equivalentes lado a lado:

C Java
#include <stdio.h>

int main() {
    int numero;
    printf("Digite: ");
    scanf("%d", &numero);
    printf("Valor: %d\n", numero);
    return 0;
}
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Digite: ");
    int numero = sc.nextInt();
    System.out.println("Valor: " + numero);
  }
}
Principais diferenças estruturais:

Compilando e Executando no Code::Blocks

O Code::Blocks com MinGW é o ambiente recomendado para este curso. Para criar, compilar e executar seu primeiro programa C, siga estes passos:

Crie um novo projeto

No menu, vá em File > New > Project. Escolha o template Console Application, clique em Go e selecione a linguagem C (não C++).

Nomeie o projeto e escolha o diretório

Dê um nome ao projeto (ex: hello) e escolha uma pasta para salvá-lo. Evite espaços e acentos no caminho do diretório — isso pode causar erros de compilação no Windows.

Escreva o código em main.c

O Code::Blocks cria automaticamente um arquivo main.c com um esqueleto básico. Substitua o conteúdo pelo seu código.

DICA: Salve o arquivo com Ctrl + S sempre antes de compilar.

Compile o projeto

Pressione F9 (ou clique no botão Build and Run). O Code::Blocks compila o código e já executa se não houver erros. O log de compilação aparece no painel inferior — verifique se aparece a mensagem 0 error(s).

Se aparecerem erros: Leia a mensagem no painel de log. Erros comuns em iniciantes são: esquecer o ponto e vírgula ;, esquecer o & no scanf, ou escrever Printf com P maiúsculo (C é case-sensitive).

Execute separadamente (opcional)

Para executar sem recompilar, use Ctrl + F10. Uma janela de console exibirá a saída do programa ou aguardará a entrada do usuário, conforme o código.

Compilando pela linha de comando (alternativa): Se preferir usar o terminal, o comando básico com GCC é:
gcc main.c -o hello
./hello          // Linux / macOS
hello.exe        // Windows
O flag -o hello define o nome do arquivo executável gerado.

Exemplo Completo: Lendo e Exibindo Dados

Vamos juntar tudo o que vimos nesta aula em um programa que lê o nome e a idade do usuário e exibe uma mensagem formatada:

#include <stdio.h>

int main() {
    int idade;
    char nome[50];               // vetor de 50 caracteres (veremos mais adiante)

    printf("Qual é o seu nome? ");
    scanf("%s", nome);           // lê uma palavra (sem espaços)

    printf("Qual é a sua idade? ");
    scanf("%d", &idade);

    printf("\nOlá, %s! Você tem %d anos.\n", nome, idade);

    return 0;
}

Qual é o seu nome? Ana

Qual é a sua idade? 22

 

Olá, Ana! Você tem 22 anos.

Observe: Note que o scanf("%s", nome) não usa o operador & neste caso — porque nome é um array e o nome de um array já é, por si só, o endereço do seu primeiro elemento. Esse comportamento será explicado em detalhes na Aula de Arrays.

Exercícios — Aula 01

Responda às questões abaixo para fixar os conceitos da aula:

1. Qual é a função obrigatória em todo programa C e por quê?

2. O que a diretiva #include <stdio.h> faz em um programa C?

3. Analise o código abaixo. Qual será a saída?

printf("A\nB\tC\n");

4. Por que o scanf precisa do operador & antes do nome da variável?

5. Qual dos códigos abaixo está correto para ler um número inteiro e imprimi-lo?

6. No Code::Blocks, qual tecla compila E executa o programa em um único passo?

7. O que significa o return 0; no final da função main()?

8. Qual especificador de formato deve ser usado no printf para imprimir uma variável do tipo float?