c 中的阶乘程序

问题描述 投票:0回答:3

尝试编写一个代码来获取输入数字的阶乘。

int factorial(int number, int i)
{
    int endval;
    for(i = number - 1; i>0; i--){
        endval = number * i;
    }
    if (endval == 0){
        printf("1");
    }
    return endval;
}

int main()
{
    int endvalue, numA, numB;
    char userchoice[1];
    printf("Enter a choice to make (f for factorial): \n");
    scanf("%s", userchoice);
    if(strcmp(userchoice, "f")== 0){
        printf("Enter a value to get it's factorial: ");
        scanf("%d", &numA);
        endvalue = factorial(numA, numB);
        printf("%d", endvalue);
        return 0;}


    getch();
    return 0;
}

出于某种原因,当我设置答案时,整个 for 循环在函数中没有执行任何操作

(number*i)= endval
。它只是打印出我输入的相同数字,并给出了一个荒谬的答案
0!

int factorial(int number, int i)
{
    int endval;
    for(i = number - 1; i>0; i--){
            endval = number * i;
    }
    if (endval == 0){
        printf("1");
    }
    return endval;
}

但是,当我完全删除

endval
变量时,代码工作得非常好(除了它得到 0!= 10)

int factorial(int number, int i)
{
    for(i = number - 1; i>0; i--){
        number = number * i;
    }
    if (number == 0) {printf("1");}
    return number;
}

代码中是否有我遗漏的内容导致了这些错误?

c loops factorial
3个回答
1
投票

阶乘的定义是:
阶乘(0) = 1
阶乘(n) = n * 阶乘(n-1)
注意:阶乘仅对于 >= 0 的数字才合法

在C中,这个定义是:

 int factorial(int number)
    {
         if (number < 0)
             return -1;

         if (number == 0)
              return (1);
    
         /*else*/
         return (number * factorial(number-1));
    }

0
投票
#include <stdio.h>
#include <string.h>

int factorial(int number)
{
    int endval=1;
    for(int i = number ; i>0; i--){
        endval *= i;
    }
    return endval;
}

int main()
{

    int endvalue=0;
    int numA=0;

    char userchoice[1];
    printf("Enter a choice to make (f for factorial): ");
    int ret=scanf("%s", userchoice);
    if (!ret){
        printf("Error in scanf: %d", ret);
    }
    if(strcmp(userchoice, "f")== 0){
        printf("Enter a value to get it's factorial: ");
        scanf("%d", &numA);
        endvalue = factorial(numA);
        printf("%d", endvalue);
        return 0;
    }

    getchar();
    return 0;
}

代码进行一些更改即可工作

  • factorial()
    函数只能获取一个参数。
  • 作为一个好习惯,所有变量都必须初始化。
  • 在源代码中添加 include 语句,并且明确不依赖编译器。 当我们使用
    strcmp()
    时,我们必须包括
    string.h
  • 使用标准
    getchar()
    而不是
    getch()
  • 还可以检查库函数的返回值
    scanf()
    以确保读取正确与否。
  • 您可以使用编译器的警告来获取上述大部分注释。在海湾合作委员会中:
    gcc -Wall code.c
  • 使用调试器逐行运行程序并监视每个步骤中的变量值,或使用尽可能多的
    printf()
    来查看函数调用中发生了什么。

0
投票

可能有一些事情需要纠正。请参阅随附的代码。

int factorial(int number)
{

    if (number == 0){ return 1; }

    int endval=1, i;

    for(i = 1; i&lt;=number; i++) { endval *= i; }

    return endval;

}

int main() {

    int endvalue, numA;
    char userchoice[1];
    printf("Enter a choice to make (f for factorial): \n");
    scanf("%s", userchoice);

    if(strcmp(userchoice, "f")== 0) {

        printf("Enter a value to get it's factorial: ");
        scanf("%d", &numA);
        endvalue = factorial(numA);
        printf("%d", endvalue);
        return 0;

    }

getch();
return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.