#include<iostream>> #include<stdexcept> #include<cmath> using namespace std; double area(double a, double b, double c) throw(invalid_argument) { if (a <= 0 || b <= 0 || c <= 0) throw invalid_argument("不合法:a<=0 || b<=0 || c<=0"); if (a + b <= c || a + c <= b || b + c <= a) throw invalid_argument("不合法:a+b<=c || a+c<=b || b+c<=a"); double s = (a + b + c) / 2; return sqrt(s*(s - a)*(s - b)*(s - c)); } int main() { double a, b, c; while (1) { cout << "输入三条边长a, b, c= "; cin >> a >> b >> c; try { cout<<"s = " << area(a, b, c)<< endl; } catch (const std::exception& e) { cout << e.what() << endl; } } return 0; }
