简介
在这个实验中,你将学习如何编写一个C程序来检查一个给定的数是否为完全数。该程序将读取用户输入的一个整数,计算其真因子(即小于该数且能整除该数的所有正整数)之和,然后确定该数是否为完全数。这个实验涵盖了数论和离散数学中的基本概念,在C编程中提供了这些原理的实际应用。
该程序首先提示用户输入一个正整数,然后计算该数的真因子之和(即所有小于该数且能整除该数的正整数)。最后,程序将真因子之和与原始数进行比较,并打印结果,表明该数是否为完全数。
在这个实验中,你将学习如何编写一个C程序来检查一个给定的数是否为完全数。该程序将读取用户输入的一个整数,计算其真因子(即小于该数且能整除该数的所有正整数)之和,然后确定该数是否为完全数。这个实验涵盖了数论和离散数学中的基本概念,在C编程中提供了这些原理的实际应用。
该程序首先提示用户输入一个正整数,然后计算该数的真因子之和(即所有小于该数且能整除该数的正整数)。最后,程序将真因子之和与原始数进行比较,并打印结果,表明该数是否为完全数。
在这一步中,你将学习如何在C语言中读取整数输入以检查完全数。我们将创建一个C程序,允许用户输入一个要分析的数字。
首先,让我们在项目目录中创建一个新的C文件:
cd ~/project
nano perfect_number.c
现在,将以下代码添加到文件中:
#include <stdio.h>
int main() {
int number;
// 提示用户输入
printf("Enter a positive integer to check if it's a perfect number: ");
scanf("%d", &number);
// 打印输入的数字以验证输入
printf("You entered: %d\n", number);
return 0;
}
示例输出:
Enter a positive integer to check if it's a perfect number: 28
You entered: 28
让我们来分析一下这段代码:
#include <stdio.h>
包含标准输入/输出库scanf("%d", &number)
从用户读取一个整数输入printf()
用于提示输入并显示输入的数字编译并运行该程序:
gcc perfect_number.c -o perfect_number
./perfect_number
在这一步中,你将修改之前的C程序,以计算真因子之和并确定该数是否为完全数。
打开现有文件并更新代码:
nano ~/project/perfect_number.c
将之前的代码替换为:
#include <stdio.h>
int main() {
int number, sum = 0;
// 提示用户输入
printf("Enter a positive integer to check if it's a perfect number: ");
scanf("%d", &number);
// 计算真因子之和
for (int i = 1; i < number; i++) {
if (number % i == 0) {
sum += i;
}
}
// 检查该数是否为完全数
if (sum == number) {
printf("%d is a perfect number!\n", number);
} else {
printf("%d is not a perfect number.\n", number);
}
return 0;
}
编译并运行该程序:
gcc perfect_number.c -o perfect_number
./perfect_number
完全数的示例输出:
Enter a positive integer to check if it's a perfect number: 28
28 is a perfect number!
非完全数的示例输出:
Enter a positive integer to check if it's a perfect number: 12
12 is not a perfect number.
关键概念解释:
for
循环遍历从1到number - 1
的数字number % i == 0
检查i
是否为该数的因子sum += i
累加所有真因子在这最后一步中,你将改进程序,以提供有关完全数的更详细输出,包括其因子和总和。
打开文件并更新代码:
nano ~/project/perfect_number.c
将之前的代码替换为:
#include <stdio.h>
int main() {
int number, sum = 0;
// 提示用户输入
printf("Enter a positive integer to check if it's a perfect number: ");
scanf("%d", &number);
// 打印因子的标题
printf("Proper divisors of %d: ", number);
// 计算真因子之和并打印它们
for (int i = 1; i < number; i++) {
if (number % i == 0) {
printf("%d ", i);
sum += i;
}
}
// 打印详细结果
printf("\n\nSum of proper divisors: %d", sum);
// 检查并打印完全数状态
if (sum == number) {
printf("\n%d is a PERFECT NUMBER!\n", number);
} else {
printf("\n%d is NOT a perfect number.\n", number);
}
return 0;
}
编译并运行程序:
gcc perfect_number.c -o perfect_number
./perfect_number
完全数(28)的示例输出:
Enter a positive integer to check if it's a perfect number: 28
Proper divisors of 28: 1 2 4 7 14
Sum of proper divisors: 28
28 is a PERFECT NUMBER!
非完全数(12)的示例输出:
Enter a positive integer to check if it's a perfect number: 12
Proper divisors of 12: 1 2 3 4 6
Sum of proper divisors: 16
12 is NOT a perfect number.
主要改进:
在这个实验中,你将学习如何在C语言中读取整数输入,并确定一个数是否为完全数。首先,你将创建一个C程序,提示用户输入一个正整数。然后,你将计算该数的真因子之和,并将其与原始数进行比较,以检查它是否为完全数。最后,你将把结果打印到控制台。
这个实验的关键学习点包括:使用scanf()
读取整数输入,使用for
循环计算真因子之和,以及将该和与原始数进行比较以确定它是否为完全数。