C++几何计算器
众所周知,几何是数学中的重头戏,那么我这两天写了一个程序,可以简单的计算出多种图形的各样值,下方会具体介绍。
第一部分:平面图形
1. 长方形
- 支持功能:
- 计算周长:输入长和宽,计算周长(公式:
2×(长+宽)
)。 - 计算面积:输入长和宽,计算面积(公式:
长×宽
)。 - 计算尺寸:
- 已知面积和长,求宽(公式:
面积÷长
)。 - 已知面积和宽,求长(公式:
面积÷宽
)。 - 已知周长和长,求宽(公式:
周长÷2−长
)。 - 已知周长和宽,求长(公式:
周长÷2−宽
)。
- 已知面积和长,求宽(公式:
- 计算周长:输入长和宽,计算周长(公式:
2. 正方形
- 支持功能:
- 计算周长:输入边长,计算周长(公式:
4×边长
)。 - 计算面积:输入边长,计算面积(公式:
边长×边长
)。 - 计算尺寸:
- 已知面积,求边长(公式:
√面积
)。 - 已知周长,求边长(公式:
周长÷4
)。
- 已知面积,求边长(公式:
- 计算周长:输入边长,计算周长(公式:
3. 平行四边形
- 支持功能:
- 计算周长:输入底边和侧边长度,计算周长(公式:
2×(底边+侧边)
)。 - 计算面积:输入底边和高,计算面积(公式:
底边×高
)。 - 计算尺寸:
- 已知面积和底边,求高(公式:
面积÷底边
)。 - 已知面积和高,求底边(公式:
面积÷高
)。
- 已知面积和底边,求高(公式:
- 计算周长:输入底边和侧边长度,计算周长(公式:
4. 三角形
- 支持功能:
- 计算周长:输入三条边,计算周长(公式:
边1+边2+边3
,自动校验三边有效性)。 - 计算面积:输入三条边,计算面积(海伦公式:
√[s×(s−a)×(s−b)×(s−c)]
,其中s=(a+b+c)/2
)。 - 计算尺寸:
- 已知面积和底边,求高(公式:
2×面积÷底边
)。 - 已知等边三角形面积,求边长(公式:
√(4×面积÷√3)
)。
- 已知面积和底边,求高(公式:
- 计算周长:输入三条边,计算周长(公式:
5. 梯形
- 支持功能:
- 计算周长:输入上底、下底和两腰,计算周长(公式:
上底+下底+腰1+腰2
)。 - 计算面积:输入上底、下底和高,计算面积(公式:
(上底+下底)×高÷2
)。 - 计算尺寸:
- 已知面积、上底和下底,求高(公式:
2×面积÷(上底+下底)
)。 - 已知面积、上底和高,求下底(公式:
2×面积÷高−上底
)。 - 已知面积、下底和高,求上底(公式:
2×面积÷高−下底
)。
- 已知面积、上底和下底,求高(公式:
- 计算周长:输入上底、下底和两腰,计算周长(公式:
6. 圆形
- 支持功能:
- 计算周长:输入半径,计算周长(公式:
2×π×半径
,π=3.14
)。 - 计算面积:输入半径,计算面积(公式:
π×半径²
)。 - 计算尺寸:
- 已知面积,求半径(公式:
√(面积÷π)
)。 - 已知周长,求半径(公式:
周长÷(2×π)
)。
- 已知面积,求半径(公式:
- 计算周长:输入半径,计算周长(公式:
第二部分:立体图形
1. 立方体
- 支持功能:
- 计算表面积:输入边长,计算表面积(公式:
6×边长²
)。 - 计算体积:输入边长,计算体积(公式:
边长³
)。 - 计算尺寸:
- 已知表面积,求边长(公式:
√(表面积÷6)
)。 - 已知体积,求边长(公式:
³√体积
)。
- 已知表面积,求边长(公式:
- 计算表面积:输入边长,计算表面积(公式:
2. 长方体
- 支持功能:
- 计算表面积:输入长、宽、高,计算表面积(公式:
2×(长×宽+长×高+宽×高)
)。 - 计算体积:输入长、宽、高,计算体积(公式:
长×宽×高
)。 - 计算尺寸:
- 已知体积、长和宽,求高(公式:
体积÷(长×宽)
)。 - 已知体积、长和高,求宽(公式:
体积÷(长×高)
)。 - 已知体积、宽和高,求长(公式:
体积÷(宽×高)
)。
- 已知体积、长和宽,求高(公式:
- 计算表面积:输入长、宽、高,计算表面积(公式:
3. 圆柱体
- 支持功能:
- 计算表面积:输入底面半径和高,计算表面积(公式:
2×π×半径×(半径+高)
)。 - 计算体积:输入底面半径和高,计算体积(公式:
π×半径²×高
)。 - 计算尺寸:
- 已知体积和半径,求高(公式:
体积÷(π×半径²)
)。 - 已知体积和高,求半径(公式:
√(体积÷(π×高))
)。
- 已知体积和半径,求高(公式:
- 计算表面积:输入底面半径和高,计算表面积(公式:
4. 圆锥体
- 支持功能:
- 计算表面积:输入底面半径和高,计算表面积(公式:
π×半径×(半径+√(半径²+高²))
)。 - 计算体积:输入底面半径和高,计算体积(公式:
(1/3)×π×半径²×高
)。 - 计算尺寸:
- 已知体积和半径,求高(公式:
3×体积÷(π×半径²)
)。 - 已知体积和高,求半径(公式:
√(3×体积÷(π×高))
)。
- 已知体积和半径,求高(公式:
- 计算表面积:输入底面半径和高,计算表面积(公式:
5. 球体
- 支持功能:
- 计算表面积:输入半径,计算表面积(公式:
4×π×半径²
)。 - 计算体积:输入半径,计算体积(公式:
(4/3)×π×半径³
)。 - 计算尺寸:
- 已知表面积,求半径(公式:
√(表面积÷(4×π))
)。 - 已知体积,求半径(公式:
³√(3×体积÷(4×π))
)。
- 已知表面积,求半径(公式:
- 计算表面积:输入半径,计算表面积(公式:
上代码:
#include<iostream>
#include<cmath>
#include<limits>
using namespace std;
int main() {while(true) {system("cls");cout<<"******************\n****几何计算器****\n******************\n\n请选择计算类型:\n1. 平面图形计算\n2. 立体图形计算\n0. 退出程序\n请输入您的选择: ";int choice;while(!(cin>>choice)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(choice==0)break;if(choice!=1&&choice!=2) {cout<<"无效选择,请按任意键重试...";cin.ignore();cin.get();continue;}if(choice==1) {system("cls");cout<<"平面图形计算\n============\n\n请选择平面图形:\n1. 长方形\n2. 正方形\n3. 平行四边形\n4. 三角形\n5. 梯形\n6. 圆形\n请输入图形编号: ";int figure;while(!(cin>>figure)||figure<1||figure>6) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}cout<<"\n您需要进行什么操作:\n1. 计算周长\n2. 计算面积\n3. 计算尺寸\n请输入操作编号: ";int operation;while(!(cin>>operation)||(operation<1||operation>3)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}system("cls");cout<<"计算中..."<<endl<<"====================\n";switch(figure) {case 1: {double len,wid,result;if(operation==1) {cout<<"请输入长和宽: ";while(!(cin>>len>>wid)||len<=0||wid<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=2*(len+wid);cout<<"\n周长 = "<<result<<endl;} else if(operation==2) {cout<<"请输入长和宽: ";while(!(cin>>len>>wid)||len<=0||wid<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=len*wid;cout<<"\n面积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知面积和长\n2. 已知面积和宽\n3. 已知周长和长\n4. 已知周长和宽\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>4) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入面积和长: ";double area,given_len;while(!(cin>>area>>given_len)||area<=0||given_len<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n宽 = "<<area/given_len<<endl;} else if(cond==2) {cout<<"请输入面积和宽: ";double area,given_wid;while(!(cin>>area>>given_wid)||area<=0||given_wid<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n长 = "<<area/given_wid<<endl;} else if(cond==3) {cout<<"请输入周长和长: ";double perimeter,given_len;while(!(cin>>perimeter>>given_len)||perimeter<=0||given_len<=0||perimeter<2*given_len) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n宽 = "<<(perimeter/2-given_len)<<endl;} else {cout<<"请输入周长和宽: ";double perimeter,given_wid;while(!(cin>>perimeter>>given_wid)||perimeter<=0||given_wid<=0||perimeter<2*given_wid) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n长 = "<<(perimeter/2-given_wid)<<endl;}}break;}case 2: {double side,result;if(operation==1) {cout<<"请输入边长: ";while(!(cin>>side)||side<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=4*side;cout<<"\n周长 = "<<result<<endl;} else if(operation==2) {cout<<"请输入边长: ";while(!(cin>>side)||side<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=side*side;cout<<"\n面积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知面积\n2. 已知周长\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入面积: ";double area;while(!(cin>>area)||area<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n边长 = "<<sqrt(area)<<endl;} else {cout<<"请输入周长: ";double perimeter;while(!(cin>>perimeter)||perimeter<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n边长 = "<<perimeter/4<<endl;}}break;}case 3: {double base,side,height,result;if(operation==1) {cout<<"请输入底边和侧边长度: ";while(!(cin>>base>>side)||base<=0||side<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=2*(base+side);cout<<"\n周长 = "<<result<<endl;} else if(operation==2) {cout<<"请输入底边长度和高: ";while(!(cin>>base>>height)||base<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=base*height;cout<<"\n面积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知面积和底边\n2. 已知面积和高\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入面积和底边: ";double area,given_base;while(!(cin>>area>>given_base)||area<=0||given_base<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n高 = "<<area/given_base<<endl;} else {cout<<"请输入面积和高: ";double area,given_height;while(!(cin>>area>>given_height)||area<=0||given_height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n底边 = "<<area/given_height<<endl;}}break;}case 4: {double a,b,c,h,s,result;if(operation==1) {cout<<"请输入三条边的长度: ";while(!(cin>>a>>b>>c)||a<=0||b<=0||c<=0||(a+b<=c)||(a+c<=b)||(b+c<=a)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入有效的三角形边长: ";}result=a+b+c;cout<<"\n周长 = "<<result<<endl;} else if(operation==2) {cout<<"请输入三条边的长度: ";while(!(cin>>a>>b>>c)||a<=0||b<=0||c<=0||(a+b<=c)||(a+c<=b)||(b+c<=a)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入有效的三角形边长: ";}s=(a+b+c)/2;result=sqrt(s*(s-a)*(s-b)*(s-c));cout<<"\n面积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知面积和底边\n2. 已知为等边三角形,已知面积\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入面积和底边: ";double area,given_base;while(!(cin>>area>>given_base)||area<=0||given_base<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n高 = "<<(2*area/given_base)<<endl;} else {cout<<"请输入面积: ";double area;while(!(cin>>area)||area<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n边长 = "<<sqrt(4*area/sqrt(3))<<endl;}}break;}case 5: {double a,b,c,d,h,result;if(operation==1) {cout<<"请输入上底、下底和两腰的长度: ";while(!(cin>>a>>b>>c>>d)||a<=0||b<=0||c<=0||d<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=a+b+c+d;cout<<"\n周长 = "<<result<<endl;} else if(operation==2) {cout<<"请输入上底、下底和高: ";while(!(cin>>a>>b>>h)||a<=0||b<=0||h<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=(a+b)*h/2;cout<<"\n面积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知面积、上底和下底\n2. 已知面积、上底和高\n3. 已知面积、下底和高\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>3) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入面积、上底和下底: ";double area,upper,lower;while(!(cin>>area>>upper>>lower)||area<=0||upper<=0||lower<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n高 = "<<(2*area/(upper+lower))<<endl;} else if(cond==2) {cout<<"请输入面积、上底和高: ";double area,upper,height;while(!(cin>>area>>upper>>height)||area<=0||upper<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n下底 = "<<(2*area/height-upper)<<endl;} else {cout<<"请输入面积、下底和高: ";double area,lower,height;while(!(cin>>area>>lower>>height)||area<=0||lower<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n上底 = "<<(2*area/height-lower)<<endl;}}break;}case 6: {double r,result;const double PI=3.14;if(operation==1) {cout<<"请输入半径: ";while(!(cin>>r)||r<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=2*PI*r;cout<<"\n周长 = "<<result<<endl;} else if(operation==2) {cout<<"请输入半径: ";while(!(cin>>r)||r<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=PI*r*r;cout<<"\n面积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知面积\n2. 已知周长\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入面积: ";double area;while(!(cin>>area)||area<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n半径 = "<<sqrt(area/PI)<<endl;} else {cout<<"请输入周长: ";double perimeter;while(!(cin>>perimeter)||perimeter<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n半径 = "<<perimeter/(2*PI)<<endl;}}break;}}cout<<"\n按任意键继续...";cin.ignore();cin.get();} else if(choice==2) {system("cls");cout<<"立体图形计算\n============\n\n请选择立体图形:\n1. 立方体\n2. 长方体\n3. 圆柱体\n4. 圆锥体\n5. 球体\n请输入图形编号: ";int solidFigure;while(!(cin>>solidFigure)||solidFigure<1||solidFigure>5) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}cout<<"\n您需要进行什么操作:\n1. 计算表面积\n2. 计算体积\n3. 计算尺寸\n请输入操作编号: ";int op;while(!(cin>>op)||(op<1||op>3)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}system("cls");cout<<"计算中..."<<endl<<"====================\n";const double PI=3.14;switch(solidFigure) {case 1: {double edge,result;if(op==1) {cout<<"请输入边长: ";while(!(cin>>edge)||edge<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=6*edge*edge;cout<<"\n表面积 = "<<result<<endl;} else if(op==2) {cout<<"请输入边长: ";while(!(cin>>edge)||edge<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=edge*edge*edge;cout<<"\n体积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知表面积\n2. 已知体积\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入表面积: ";double surface_area;while(!(cin>>surface_area)||surface_area<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n边长 = "<<sqrt(surface_area/6)<<endl;} else {cout<<"请输入体积: ";double volume;while(!(cin>>volume)||volume<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n边长 = "<<cbrt(volume)<<endl;}}break;}case 2: {double length,width,height,result;if(op==1) {cout<<"请输入长、宽、高: ";while(!(cin>>length>>width>>height)||length<=0||width<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=2*(length*width+length*height+width*height);cout<<"\n表面积 = "<<result<<endl;} else if(op==2) {cout<<"请输入长、宽、高: ";while(!(cin>>length>>width>>height)||length<=0||width<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=length*width*height;cout<<"\n体积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知体积、长和宽\n2. 已知体积、长和高\n3. 已知体积、宽和高\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>3) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入体积、长和宽: ";double volume,given_length,given_width;while(!(cin>>volume>>given_length>>given_width)||volume<=0||given_length<=0||given_width<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n高 = "<<volume/(given_length*given_width)<<endl;} else if(cond==2) {cout<<"请输入体积、长和高: ";double volume,given_length,given_height;while(!(cin>>volume>>given_length>>given_height)||volume<=0||given_length<=0||given_height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n宽 = "<<volume/(given_length*given_height)<<endl;} else {cout<<"请输入体积、宽和高: ";double volume,given_width,given_height;while(!(cin>>volume>>given_width>>given_height)||volume<=0||given_width<=0||given_height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n长 = "<<volume/(given_width*given_height)<<endl;}}break;}case 3: {double radius,height,result;if(op==1) {cout<<"请输入底面半径和高: ";while(!(cin>>radius>>height)||radius<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=2*PI*radius*(radius+height);cout<<"\n表面积 = "<<result<<endl;} else if(op==2) {cout<<"请输入底面半径和高: ";while(!(cin>>radius>>height)||radius<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=PI*radius*radius*height;cout<<"\n体积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知体积和半径\n2. 已知体积和高\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入体积和半径: ";double volume,given_radius;while(!(cin>>volume>>given_radius)||volume<=0||given_radius<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n高 = "<<volume/(PI*given_radius*given_radius)<<endl;} else {cout<<"请输入体积和高: ";double volume,given_height;while(!(cin>>volume>>given_height)||volume<=0||given_height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n半径 = "<<sqrt(volume/(PI*given_height))<<endl;}}break;}case 4: {double radius,height,result;if(op==1) {cout<<"请输入底面半径和高: ";while(!(cin>>radius>>height)||radius<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}double slant_height=sqrt(radius*radius+height*height);result=PI*radius*(radius+slant_height);cout<<"\n表面积 = "<<result<<endl;} else if(op==2) {cout<<"请输入底面半径和高: ";while(!(cin>>radius>>height)||radius<=0||height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=(1.0/3.0)*PI*radius*radius*height;cout<<"\n体积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知体积和半径\n2. 已知体积和高\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入体积和半径: ";double volume,given_radius;while(!(cin>>volume>>given_radius)||volume<=0||given_radius<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n高 = "<<(3*volume)/(PI*given_radius*given_radius)<<endl;} else {cout<<"请输入体积和高: ";double volume,given_height;while(!(cin>>volume>>given_height)||volume<=0||given_height<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n半径 = "<<sqrt((3*volume)/(PI*given_height))<<endl;}}break;}case 5: {double radius,result;if(op==1) {cout<<"请输入半径: ";while(!(cin>>radius)||radius<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=4*PI*radius*radius;cout<<"\n表面积 = "<<result<<endl;} else if(op==2) {cout<<"请输入半径: ";while(!(cin>>radius)||radius<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}result=(4.0/3.0)*PI*radius*radius*radius;cout<<"\n体积 = "<<result<<endl;} else {cout<<"已知条件:\n1. 已知表面积\n2. 已知体积\n请选择: ";int cond;while(!(cin>>cond)||cond<1||cond>2) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请重新输入: ";}if(cond==1) {cout<<"请输入表面积: ";double surface_area;while(!(cin>>surface_area)||surface_area<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n半径 = "<<sqrt(surface_area/(4*PI))<<endl;} else {cout<<"请输入体积: ";double volume;while(!(cin>>volume)||volume<=0) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');cout<<"输入无效,请输入正数: ";}cout<<"\n半径 = "<<cbrt((3*volume)/(4*PI))<<endl;}}break;}}cout<<"\n按任意键继续...";cin.ignore();cin.get();}}system("cls");cout<<"\n欢迎下次光临\n\n";return 0;
}