使用递归判断质数或合数

CCBeginner
立即练习

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

介绍

在本实验中,我们将学习如何编写一个 C 程序,使用递归来检查一个数是质数还是合数。质数是指只能被 1 和它本身整除的数,而合数则是指非质数的数。我们将使用递归来编写这个程序,递归是一种通过将问题分解为更小、更简单的问题来解决问题的技术。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/BasicsGroup(["`Basics`"]) c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/FunctionsGroup(["`Functions`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/BasicsGroup -.-> c/variables("`Variables`") c/ControlFlowGroup -.-> c/if_else("`If...Else`") c/FunctionsGroup -.-> c/function_declaration("`Function Declaration`") c/FunctionsGroup -.-> c/function_parameters("`Function Parameters`") c/FunctionsGroup -.-> c/recursion("`Recursion`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/variables -.-> lab-123309{{"`使用递归判断质数或合数`"}} c/if_else -.-> lab-123309{{"`使用递归判断质数或合数`"}} c/function_declaration -.-> lab-123309{{"`使用递归判断质数或合数`"}} c/function_parameters -.-> lab-123309{{"`使用递归判断质数或合数`"}} c/recursion -.-> lab-123309{{"`使用递归判断质数或合数`"}} c/user_input -.-> lab-123309{{"`使用递归判断质数或合数`"}} c/output -.-> lab-123309{{"`使用递归判断质数或合数`"}} end

获取用户输入

我们将从要求用户输入一个正整数开始,使用 scanf 函数来检查该数是质数还是合数。在 main.c 文件的 int main() 函数中添加以下代码:

#include <stdio.h>

int main()
{
    int num;
    printf("请输入一个正整数: ");
    scanf("%d", &num);
    return 0;
}

编写检查数字的递归函数

在这一步中,我们将编写递归函数来检查数字是质数还是合数。该函数接受两个参数——要检查的数字和一个从数字除以 2 开始的计数器变量。如果计数器达到 1,函数返回 1,表示该数字是质数;否则,函数会递归调用自身,并将计数器变量减 1。如果在任何时候,数字可以被计数器变量整除且没有余数,函数返回 0,表示该数字是合数。在 main.c 文件的末尾添加以下代码:

int isPrime(int n, int c)
{
    if (c == 1) {
        return 1;
    } else {
        if (n % c == 0) {
            return 0;
        } else {
            return isPrime(n, c - 1);
        }
    }
}

检查并输出结果

在这一步中,我们将调用 isPrime 函数来检查数字是质数还是合数。根据函数的返回结果,我们将向用户输出相应的信息。在 main.c 文件的末尾添加以下代码以完成程序:

int main()
{
    int num, prime;
    printf("请输入一个正整数: ");
    scanf("%d", &num);
    prime = isPrime(num, num/2);
    if (prime == 1) {
        printf("%d 是一个质数。\n", num);
    } else {
        printf("%d 是一个合数。\n", num);
    }
    return 0;
}

编译并运行程序

在这一步中,我们将编译并运行程序。打开终端并导航到 main.c 文件所在的目录。在终端中输入以下命令以编译程序:

gcc main.c -o main

输入以下命令以运行程序:

./main

当提示时,输入一个正整数并按 Enter 键。程序将输出该数字是质数还是合数。

总结

在本实验中,我们学习了如何编写一个 C 程序,使用递归来检查一个数是质数还是合数。我们还学习了如何使用 scanf 函数获取用户输入,编写递归函数来检查数字是质数还是合数,并将结果输出给用户。递归是一种有用的技术,适用于将问题分解为更小、更简单的问题来解决的场景。

您可能感兴趣的其他 C 教程