#include <stdio.h> int main( ) { long int fact(long x,long n) ; //声明fact函数 long int x ; long int n; printf("please enter X and N(>=0): "); scanf("%ld,%ld", &x, &n ); printf("%ld,%ld=%ld",x,n,fact( x, n)); //调用fact函数 } long int fact(long int x, long int n) //定义fact函数求xn { long int i,s; //求累积变量的初始化 if (n=0) return 0; for(i=1; i<=n; i++) //用循环实现xn s=s*x; return s; //返回结果xn }
时间: 2024-03-23 17:40:27 浏览: 17
这段代码有一些问题,我来帮你指出来:
```
#include <stdio.h>
int main() {
long int fact(long x, long n); // 声明fact函数
long int x;
long int n;
printf("please enter X and N(>=0): ");
scanf("%ld,%ld", &x, &n);
printf("%ld,%ld=%ld", x, n, fact(x, n)); // 调用fact函数
}
long int fact(long int x, long int n) // 定义fact函数求xn
{
long int i, s; // 求累积变量的初始化
if (n = 0) // 问题1:应该是判断 n == 0,而不是赋值 n = 0
return 0;
for (i = 1; i <= n; i++) // 用循环实现xn
s = s * x; // 问题2:变量s没有初始化,应该先将其赋值为1
return s; // 返回结果xn
}
```
根据上述指出的问题,我们可以将代码修改为:
```
#include <stdio.h>
long int fact(long x, long n); // 声明fact函数
int main() {
long int x;
long int n;
printf("please enter X and N(>=0): ");
scanf("%ld,%ld", &x, &n);
printf("%ld,%ld=%ld", x, n, fact(x, n)); // 调用fact函数
return 0;
}
long int fact(long int x, long int n) // 定义fact函数求xn
{
long int i, s = 1; // 求累积变量的初始化
if (n == 0)
return 1; // 0的0次方是1,应该返回1
for (i = 1; i <= n; i++) // 用循环实现xn
s *= x;
return s; // 返回结果xn
}
```
现在,代码就没有问题了。注意,0的0次方是1,因此当n为0时,应该返回1而不是0。