首页 > 解决方案 > 在 C 中打印从 (0 到 n) 的阶乘列表

问题描述

所以我才刚刚开始学习编码,也许是因为我不完全理解循环的本质。

所以我想要的输出是:

例如,如果输入的值为 6,则程序应生成:

但相反,它正在打印:

显然没有要点。显然,第二个 for 循环没有正确打印出来。我不确定为什么。如果有人可以帮助我,将不胜感激!

编辑:我真的应该指定我在寻找什么。感谢您提供的所有有用的回复。我意识到您的所有解决方案可能都是有效的,但我正在寻找不涉及创建新过程和功能的解决方案。对于我使用除 main() 以外的其他函数/过程的分配无效。我的代码中的问题似乎是第二个 for 循环根本没有运行,我不知道为什么。程序通常应该采用输入值,但我将这些值硬编码到变量中,认为这会有所作为,但事实并非如此。如果有任何方法可以使用 if、for 或 while 循环来实现这一点,那么对我来说是最佳方式。

#include <stdio.h>

   int main( void )
{
    int number1 = 4;
    int number2;
    int factorial = 1;
    int factorialPrev = 1;

    printf("0! = 1\n");

    for (int i = 0; i < number1; i++)
    {
        factorial = factorial * (number1 - i);
    }

    for (int i = number1 - 1; i <= 0; i--)
    {
        number2 = number1 - i;
        factorialPrev = factorialPrev * number2;
        printf("%d! = %d\n", number2, factorialPrev);
    }

    return 0;
}

标签: cloopsfactorial

解决方案


您的代码有点......令人困惑,所以我将重写它。这是绝对最低限度的功能:

printf("0! = 1\n");

int factorial = 1;
for (int n = 1; n <= number; n++) {
    factorial *= n;
    printf("%d! = %d\n", n, factorial);
}

让我们将其包装在一个函数中:

void printFactorials(int number) {
    printf("0! = 1\n");

    int factorial = 1;
    for (int n = 1; n <= number; n++) {
        factorial *= n;
        printf("%d! = %d\n", n, factorial);
    }
}

现在让我们为无效输入添加一些保护:

void printFactorials(int number) {
    if (number < 0) {
        printf("Input cannot be less than 0");
        return;
    }

    if (number > 9) {
        printf("Input cannot be greater than 9");
        return;
    }

    printf("0! = 1\n");

    int factorial = 1;
    for (int n = 1; n <= number; n++) {
        factorial *= n;
        printf("%d! = %d\n", n, factorial);
    }
}

最后,让我们使用它:

#include <stdio.h>

int main(void) {
    printf("Enter a positive integer between 0 and 9: ");

    int number;
    if (scanf("%d", &number) == 1)
        printFactorials(number);

    return 0;
}

推荐阅读