Da trilha de C Este conceito ainda não saiu como card do dia. ir para o card de hoje

C Funções Básico

Funções

Em C, uma função é um bloco de código que executa uma tarefa específica e pode ser chamado de outros pontos do programa. Ela ajuda a organizar, reutilizar e testar o código. Toda função tem um nome, um tipo de retorno (ou void se não retorna nada) e uma lista de parâmetros (ou void se não recebe nada).

Antes de usar uma função, o compilador precisa conhecer sua assinatura. Isso é feito por meio de um protótipo (declaração), que informa o nome, o tipo de retorno e os tipos dos parâmetros. O protótipo geralmente fica no topo do arquivo ou em um arquivo de cabeçalho (.h).

A passagem de argumentos em C é sempre por valor: a função recebe cópias dos valores. Alterar um parâmetro dentro da função não modifica a variável original. Para modificar o valor original, é preciso passar um ponteiro (endereço da variável).

Uma função pode chamar a si mesma; isso se chama recursão. Toda recursão precisa de um caso base que interrompa as chamadas, caso contrário ocorre estouro de pilha (stack overflow).

Pontos-chave

  • Protótipos informam ao compilador a assinatura da função antes de seu uso.
  • A passagem de parâmetros em C é sempre por valor: a função recebe cópias.
  • O comando return encerra a função e devolve um valor (se houver).
  • Recursão é uma função que chama a si mesma; deve ter um caso base.
  • Funções void não retornam valor; use return; para sair antecipadamente.
funcoes.c
#include <stdio.h>

/* Protótipos: informam ao compilador como as funções são */
int soma(int a, int b);
int fatorial(int n);
void imprime_linha(void);

int main(void) {
    int x = 5, y = 3;

    /* Chamada de função com passagem por valor */
    int resultado = soma(x, y);
    printf("soma(%d, %d) = %d\n", x, y, resultado);

    /* Passagem por valor: x e y não são alterados */
    printf("x = %d, y = %d\n", x, y);

    /* Chamada de função recursiva */
    printf("fatorial(%d) = %d\n", x, fatorial(x));

    /* Função void sem parâmetros */
    imprime_linha();

    return 0;
}

/* Definição da função soma: retorna a soma de dois inteiros */
int soma(int a, int b) {
    return a + b;
}

/* Definição recursiva do fatorial */
int fatorial(int n) {
    if (n <= 1) {
        return 1;          /* caso base */
    }
    return n * fatorial(n - 1); /* chamada recursiva */
}

/* Função void que apenas imprime uma linha */
void imprime_linha(void) {
    printf("----------------\n");
}

Exercícios

  1. 1
    Fácil

    Função que calcula o dobro

    Escreva uma função chamada dobro que recebe um número inteiro e retorna o seu dobro. No main, leia um inteiro, chame a função e imprima o resultado no formato Dobro de X = Y.

    Resolver
  2. 2
    Médio

    Fatorial recursivo

    Implemente uma função recursiva chamada fatorial que calcula o fatorial de um número inteiro não negativo. O main deve ler um inteiro n (0 ≤ n ≤ 12) e imprimir Fatorial de n = resultado.

    Resolver
  3. 3
    Desafio

    Sequência de Fibonacci com recursão e passagem por valor

    Escreva uma função recursiva fibonacci que retorna o n-ésimo número de Fibonacci (considerando fib(0) = 0 e fib(1) = 1). No main, leia um inteiro n (0 ≤ n ≤ 20), chame a função e imprima Fibonacci(n) = valor. Além disso, crie uma função imprime_sequencia que recebe um inteiro n e imprime todos os termos de fib(0) até fib(n) separados por espaço, usando a função fibonacci.

    Resolver

Continue estudando