找回密码
 中文实名注册
搜索
查看: 519|回复: 0

【初中数学】海伦公式、勾股定理、一元二次方程求解、两点间距离

[复制链接]

731

主题

577

回帖

2万

积分

管理员

积分
24978
发表于 2025-8-20 15:16:45 | 显示全部楼层 |阅读模式
11.png (70.74 KB, 下载次数: 0)
[C++] 纯文本查看 复制代码
#include <iostream>
#include <cmath>    // 用于数学函数
#include <iomanip>  // 用于控制输出精度

using namespace std;

// 1. 海伦公式:已知三角形三边长,计算面积
// 参数:a, b, c为三角形三边
// 返回:三角形面积(若不能构成三角形,返回-1)
double heronFormula(double a, double b, double c) {
    // 先判断是否能构成三角形(两边之和大于第三边)
    if (a + b <= c || a + c <= b || b + c <= a) {
        return -1;  // 不能构成三角形
    }
    
    double s = (a + b + c) / 2.0;  // 半周长
    return sqrt(s * (s - a) * (s - b) * (s - c));  // 海伦公式
}

// 2. 勾股定理:已知直角三角形两边,求第三边
// 参数:a, b为直角边或斜边(若其中一个为0,则求该边)
// 返回:第三边长度(参数错误返回-1)
double pythagoreanTheorem(double a, double b) {
    // 情况1:已知两直角边,求斜边
    if (a > 0 && b > 0) {
        return sqrt(a*a + b*b);
    }
    // 情况2:已知斜边和一直角边,求另一直角边
    else if (a > 0 && b == 0) {
        return -1;  // 缺少斜边参数,无法计算
    }
    else if (b > 0 && a == 0) {
        return -1;  // 缺少斜边参数,无法计算
    }
    // 情况3:已知斜边c和直角边a,求直角边b(调用时用c和a传递)
    // 注意:需保证斜边大于直角边
    else if (a > b && b > 0) {
        if (a <= b) return -1;  // 斜边必须大于直角边
        return sqrt(a*a - b*b);
    }
    return -1;  // 参数错误
}

// 3. 一元二次方程求解:ax² + bx + c = 0
// 参数:a, b, c为系数,x1, x2用于存储根
// 返回:实根个数(0, 1, 2)
int quadraticEquation(double a, double b, double c, double& x1, double& x2) {
    if (a == 0) {
        return -1;  // 不是二次方程
    }
    
    double delta = b*b - 4*a*c;  // 判别式
    if (delta < 0) {
        return 0;   // 无实根
    }
    else if (delta == 0) {
        x1 = x2 = -b / (2*a);  // 两个相等实根
        return 1;
    }
    else {
        x1 = (-b + sqrt(delta)) / (2*a);  // 第一个根
        x2 = (-b - sqrt(delta)) / (2*a);  // 第二个根
        return 2;
    }
}

// 4. 两点间距离公式:计算平面上两点(x1,y1)和(x2,y2)的距离
double distanceBetweenPoints(double x1, double y1, double x2, double y2) {
    double dx = x2 - x1;
    double dy = y2 - y1;
    return sqrt(dx*dx + dy*dy);
}

int main() {
    // 设置输出精度为2位小数
    cout << fixed << setprecision(2);
    
    // 测试海伦公式
    double a = 3, b = 4, c = 5;
    double area = heronFormula(a, b, c);
    cout << "1. 海伦公式测试:" << endl;
    if (area >= 0) {
        cout << "三边长为" << a << ", " << b << ", " << c << "的三角形面积 = " << area << endl;
    } else {
        cout << "三边长为" << a << ", " << b << ", " << c << "不能构成三角形" << endl;
    }
    
    // 测试勾股定理
    cout << "\n2. 勾股定理测试:" << endl;
    double leg1 = 3, leg2 = 4;
    double hypotenuse = pythagoreanTheorem(leg1, leg2);
    cout << "直角边为" << leg1 << "和" << leg2 << "的直角三角形,斜边 = " << hypotenuse << endl;
    
    double hypo = 5, leg = 3;
    double otherLeg = pythagoreanTheorem(hypo, leg);
    cout << "斜边为" << hypo << ",直角边为" << leg << "的直角三角形,另一直角边 = " << otherLeg << endl;
    
    // 测试一元二次方程求解
    cout << "\n3. 一元二次方程测试:" << endl;
    double x1, x2;
    int rootCount = quadraticEquation(1, -5, 6, x1, x2);  // x²-5x+6=0
    if (rootCount == 2) {
        cout << "方程x²-5x+6=0的两个根:" << x1 << " 和 " << x2 << endl;
    } else if (rootCount == 1) {
        cout << "方程x²-5x+6=0的根:" << x1 << endl;
    } else {
        cout << "方程x²-5x+6=0无实根" << endl;
    }
    
    // 测试两点间距离公式
    cout << "\n4. 两点间距离测试:" << endl;
    double x1_p = 0, y1_p = 0, x2_p = 3, y2_p = 4;
    double dist = distanceBetweenPoints(x1_p, y1_p, x2_p, y2_p);
    cout << "点(" << x1_p << "," << y1_p << ")和点(" << x2_p << "," << y2_p << ")之间的距离 = " << dist << endl;
    
    return 0;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

快速回复 返回顶部 返回列表