众所周知,几何是数学中的重头戏,那么我这两天写了一个程序,可以简单的计算出多种图形的各样值,下方会具体介绍。
第一部分:平面图形
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;
}