sqrt 是 c 语言标准库里面的平方根函数,全称 square root,作用就是接收一个非负的数值,计算并且返回这个数值的算术平方根,它定义在 math.h 头文件里面,返回值类型是 double 双精度浮点数,很多新手写代码的时候只写调用 sqrt,忘记引入 math.h 头文件,编译就会报错,还有一部分新手在 gcc 编译的时候,只写代码还不够,还需要加上 lm 链接数学库,否则会出现链接错误,这个函数只支持非负参数,如果传入负数,函数会返回域错误,也就是 NaN,不会自动做复数平方根运算,日常做数学计算,距离公式,开方运算,算法题里面大量场景都会用到 sqrt,它属于 c 语言数学库基础函数,不是关键字,是库函数,和 if for 这类 c 语言原生关键字不一样,必须依赖标准数学库才能运行。
核心参数与返回值表格
| 项目 | 详细说明 |
|---|---|
| 函数原型 | double sqrt double x |
| 头文件 | math.h |
| 参数 | x,双精度浮点数,要求大于等于 0 |
| 返回值 | x 的算术平方根,double 类型 |
| 异常情况 | 参数小于 0,触发域错误,返回 NaN |
使用操作步骤
第一步 代码开头引入头文件,写 include math.h,这是调用 sqrt 的前置条件。
第二步 定义变量,准备待开方的数值,可以是整型变量,调用的时候会自动隐式转换成 double 类型。
第三步 写调用语句,比如 double res = sqrt 16,就会得到结果 4.0。
第四步 编译程序,gcc 环境编译命令末尾追加 lm,也就是 gcc test.c o test lm,用来链接数学库。
第五步 增加参数判断,正式项目建议提前判断参数是否小于 0,避免传入负数产生异常结果。
第六步 输出结果,使用 printf 打印 sqrt 计算得到的平方根数值。
补充要点清单
1 如果想要单精度版本,可以使用 sqrtf,返回 float,长双精度版本是 sqrtl
2 sqrt 计算是浮点数运算,会存在精度误差,不要直接用等于号判断 sqrt 结果是否精确等于整数
3 整型开方如果想要得到整数结果,需要把 sqrt 返回值再强制转换成 int 类型,同时注意四舍五入或者截断问题
综合来看,sqrt 在 c 语言里面就是求算术平方根的数学库函数,必须引入 math.h,gcc 编译记得链接 lm 数学库,传入负数会产生异常,写代码的时候做好参数校验,掌握它之后可以快速完成各类开方计算需求。
【常见问题】
问题 1 sqrt 在 c 语言里面是关键字吗
回答 1 sqrt 在 c 语言里面不是关键字,它是 math.h 里面定义的标准库函数,必须引入头文件才可以调用 sqrt。
问题 2 为什么 c 语言调用 sqrt 编译提示链接错误
回答 1 c 语言调用 sqrt 出现链接错误,是因为 gcc 默认没有链接数学库,编译的时候需要增加 lm 参数,才能正常识别 sqrt 函数。
问题 3 c 语言 sqrt 可以传入负数吗
回答 1 c 语言 sqrt 函数不推荐传入负数,传入负数会触发域错误,返回 NaN,如果需要复数开方不能直接使用 sqrt。
【免责申明】
本内容基于 c 语言标准库公开文档整理,不同编译器对 sqrt 的异常处理细节略有差异,内容仅供学习参考,正式项目开发请结合编译器文档测试验证。


