简介
在本实验中,你将学习如何用 C 语言编程计算阶乘。本实验涵盖了两种计算数字阶乘的方法:使用迭代循环和递归函数。你将首先从用户那里读取一个整数输入,然后实现基于循环和递归的方法来计算阶乘,最后打印结果。
本实验提供了逐步的指导和代码示例,以引导你完成整个过程,确保你全面理解 C 语言中的阶乘计算。
读取整数 n
在这一步中,你将学习如何在 C 程序中读取一个整数输入,以便计算其阶乘。我们将专注于创建一个简单的程序,提示用户输入一个数字并存储它以供进一步计算。
首先,让我们在项目目录中创建一个新的 C 文件:
cd ~/project
nano factorial.c
现在,添加以下代码来读取整数输入:
#include <stdio.h>
int main() {
int n;
printf("Enter a number to calculate its factorial: ");
scanf("%d", &n);
printf("You entered: %d\n", n);
return 0;
}
让我们编译并运行该程序:
gcc factorial.c -o factorial
./factorial
示例输出:
Enter a number to calculate its factorial: 5
You entered: 5
在这段代码中:
printf()用于向用户显示提示信息scanf()从用户读取整数输入%d是整数的格式说明符&n将n变量的内存地址传递过去以存储输入
使用循环或递归计算 n!
在这一步中,你将学习两种计算数字阶乘的方法:使用迭代循环和递归函数。我们将修改之前的 factorial.c 文件来实现这两种方法。
让我们更新 factorial.c 文件:
cd ~/project
nano factorial.c
添加以下代码以使用循环和递归实现阶乘计算:
#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;
}
// 使用递归计算阶乘
unsigned long long factorialRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
int main() {
int n;
printf("Enter a number to calculate its factorial: ");
scanf("%d", &n);
if (n < 0) {
printf("Factorial is not defined for negative numbers.\n");
return 1;
}
printf("Factorial using loop: %llu\n", factorialLoop(n));
printf("Factorial using recursion: %llu\n", factorialRecursive(n));
return 0;
}
编译并运行程序:
gcc factorial.c -o factorial
./factorial
示例输出:
Enter a number to calculate its factorial: 5
Factorial using loop: 120
Factorial using recursion: 120
此实现中的关键点:
unsigned long long用于处理较大的阶乘值- 循环方法使用
for循环来相乘数字 - 递归方法使用
n - 1调用自身,直到达到基例 - 添加了对负数的错误处理
- 两种方法产生相同的结果
打印阶乘
在这一步中,你将改进阶乘计算程序,以提供更详细的输出并处理不同的输入场景。我们将修改 factorial.c 文件,以改进阶乘结果的展示。
更新 factorial.c 文件:
cd ~/project
nano factorial.c
用以下改进后的实现替换之前的内容:
#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("阶乘计算详情:\n");
printf("数字 (n):%d\n", n);
printf("阶乘 (n!):%llu\n", factorial);
printf("阶乘展开式:");
for (int i = 1; i <= n; i++) {
printf("%d%s", i, (i < n)? " × " : " = ");
}
printf("%llu\n", factorial);
}
int main() {
int n;
printf("请输入一个非负整数以计算其阶乘:");
scanf("%d", &n);
if (n < 0) {
printf("错误:负数没有阶乘定义。\n");
return 1;
}
if (n > 20) {
printf("警告:大数的阶乘可能会导致整数溢出。\n");
}
unsigned long long result = factorialLoop(n);
printFactorialDetails(n, result);
return 0;
}
编译并运行程序:
gcc factorial.c -o factorial
./factorial
示例输出:
请输入一个非负整数以计算其阶乘:5
阶乘计算详情:
数字 (n):5
阶乘 (n!):120
阶乘展开式:1 × 2 × 3 × 4 × 5 = 120
此版本的主要改进:
- 添加了详细的
printFactorialDetails()函数 - 显示完整的阶乘展开式
- 包含对大数的警告
- 提供清晰、信息丰富的输出
总结
在本实验中,你学习了如何从用户那里读取整数输入,并使用迭代循环和递归函数来计算其阶乘。你探索了创建一个 C 程序的过程,该程序提示用户输入一个数字,处理负输入,并输出阶乘结果。本实验涵盖了读取用户输入、实现阶乘计算算法以及打印最终结果的关键步骤。



