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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值