/** * ============================================================================ * PHM Open Source — Curso de Lógica e Programação em C * Módulo 05: Funções, Parâmetros e Modularização * Autor: Prof. Paulo Henrique Maciel · PHM Tech * ============================================================================ * * OBJETIVO DIDÁTICO: * Compreender prototipagem de funções, assinatura, passagem de parâmetros por * valor, retorno de resultados, recursão didática e separação de responsabilidades. * * COMO COMPILAR E EXECUTAR: * gcc 05_funcoes_e_modularizacao.c -o modulo05 && ./modulo05 * ============================================================================ */ #include #include // 1. PROTÓTIPOS DE FUNÇÕES (Declarações antecipadas para o compilador) long long calcularFatorial(int n); bool verificarNumeroPrimo(int n); double calcularPotencia(double base, int expoente); void exibirCabecalho(const char *titulo); int main(void) { exibirCabecalho("PHM TECH — MODULO 05: MODULARIZACAO E FUNCOES"); // Teste 1: Fatorial (Recursivo e Iterativo) int numFatorial = 5; printf("[1] Calculo de Fatorial:\n"); printf(" -> %d! = %lld\n\n", numFatorial, calcularFatorial(numFatorial)); // Teste 2: Verificador de Número Primo int numerosParaTeste[] = {2, 7, 10, 13, 21, 29, 35}; int totalTestes = sizeof(numerosParaTeste) / sizeof(numerosParaTeste[0]); printf("[2] Verificacao de Numeros Primos:\n"); for (int i = 0; i < totalTestes; i++) { int n = numerosParaTeste[i]; printf(" -> O numero %2d %s\n", n, verificarNumeroPrimo(n) ? "E PRIMO" : "NAO e primo"); } // Teste 3: Potenciação double base = 2.0; int exp = 8; printf("\n[3] Potenciacao:\n"); printf(" -> %.1f elevado a %d = %.2f\n", base, exp, calcularPotencia(base, exp)); return 0; } // 2. IMPLEMENTAÇÃO DAS FUNÇÕES /** * Calcula o fatorial de um número natural utilizando recursão didática. * Definição: 0! = 1; n! = n * (n-1)! */ long long calcularFatorial(int n) { if (n < 0) return 0; // Fatorial não é definido para negativos if (n == 0 || n == 1) return 1; // Caso base return n * calcularFatorial(n - 1); // Chamada recursiva } /** * Verifica se um número inteiro n é primo (divisível apenas por 1 e por ele mesmo). */ bool verificarNumeroPrimo(int n) { if (n <= 1) return false; for (int divisor = 2; divisor * divisor <= n; divisor++) { if (n % divisor == 0) { return false; // Encontrou divisor exato, não é primo } } return true; // É primo } /** * Calcula base^expoente para expoentes inteiros não negativos. */ double calcularPotencia(double base, int expoente) { double resultado = 1.0; for (int i = 0; i < expoente; i++) { resultado *= base; } return resultado; } /** * Procedimento (função void) para formatação de títulos visuais. */ void exibirCabecalho(const char *titulo) { printf("====================================================\n"); printf(" %s\n", titulo); printf("====================================================\n\n"); }