因子在C程序中使用指针

时间:2017-09-27 07:46:29

标签: c

我想创建一个程序来查找数字的阶乘,我也希望使用指针来实现它。

我试图制作一个程序,但它没有提供数字的阶乘。谁能解释我为什么?

#include<stdio.h>
#include<stdlib.h>

int fact(int* num, int* n)
{
    for ((*n) = 1; (*n) <= (*num); (*n)++)
    {
        *n = (*n)*(*num);
    }
}

int main()
{
    int num, n;
    printf("Write the number to take factorial \n");
    scanf("%d", &num);
    fact(&num, &n);
    printf("Factorial = %d", n);

    return 0;
}

4 个答案:

答案 0 :(得分:2)

当您使用int函数时,它必须包含一些返回值。如果您进行以下更改,它将完美运行。

{
  id: 123,
  A: [“value A1”,“value A2”]
  B: “value b”
},
{
  id: 456,
  A: ["a2 value"],
  B: "b2 value"
}

答案 1 :(得分:1)

*n=(*n)*(*num);正在更改for循环中使用的计数变量的值!

虽然这在C语言中是完全合法的,但它会导致错误的答案。

尽管它具有非fact返回类型,但您也不会从void显式返回值。这是未定义的行为

另请注意,int的范围可以小到-32767到+32767,只允许7!或更低。请考虑使用long long类型。

答案 2 :(得分:1)

如果我错了,请纠正我,但我认为你的尝试逻辑本身是不正确的:

for ((*n) = 1; (*n) <= (*num); (*n)++)
    {
        *n = (*n)*(*num);
    }

您正在使用计数变量(在这种情况下为'* n')以存储结果。如果检查流程,循环将在第一次迭代后结束,然后递增它,给出值(* num + 1)。

对您的事实功能的一个很好的修改可能是:

void fact(int* num, int* n)
{
    int counter;
    *n=1;
    for (counter = 2 ; counter <= (*num) ; counter++)
    {
        *n = (*n)*(counter);
    }
}

如果您对结果使用引用调用,则无法看到将函数的返回类型保留为int的原因。

在回答'@nikhil biijjala'给出的答案时,我无法理解你在第一个位置传递指针(* n)的原因。所有指针都用作循环的本地计数器。

在大整数的情况下,您可以添加输入限制或使用long long。

答案 3 :(得分:0)

NotImplementedException()