Este programa C calcula o fatorial de um número inserido pelo usuário e lida com possíveis erros como entrada negativa e transbordamento. Ele foi projetado para compilar e executar um ambiente semelhante ao Unix (Linux, MacOS).
`` `c
#include
#include
#include // para llong_max
longa longa fatorial (int n) {
if (n <0) {
fprintf (stderr, "Erro:o fatorial não é definido para números negativos. \ n");
saída (1); // Sair com um código de erro
}
if (n ==0) {
retornar 1;
}
Longo resultado longo =1;
for (int i =1; i <=n; i ++) {
if (llong_max /resultado fprintf (stderr, "Erro:o fatorial excede o máximo valor longo longo. \ n");
saída (1);
}
resultado *=i;
}
resultado de retorno;
}
int main () {
int num;
printf ("Digite um número inteiro não negativo:");
if (scanf ("%d", &num)! =1) {
fprintf (stderr, "erro:entrada inválida. \ n");
retornar 1; // Sair com um código de erro
}
longo fato longo =fatorial (num);
printf ("Fatorial de %d =%lld \ n", num, fato);
retornar 0;
}
`` `
Para compilar e executar este código:
1. Salvar: Salve o código como um arquivo `.c` (por exemplo,` fatorial.c`).
2. compilar: Abra um terminal e use um compilador C (como o GCC) para compilar o código:
`` `BASH
gcc fatorial.c -o fatorial
`` `
3. Run: Execute o programa compilado:
`` `BASH
./fatorial
`` `
O programa solicitará que você insira um número.
Melhorias e explicações:
* Manuseio de erro: O código inclui verificações para:
* Entrada negativa: Ele lida explicitamente à entrada negativa, que não é definida para fatoriais.
* Overflow: Ele evita o transbordamento potencial, verificando se a próxima multiplicação exceder o valor máximo que um número inteiro 'longo' pode manter (`llong_max`). O uso de `Long 'fornece um intervalo maior que` int` ou `long'.
* entrada inválida: Ele verifica se o `scanf` leu com sucesso um número inteiro.
* `Long Long` Tipo de dados: O uso de `Long Long` fornece um intervalo maior para o cálculo fatorial, permitindo calcular fatoriais de números maiores antes de encontrar o transbordamento. No entanto, mesmo "longos" tem limites. Os fatoriais crescem extremamente rapidamente.
* Mensagens de erro claro: As mensagens de erro informam o usuário sobre o problema específico encontrado.
* Códigos de saída: O programa usa códigos de saída apropriados (0 para sucesso, 1 para erros), que é uma boa prática para programas que podem ser chamados de outros scripts ou programas.
Lembre -se de que as fatoriais crescem incrivelmente rápidas. Até o `longo de longa duração 'transborda para entradas relativamente pequenas (por exemplo, 21!). Para fatoriais arbitrariamente grandes, você precisaria usar uma biblioteca aritmética de precisão arbitrária especializada.