Calcular Fatoriais em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a calcular fatoriais em programação C. O laboratório abrange dois métodos para calcular o fatorial de um número: usando um loop iterativo e uma função recursiva. Você começará lendo uma entrada inteira do usuário, depois implementará as abordagens baseadas em loop e recursivas para calcular o fatorial e, finalmente, imprimirá o resultado.

O laboratório fornece instruções passo a passo e exemplos de código para guiá-lo pelo processo, garantindo uma compreensão abrangente do cálculo de fatoriais em C.

Ler um Inteiro n

Neste passo, você aprenderá como ler uma entrada inteira para calcular seu fatorial em um programa C. Iremos nos concentrar na criação de um programa simples que solicita ao usuário que digite um número e o armazena para cálculos futuros.

Primeiro, vamos criar um novo arquivo C no diretório do projeto:

cd ~/project
nano factorial.c

Agora, adicione o seguinte código para ler uma entrada inteira:

#include <stdio.h>

int main() {
    int n;

    printf("Digite um número para calcular seu fatorial: ");
    scanf("%d", &n);

    printf("Você digitou: %d\n", n);

    return 0;
}

Vamos compilar e executar o programa:

gcc factorial.c -o factorial
./factorial

Exemplo de saída:

Digite um número para calcular seu fatorial: 5
Você digitou: 5

Neste código:

  • printf() é usado para exibir um prompt ao usuário
  • scanf() lê a entrada inteira do usuário
  • %d é o especificador de formato para inteiros
  • &n passa o endereço de memória da variável n para armazenar a entrada

Calcular n! Usando Loop ou Recursão

Neste passo, você aprenderá dois métodos para calcular o fatorial de um número: usando um loop iterativo e uma função recursiva. Vamos modificar o arquivo factorial.c anterior para implementar ambas as abordagens.

Atualize o arquivo factorial.c:

cd ~/project
nano factorial.c

Adicione o seguinte código para implementar o cálculo do fatorial usando um loop e recursão:

#include <stdio.h>

// Cálculo do fatorial usando loop iterativo
unsigned long long factorialLoop(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

// Cálculo do fatorial usando recursão
unsigned long long factorialRecursive(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * factorialRecursive(n - 1);
}

int main() {
    int n;

    printf("Digite um número para calcular seu fatorial: ");
    scanf("%d", &n);

    if (n < 0) {
        printf("O fatorial não está definido para números negativos.\n");
        return 1;
    }

    printf("Fatorial usando loop: %llu\n", factorialLoop(n));
    printf("Fatorial usando recursão: %llu\n", factorialRecursive(n));

    return 0;
}

Compile e execute o programa:

gcc factorial.c -o factorial
./factorial

Exemplo de saída:

Digite um número para calcular seu fatorial: 5
Fatorial usando loop: 120
Fatorial usando recursão: 120

Pontos-chave desta implementação:

  • unsigned long long é usado para lidar com valores de fatorial maiores
  • O método de loop usa um loop for para multiplicar os números
  • O método recursivo chama a si mesmo com n-1 até atingir o caso base
  • Foi adicionada a manipulação de erros para números negativos
  • Ambos os métodos produzem o mesmo resultado

Imprimir o Fatorial

Neste passo, você aprimorará o programa de cálculo de fatorial para fornecer uma saída mais detalhada e lidar com diferentes cenários de entrada. Modificaremos o arquivo factorial.c para melhorar a apresentação dos resultados do fatorial.

Atualize o arquivo factorial.c:

cd ~/project
nano factorial.c

Substitua o conteúdo anterior pela seguinte implementação aprimorada:

#include <stdio.h>

unsigned long long factorialLoop(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

void printFactorialDetails(int n, unsigned long long factorial) {
    printf("Detalhes do Cálculo do Fatorial:\n");
    printf("Número (n): %d\n", n);
    printf("Fatorial (n!): %llu\n", factorial);

    printf("Expansão do Fatorial: ");
    for (int i = 1; i <= n; i++) {
        printf("%d%s", i, (i < n) ? " × " : " = ");
    }
    printf("%llu\n", factorial);
}

int main() {
    int n;

    printf("Digite um inteiro não negativo para calcular seu fatorial: ");
    scanf("%d", &n);

    if (n < 0) {
        printf("Erro: O fatorial não está definido para números negativos.\n");
        return 1;
    }

    if (n > 20) {
        printf("Aviso: O fatorial para números grandes pode causar estouro de inteiro.\n");
    }

    unsigned long long result = factorialLoop(n);
    printFactorialDetails(n, result);

    return 0;
}

Compile e execute o programa:

gcc factorial.c -o factorial
./factorial

Exemplo de saída:

Digite um inteiro não negativo para calcular seu fatorial: 5
Detalhes do Cálculo do Fatorial:
Número (n): 5
Fatorial (n!): 120
Expansão do Fatorial: 1 × 2 × 3 × 4 × 5 = 120

Melhorias-chave nesta versão:

  • Adicionada uma função detalhada printFactorialDetails()
  • Exibe a expansão completa do fatorial
  • Inclui um aviso para números grandes
  • Fornece uma saída clara e informativa

Resumo

Neste laboratório, você aprendeu a ler uma entrada de inteiro do usuário e calcular seu fatorial usando um loop iterativo e uma função recursiva. Explorou o processo de criar um programa em C que solicita um número ao usuário, lida com entradas negativas e exibe o resultado do fatorial. O laboratório cobriu os passos-chave de leitura de entrada do usuário, implementação de algoritmos de cálculo de fatorial e impressão do resultado final.