#include<stdio.h> float my_power(float,int); int main(void) { float a; int b; printf("请输入a和b:"); scanf("%f%d",&a,&b); printf("%f的%d次方等于:%.6lf\n",a,b,my_power(a,b)); return 0; } float my_power(float a,int b) { if (b>0) return a*my_power(a,b-1); else if (b=0) return 1; if(b<0) return (1.0/a)*my_power(a,b+1); else return 1; }为什么b为负数的时候无法输出正确的答案
时间: 2024-01-15 17:03:40 浏览: 51
字符串函数string.h应用举例.-综合文档
在该程序中,当 b<0 时,会执行 `(1.0/a)*my_power(a,b+1)`,即先对指数 b+1 次幂,然后再除以底数 a。
然而,由于整数除法的特性,当 b+1 不是 a 的倍数时,结果会被截断为整数,导致最终结果不正确。
解决这个问题的方法是,在 `(1.0/a)*my_power(a,b+1)` 中,将 1.0 改为 1.0f,即使用浮点数除法,确保结果为浮点数。修改后的代码如下:
```
float my_power(float a, int b) {
if (b > 0)
return a * my_power(a, b - 1);
else if (b == 0)
return 1;
else
return 1.0f / (a * my_power(a, -b - 1));
}
```
这样就可以正确处理负指数的情况了。
阅读全文