簡略完成C++單數盤算器。本站提示廣大學習愛好者:(簡略完成C++單數盤算器)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略完成C++單數盤算器正文
本文實例為年夜家分享了簡略完成C++單數盤算器的詳細代碼,供年夜家參考,詳細內容以下
1.有關盤算器的功效
A,完成多個單數(包含實數)的加減乘除,年夜小比擬,
B.完成十進制實數的進制轉換,可以轉換隨意率性進制
2.有關設計的道理
A.單數盤算的部門,采取運算符的重載,停止單數的加減乘除和年夜小比擬
關於輸出輸入,(>>和<<),加減乘除運算停止重載。
輸出的重載,完成a+bi情勢的單數的輸出。
輸入的重載,完成實數的輸入(完成特別的只輸入實部虛部之類的)。
加減乘除的重載,完成有關單數的運算。
B.進制轉換的部門,采取進制轉換的辦法,完成10進制的隨意率性進制轉換。展轉相除,記載每次的余數,存儲在數組中來記載轉換獲得的數字
3.有關設計的特色
A.采取函數對所完成功效停止封裝。
B.采取運算符的重載,使單數運算加倍便利
C.斟酌一切的輸出輸入情形,對選擇的操作,輸出單數的類型等停止斷定與響應的處置
D.法式在完成今後,接收年夜家建議,標准代碼格局,本身在制造進程有所收成也有所進修。
上面是有關代碼的完成:
#include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #include <fstream> #include <ctime> #define EPS 1e-5 //界說精度常數 using namespace std; //應用尺度空間定名std namespace NameCCom //界說定名空間NameCCom { class CCom //界說一個CCom類 { public: double Real,Image;//實部和虛部 CCom(double real=0,double image=0) //結構函數 { Real=real; Image=image; } friend istream & operator>>(istream &is,CCom &com); //重載輸出 friend ostream & operator<<(ostream &os,CCom &com); //重載輸入 CCom operator+(CCom &com); //加法重載 CCom operator-(CCom &com); //減法重載 CCom operator*(CCom &com); //乘法重載 CCom operator/(CCom &com); //除法重載 CCom operator+=(CCom &com); //加法賦值重載 CCom operator-=(CCom &com); //減法賦值重載 CCom operator*=(CCom &com); //乘法賦值重載 CCom operator/=(CCom &com); //除法賦值重載 }; struct User //界說用戶構造體類型 { char szName[20]; //用戶名 }user; //界說全局變量 int CCom::operator>(CCom &com) //重載運算符">",比擬模的年夜小 { if(mod()>com.mod()) return 1; //若年夜,則前往1 else return 0; //不然,則前往0 } int CCom::operator<(CCom &com) //重載運算符"<",比擬模的年夜小 { if(mod()<com.mod()) return 1; //若小,則前往1 else return 0; //不然,則前往0 } int CCom::operator!=(CCom &com) //重載運算符"!=",分離斷定單數的實部和虛部 { if(*this==com) return 0; //若相等,則前往0 else return 1; //不然,則前往1 } istream & operator>>(istream &is,CCom &com) //重載輸出,可以輸出a+bi的情勢 { cout<<"請輸出單數:"; char s[80]; is>>s; //用字符串的情勢接收單數 int len=strlen(s); //求出字符串的長度 int n=0,sign=1; //n為以後從字符串中提掏出來的數字,初始化為0;sign是標志符號,初始化為正 com.Image=com.Real=0; for(int k=0;k<len;k++) //斷定接收的字符串能否正當 { if((s[k]<'0' || s[k]> '9') && (s[k]!='+' && s[k]!='-' && s[k]!='i')) { cout<<"error"<<endl; return is; //毛病,輸入失足信息並前往 } } for(int k=0;k<len;) //次序辨認字符串中各字符 { if(n!=0 &&(s[k]=='-'||s[k]=='+')) //以後字符能否是符號位 { com.Real=sign*n; //sign是符號位,且n!=0,即n已被賦值,注解以後讀取的是虛部的符號 n=0; //將原n*sign值賦給實部,將n清零,預備接收虛部的值 } if(s[k]=='-') //以後字符為負號 { sign=-1;k++; //給符號標記賦值 } if(s[k]=='+') //以後字符為正號 { sign=1;k++; //給符號標記賦值 } if(s[k]=='i') //以後字符為'i' { if(k!=len-1) //斷定字符'i'能否為字符串中作後一個字符 cout<<"error\n"; //假如不是,解釋單數數據格局毛病 else com.Image=sign*n; //假如是最初一個字符,單數對象已接收完,用sign*n為虛部賦值 break; } while(s[k]>='0' && s[k]<='9') //假如以後字符在0~9之間,將數字字符轉換成數字數值 { n=n*10+s[k]-'0'; k++; } } if(s[len-1]!='i' && n!=0) //假如最初一個字符不是'i',表現單數對象內只要實部,沒有虛部 { com.Real=n*sign; } return is; } ostream & operator<<(ostream &os,CCom &com) //重載輸出 { if(fabs(com.Image)<EPS) // 假如虛部為0 os<<com.Real; //只輸入實部 else if((fabs(com.Real)<EPS)) //假如實部為0 os<<com.Image<<"i"; //只輸入虛部 else if(com.Image>0) os<<com.Real<<"+"<<com.Image<<"i"; else os<<com.Real<<com.Image<<"i"; //虛部為正 return os; } CCom CCom::operator+(CCom &com) //加法重載 { CCom sum; sum.Real=Real+com.Real; //實部相加 sum.Image=Image+com.Image; //虛部相加 return sum; } CCom CCom::operator-(CCom &com) //減法重載 { CCom sub; sub.Real=Real-com.Real; //實部相減 sub.Image=Image-com.Image; //虛部相減 return sub; } CCom CCom::operator*(CCom &com) //乘法重載 { CCom multi; multi.Real=Real*com.Real-Image*com.Image; //實部乘積 multi.Image=Real*com.Image+Image*com.Real; //虛部乘積 return multi; } CCom CCom::operator/(CCom &com) //除法重載 { CCom div; div.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //實部除積 div.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虛部除積 return div; } CCom CCom::operator+=(CCom &com) //重載加法賦值 { Real=Real+com.Real; //實部相加 Image=Image+com.Image; //虛部相加 return *this; } CCom CCom::operator-=(CCom &com) //重載減法賦值 { Real=Real-com.Real; //實部相減 Image=Image-com.Image; //虛部相減 return *this; } CCom CCom::operator*=(CCom &com) //重載乘法賦值 { double nReal=Real*com.Real-Image*com.Image; //實部乘積 double nImage=Real*com.Image+Image*com.Real; //虛部乘積 Real=nReal; Image=nImage; return *this; } CCom CCom::operator/=(CCom &com) //重載除法賦值 { double nReal=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //實部除積 double nImage=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虛部除積 Real=nReal; Image=nImage; return *this; } int CCom::operator==(CCom &com) //重載等於 { if(Real==com.Real && Image==com.Image) return 1; else return 0; } void Add() //單數加法運算函數 { CCom num1,num2,sum,Zero(0,0); cout<<"加法盤算\n"<<"起碼輸出兩個單數,而且以0停止\n"; cout<<"第一個單數:"; cin>>num1; cout<<"第二個單數:"; cin>>num2; sum=num1+num2; cout<<"第三個單數:"; cin>>num1; int i=4; while(!(num1==Zero)) { sum=sum+num1; cout<<"第"<<i<<"個單數:"; cin>>num1; i++; } cout<<"加法成果是:"<<sum<<endl; cout<<"請按隨意率性鍵持續\n"; cin.get(); cin.get(); } void Sub() //單數減法運算函數 { CCom num1,num2,sub,Zero(0,0); cout<<"起碼輸出兩個單數,而且以0停止\n"; cout<<"第1個單數:"; cin>>num1; cout<<"第2個單數:"; cin>>num2; sub=num1-num2; cout<<"第3個單數:"; cin>>num1; int i=4; while(!(num1==Zero)) { sub=sub-num1; cout<<"第"<<i<<"個單數:"; cin>>num1; i++; } cout<<"減法成果是:"<<sub<<endl; cout<<"請按隨意率性鍵持續\n"; cin.get(); cin.get(); } void Mul() //單數乘法運算函數 { CCom num1,num2,mul,Zero(0,0); cout<<"乘法盤算\n"<<"起碼輸出兩個單數,而且以0停止\n"; cout<<"第一個單數:"; cin>>num1; cout<<"第二個單數:"; cin>>num2; mul=num1*num2; cout<<"第三個單數:"; cin>>num1; int i=4; while(!(num1==Zero)) { mul*=num1; cout<<"第"<<i<<"個單數:"; cin>>num1; i++; } cout<<"乘法成果是:"<<mul<<endl; cout<<"請按隨意率性鍵持續\n"; cin.get(); cin.get(); } void Div() //單數除法運算函數 { CCom num1,num2,div,Zero(0,0); cout<<"除法盤算\n"<<"起碼輸出兩個單數,而且以0停止\n"; cout<<"第一個單數:"; cin>>num1; cout<<"第二個單數:"; cin>>num2; div=num1/num2; cout<<"第三個單數:"; cin>>num1; int i=4; while(!(num1==Zero)) { div/=num1; cout<<"第"<<i<<"個單數:"; cin>>num1; i++; } cout<<"除法成果是:"<<div<<endl; cout<<"請按隨意率性鍵持續\n"; cin.get(); cin.get(); } void Compare() //兩單數比擬函數 { CCom num1,num2; cout<<"請輸出兩個單數\n"; cout<<"第一個單數:"; cin>>num1; cout<<"第二個單數\n"; cin>>num2; if(num1==num2) cout<<"這兩個單數相等\n"; else if(num1>num2) cout<<num1<<"的模年夜於"<<num2<<"的模\n"; else if(num1<num2) cout<<num2<<"的模年夜於"<<num1<<"的模\n"; else cout<<"這兩個單數的模相等\n"; cout<<"請按隨意率性鍵持續\n"; cin.get(); cin.get(); } void Jinzhi() //完成進制轉換 { long n; int p,c,m=0,s[100]; cout<<"輸出要轉換的數字:\n"; cin>>n; cout<<"輸出要轉換的進制:\n"; cin>>p; cout<<"("<<n<<")10="<<"("; while (n!=0)//數制轉換,成果存入數組s[m] { c=n%p; n=n/p; m++;s[m]=c; //將余數按次序存入數組s[m]中 } for(int k=m;k>=1;k--)//輸入轉換後的序列 { if(s[k]>=10) //若為十六進制等則輸入絕對應的字母 cout<<(char)(s[k]+55); else //不然直接輸入數字 cout<<s[k]; } cout<<")"<<p<<endl; cout<<"請按隨意率性鍵持續\n"; cin.get(); cin.get(); } void outpt() { char szName[20]; cout<<"請輸出您的姓名:"; cin>>szName; system("cls"); do { system("cls"); cout<<"\t這是一個盤算器,可完成以下功效,請按對應的按鍵(0-6)\n\n\n"; cout<<"\t*----------Hpioneer小盤算器菜單---------*\n"; cout<<"\t| 1:多個單數加法,以0停止 |\n"; cout<<"\t| 2:多個單數減法,以0停止 |\n"; cout<<"\t| 3:多個單數乘法,以0停止 |\n"; cout<<"\t| 4:多個單數除法,以0停止 |\n"; cout<<"\t| 5:單數比擬 |\n"; cout<<"\t| 6:進制轉換 |\n"; cout<<"\t| 0:加入法式 |\n"; cout<<"\t| 請您選擇: |\n"; cout<<"\t*---------------------------------------*\n"; } } using namespace NameCCom; int main(void) //主函數開端,void可以不寫 { int h; output(); cin>>h;//每步操作 if(h==1) //用戶選1則挪用Add()函數 Add(); else if(h==2) //用戶選2則挪用Sub()函數 Sub(); else if(h==3) //用戶選3則挪用Mul()函數 Mul(); else if(h==4) //用戶選4則挪用Di v()函數 Div(); else if(h==5) //用戶選6則挪用Compare()函數 Compare(); else if(h==6) //用戶選7則挪用函數Jinzhi()函數 Jinzhi(); else if(h==0) cout<<"異常感激您的應用\n"; else break; } return 0; }
以上就是本文的全體內容,願望對年夜家進修C++法式設計有所贊助。