You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:11:06