CC++ & Algorithm

C++平方根函数 sqrt

中等24
语言版本:C++Python
概述:知道正方形的面积求边长,sqrt函数就能帮我们快速算出平方根。

C++平方根函数 sqrt:从正方形边长到生活中的各种计算

什么是平方根?为什么编程时要用到它?

平方根就是“谁的平方等于这个数?”的答案。比如,你知道一个正方形的面积是 25,求边长。因为边长 × 边长 = 面积,所以边长 = √25 = 5。在 C++ 里,计算平方根就靠 sqrt 函数。

生活中还有很多地方用到平方根:

  • 知道直角三角形的两条直角边,求斜边(勾股定理)
  • 计算物体下落的时间(物理公式 h = ½gt² 变形)
  • 游戏中人物到目标的距离(根据坐标计算)
  • 考试成绩标准化时计算标准差(需要先算平方根)

sqrt 是 "square root" 的缩写,它接受一个数字(通常是小数),返回它的平方根(也是小数)。任何非负数都可以求平方根,负数会出错。

使用 sqrt 前的准备

1. 必须包含头文件

sqrt 定义在 <cmath> 头文件里(C语言中是 <math.h>,但 C++ 推荐用 <cmath>)。就像用 cout#include <iostream>,用 sqrt 也要先告诉编译器去哪里找它。

#include <cmath>   // 有了它才能用 sqrt

2. 参数和返回值的类型

sqrt 的参数和返回值都是 double 类型(双精度浮点数)。double 可以表示很大或很小的数,精度比 float 更高。
如果你传入一个整数(比如 25),C++ 会自动把它转换成 double,结果依然是 double

double result = sqrt(25);     // 正确,result 得到 5.0
double result2 = sqrt(2.0);   // 正确,得到约 1.414213562

第一个例子:正方形面积求边长

这是最经典的入门用法。假设你有一个正方形花坛,面积是 25 平方米,想知道边长是多少。

#include <iostream>
#include <cmath>               // 引入 sqrt 函数
using namespace std;

int main() {
    double area = 25.0;         // 面积 25 平方米
    double side = sqrt(area);   // 边长 = 平方根
    cout << "面积: " << area << endl;
    cout << "边长: " << side << " 米" << endl;
    return 0;
}

运行结果:

面积: 25
边长: 5 米

你也可以把面积换成其他值来试试:sqrt(16) 返回 4.0sqrt(2) 返回约 1.414213562

更多生活中的例子(带完整代码)

例1:用勾股定理求斜边长度

小明每天从家到学校,先向东走 3 公里,再向北走 4 公里。他如果直接走直线,距离是多少?根据勾股定理:斜边 = √(3² + 4²) = √(9+16) = √25 = 5。

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a = 3.0;          // 第一条直角边(公里)
    double b = 4.0;          // 第二条直角边(公里)
    double c = sqrt(a*a + b*b);  // 斜边 = 平方根( a² + b² )
    cout << "直接距离: " << c << " 公里" << endl;
    return 0;
}

输出:直接距离: 5 公里

例2:已知圆的面积求半径

圆的面积公式是 S = πr²,所以半径 r = √(S / π)。假如一个圆形的草坪面积是 78.5 平方米,问半径。

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double pi = 3.1415926535;    // 圆周率
    double area = 78.5;           // 面积
    double radius = sqrt(area / pi);  // 半径 = 平方根(面积/π)
    cout << "半径 ≈ " << radius << " 米" << endl;
    return 0;
}

输出:半径 ≈ 5 米(因为 5²×3.14 ≈ 78.5)

新手容易犯的错误

❌ 错误1:忘记包含头文件

#include <iostream>
using namespace std;

int main() {
    double x = sqrt(16);   // ❌ 错误!没有 #include <cmath>
    return 0;
}

编译器会报错:"sqrt was not declared in this scope"。解决方法:在开头加上 #include <cmath>

❌ 错误2:对负数求平方根

double y = sqrt(-9);      // ❌ 错误!负数不能开平方

程序不会直接崩溃,但会得到一个特殊值 "NaN"(Not a Number)。后续计算可能全乱套。所以传给 sqrt 的参数一定要保证 ≥ 0。

❌ 错误3:把结果赋给 int 变量,丢失小数

int side = sqrt(10);      // sqrt(10) ≈ 3.162,赋给 int 变成 3

丢失的小数部分可能造成后续计算偏差。除非你确定只需要整数部分(比如求正方形的最大整数边长),否则建议用 double 类型变量保存结果。

❌ 错误4:忘记参数类型转换

sqrt 能直接接受 int,没问题。但如果你传入 float,返回值是 double,一般也没问题。但注意,如果传入 int 表达式时注意计算顺序:

double result = sqrt(1/4);   // ❌ 1/4 在整数除法中结果是 0,sqrt(0)=0
// 正确写法:sqrt(1.0/4) 或 sqrt(1/4.0)

❌ 错误5:误以为 sqrt 能计算任意次方根

sqrt 只算平方根。如果想算立方根(例如 8 的立方根是 2),应该用 pow 函数:pow(8, 1.0/3)

完整且规范的示例:计算考试分数的标准差

标准差能反映一组分数的离散程度,计算时需要先求方差,再开平方。假设三个同学的数学成绩:80, 90, 100。

#include <iostream>
#include <cmath>            // 用 sqrt
using namespace std;

int main() {
    double score1 = 80.0;   // 第1个分数
    double score2 = 90.0;   // 第2个分数
    double score3 = 100.0;  // 第3个分数
    double n = 3.0;         // 人数

    double mean = (score1 + score2 + score3) / n;   // 平均分

    // 方差 = ( (x1-平均数)² + (x2-平均数)² + (x3-平均数)² ) / n
    double variance = ( (score1-mean)*(score1-mean) + 
                        (score2-mean)*(score2-mean) + 
                        (score3-mean)*(score3-mean) ) / n;

    double stddev = sqrt(variance);  // 标准差 = 方差的平方根
    cout << "平均分: " << mean << endl;
    cout << "标准差: " << stddev << endl;
    return 0;
}

运行结果:

平均分: 90
标准差: 8.16497

相关知识点指引

学完 sqrt 后,可以继续探索 C++ 中的其他数学函数:

  • 幂函数 pow:计算任意次方,比如 pow(2, 3) 得 8。
  • 绝对值函数 fabs:对浮点数取绝对值,fabs(-3.5) 得 3.5。
  • 三角函数sin, cos, tan 等,需要弧度制。
  • 取整函数floor(向下取整)、ceil(向上取整)、round(四舍五入)。
  • 对数函数log(自然对数)、log10(以10为底)。

这些函数都声明在 <cmath> 中,用法都和 sqrt 类似——传入一个 double 参数,返回 double 结果。如果你对数学计算感兴趣,不妨把它们都试试!

小总结sqrt 是编程计算平方根的利器,记住三点——加头文件、参数非负、结果用 double 存。从正方形边长到物理公式,用好它能让你的程序解决更多实际问题。

例题精讲

1单选题

在C++中,要使用sqrt函数计算一个数的平方根,需要包含哪个头文件?

A<iostream>
B<cmath>
C<math.h>
D<cstdlib>
2判断题

在C++中,sqrt(-4)会返回一个负数。

3填空题
以下程序计算正方形的边长,已知面积area,请补充代码:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
    double area = 25.0;
    double side = ___(___)___;
    cout << "The side length is: " << side << endl;
    return 0;
}
4单选题

已知一个正方形的面积是49,使用sqrt函数计算其边长,下列输出结果正确的是?

A7.0
B7
C7.000000
D24.5
5填空题
请完善以下程序,计算一个数的平方根并输出:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
    double num = 16.0;
    double result = sqrt(num);
    cout << "The square root is: " << ___ << endl;
    return 0;
}