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

#include <stdio.h> int main() { double base; // 底数(支持小数、正数、负数) int exponent; // 指数(整数,支持正/负/0) double result = 1.0; // 初始值1.0:乘法单位元,天然支持非零数的0次方 int i; int is_negative_exp = 0; // 标记是否为负指数 // 提示输入底数和指数 printf("请输入底数:"); scanf("%lf", &base); printf("请输入整数指数(支持正数/负数/0):"); scanf("%d", &exponent); // 新增:处理0的0次方(数学上未定义,优先拦截) if (base == 0.0 && exponent == 0) { printf("错误:0的0次方在数学上未定义,无意义!\n"); return 1; // 异常退出,避免后续无效计算 } // 步骤1:处理负指数——标记后取绝对值,统一转为正指数计算 if (exponent < 0) { is_negative_exp = 1; exponent = -exponent; // 取指数绝对值 } // 步骤2:循环累乘——计算base的|exponent|次方 for (i = 0; i < exponent; i++) { result *= base; } // 步骤3:负指数兜底——对正指数结果取倒数(已补全缺失的闭合花括号) if (is_negative_exp == 1) { // 校验:避免0的负指数(数学无意义,除以0错误) if (result == 0.0) { printf("错误:0的负指数无数学意义!\n"); return 1; } result = 1.0 / result; // 负指数等价于正指数结果的倒数 } // 补全此处缺失的闭合花括号,修复语法错误 // 还原原始指数,格式化输出结果 int original_exponent = is_negative_exp ? -exponent : exponent; printf("%.2lf 的 %d 次方 = %.4lf\n", base, original_exponent, result); return 0; }
1) 这段代码实现了一个计算器,可以计算任意实数(正数、负数、小数)的整数次幂(支持正指数、负指数和零次方)。它通过循环累乘计算正指数幂,然后处理负指数的情况(取倒数),并包含了错误处理(如0的0次方和0的负指数)。

2) 提示:
- 注意代码中处理负指数时,先将指数取绝对值进行循环计算,最后再对结果取倒数。思考一下:为什么不在循环中直接处理负指数?
- 代码在计算前先判断了“0的0次方”和“0的负指数”这两种特殊情况。请思考:为什么这两种情况需要单独处理?如果不处理会有什么后果?