求助:用C语言嵌套区间法+传引用实现平方根计算(禁struct与math.h)
嵌套区间法实现正数平方根(传引用版)
核心思路
嵌套区间法本质是二分查找:在一个包含目标平方根的区间内,不断取中点比较平方值与目标数的大小,逐步缩小区间范围,直到区间长度小于设定的精度,此时区间内的任意值都可作为平方根的近似值。
实现代码
#include <stdio.h> // 传引用实现:结果通过result_ptr指针返回 void square_root(double x, double *result_ptr) { if (x <= 0) { printf("错误:仅支持正数的平方根计算\n"); *result_ptr = -1.0; // 用-1标记错误 return; } double low, high; // 根据x的大小确定初始区间 if (x < 1.0) { low = x; high = 1.0; } else { low = 1.0; high = x; } const double epsilon = 1e-6; // 精度控制,可调整 // 循环缩小区间 while (high - low > epsilon) { double mid = (low + high) / 2.0; double mid_sq = mid * mid; if (mid_sq < x) { // 平方根在[mid, high],更新左边界 low = mid; } else { // 平方根在[low, mid],更新右边界 high = mid; } } // 取区间中点作为结果 *result_ptr = (low + high) / 2.0; } int main() { double num, root; printf("请输入一个正数:"); scanf("%lf", &num); square_root(num, &root); if (root != -1.0) { printf("%.6lf的平方根近似值为%.6lf\n", num, root); } return 0; }
关键点说明
- 传引用实现:通过
double *result_ptr指针参数,直接修改调用方变量的值,符合传引用要求。 - 无math.h依赖:全程只用基本的加减乘除运算,没有调用数学库函数。
- 无结构体:仅用普通变量存储区间边界、中点等数据。
- 区间初始化逻辑:当x小于1时,平方根大于x且小于1;当x大于等于1时,平方根小于等于x且大于等于1,这样能保证初始区间必然包含正确的平方根。
- 精度控制:
epsilon设为1e-6,可根据需求调整精度(比如改成1e-8获得更精确的结果)。
内容的提问来源于stack exchange,提问作者erwgrtr
相关产品推荐
相关产品推荐

