[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;
}