gpt4 book ai didi

c - 为什么我的阶乘程序可以运行,但我几乎相同的 pow 程序却无法运行?

转载 作者:行者123 更新时间:2023-12-04 11:25:20 25 4
gpt4 key购买 nike

这是我的阶乘程序——它正在执行并给出正确的结果:

#include <stdio.h>

int main()
{
int n;

printf("enter the no=");
scanf("%d", &n);
fun(n);
printf("%d\n", fun(n));

return 0;
}

int fun(int n)
{
if(n == 0)
return 1;
else
return fun(n - 1) * n;
}

这是我计算数字幂的程序——给出的是 0 而不是正确的结果,但几乎是相同的:
#include <stdio.h>

int main()
{
int m, n;

printf("enter the no=");
scanf("%d%d", &m, &n);
pow(m, n);
printf("%d\n", pow(m, n));

return 0;
}
int pow(int m, int n)
{
if(n == 0)
return 1;
else
return pow(m, n - 1) * m;
}

两者都在同一个编译器上运行。

为什么我的阶乘程序可以运行,但我几乎相同的功率程序却无法运行?

最佳答案

这里存在一些问题。首先,在第一次调用函数之前,您没有为函数声明原型(prototype)。为此,您需要放置 int pow(int, int);以上main .这让编译器准确地知道你的函数期望什么以及它返回什么。

通常,这不会导致您看到的行为(尽管这是不好的做法),但也已经有一个名为 pow 的函数在 C 库中。由于您从未给它自己的定义,因此它已隐式包含在您的代码中。现在,它期待你投入两个 double 并得到一个 double 。

在顶部添加原型(prototype)并重命名您的函数,您将同时解决这两个问题。

Demo

(另外,为了它的值(value),你有一个不必要的电话。)

#include <stdio.h>

int powr(int, int); // helps avoid compiler warnings

int main()
{
int m, n;

printf("enter the no=");
scanf("%d%d", &m, &n);
powr(m, n); // unnecessary
printf("%d\n", powr(m, n));

return 0;
}

int powr(int m, int n)
{
if(n == 0)
return 1;
else
return powr(m, n - 1) * m;
}

关于c - 为什么我的阶乘程序可以运行,但我几乎相同的 pow 程序却无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59547742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com