Онлайн компилятор C

#include <stdio.h> int main() { double base; // 底数(支持小数,如1.5、-2.0等) int exponent; // 指数(整数,支持正整数/负整数/0) double result = 1.0; // 初始值设为1.0(关键:乘法单位元,满足0次方结果为1) int i; int is_negative_exp = 0; // 标记是否为负指数,0=非负,1=负指数 // 提示用户输入底数和指数 printf("请输入底数:"); scanf("%lf", &base); printf("请输入整数指数(支持正数/负数/0):"); scanf("%d", &exponent); // 步骤1:处理负指数——先标记,再取绝对值用于循环计算 if (exponent < 0) { is_negative_exp = 1; // 标记为负指数 exponent = -exponent; // 取指数绝对值,转为正整数进行累乘 } // 步骤2:循环累乘——计算底数的|指数|次方 for (i = 0; i < exponent; i++) { result *= base; // 累乘运算,初始值1.0不影响首次计算结果 } // 步骤3:负指数兜底——对正指数计算结果取倒数 if (is_negative_exp == 1) { // 合法性校验:避免0的负指数(数学上无意义,会导致除以0错误) if (result == 0.0) { printf("错误:0的负指数无数学意义!\n"); return 1; // 异常退出程序 } result = 1.0 / result; // 负指数等价于正指数结果的倒数 return 0; }
1) 这段代码实现了计算任意底数(支持小数)的整数次幂的功能,包括处理正指数、负指数和零指数的情况。

2) 提示:
- 注意代码的缩进和括号匹配,特别是 `if (is_negative_exp == 1)` 语句块缺少一个闭合花括号 `}`。
- 当指数为0时,循环不会执行,`result` 保持初始值1.0,这是正确的。但可以思考一下,如果底数也是0,0的0次方在数学上未定义,代码目前没有处理这种情况。