用 C 语言检查一个数是否为完全数

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何编写一个C程序来检查一个给定的数是否为完全数。该程序将读取用户输入的一个整数,计算其真因子(即小于该数且能整除该数的所有正整数)之和,然后确定该数是否为完全数。这个实验涵盖了数论和离散数学中的基本概念,在C编程中提供了这些原理的实际应用。

该程序首先提示用户输入一个正整数,然后计算该数的真因子之和(即所有小于该数且能整除该数的正整数)。最后,程序将真因子之和与原始数进行比较,并打印结果,表明该数是否为完全数。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-435142{{"用 C 语言检查一个数是否为完全数"}} c/if_else -.-> lab-435142{{"用 C 语言检查一个数是否为完全数"}} c/for_loop -.-> lab-435142{{"用 C 语言检查一个数是否为完全数"}} c/math_functions -.-> lab-435142{{"用 C 语言检查一个数是否为完全数"}} c/user_input -.-> lab-435142{{"用 C 语言检查一个数是否为完全数"}} c/output -.-> lab-435142{{"用 C 语言检查一个数是否为完全数"}} end

读取一个整数

在这一步中,你将学习如何在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循环计算真因子之和,以及将该和与原始数进行比较以确定它是否为完全数。