簡(jiǎn)單實(shí)現(xiàn)C++復(fù)數(shù)計(jì)算器
本文實(shí)例為大家分享了簡(jiǎn)單實(shí)現(xiàn)C++復(fù)數(shù)計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下
1.有關(guān)計(jì)算器的功能
A,實(shí)現(xiàn)多個(gè)復(fù)數(shù)(包括實(shí)數(shù))的加減乘除,大小比較,
B.實(shí)現(xiàn)十進(jìn)制實(shí)數(shù)的進(jìn)制轉(zhuǎn)換,可以轉(zhuǎn)換任意進(jìn)制
2.有關(guān)設(shè)計(jì)的原理
A.復(fù)數(shù)計(jì)算的部分,采用運(yùn)算符的重載,進(jìn)行復(fù)數(shù)的加減乘除以及大小比較
對(duì)于輸入輸出,(>>和<<),加減乘除運(yùn)算進(jìn)行重載。
輸入的重載,實(shí)現(xiàn)a+bi形式的復(fù)數(shù)的輸入。
輸出的重載,實(shí)現(xiàn)實(shí)數(shù)的輸出(實(shí)現(xiàn)特殊的只輸出實(shí)部虛部之類的)。
加減乘除的重載,實(shí)現(xiàn)有關(guān)復(fù)數(shù)的運(yùn)算。
B.進(jìn)制轉(zhuǎn)換的部分,采用進(jìn)制轉(zhuǎn)換的方法,實(shí)現(xiàn)10進(jìn)制的任意進(jìn)制轉(zhuǎn)換。輾轉(zhuǎn)相除,記錄每次的余數(shù),存儲(chǔ)在數(shù)組中來記錄轉(zhuǎn)換得到的數(shù)字
3.有關(guān)設(shè)計(jì)的特點(diǎn)
A.采用函數(shù)對(duì)所實(shí)現(xiàn)功能進(jìn)行封裝。
B.采用運(yùn)算符的重載,使復(fù)數(shù)運(yùn)算更加方便
C.考慮所有的輸入輸出情況,對(duì)選擇的操作,輸入復(fù)數(shù)的類型等進(jìn)行判斷與相應(yīng)的處理
D.程序在完成以后,接受大家建議,規(guī)范代碼格式,自己在制作過程有所收獲也有所學(xué)習(xí)。
下面是有關(guān)代碼的實(shí)現(xiàn):
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <ctime>
#define EPS 1e-5 //定義精度常數(shù)
using namespace std; //使用標(biāo)準(zhǔn)空間命名std
namespace NameCCom //定義命名空間NameCCom
{
class CCom //定義一個(gè)CCom類
{
public:
double Real,Image;//實(shí)部和虛部
CCom(double real=0,double image=0) //構(gòu)造函數(shù)
{
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 //定義用戶結(jié)構(gòu)體類型
{
char szName[20]; //用戶名
}user; //定義全局變量
int CCom::operator>(CCom &com) //重載運(yùn)算符">",比較模的大小
{
if(mod()>com.mod())
return 1; //若大,則返回1
else
return 0; //否則,則返回0
}
int CCom::operator<(CCom &com) //重載運(yùn)算符"<",比較模的大小
{
if(mod()<com.mod())
return 1; //若小,則返回1
else
return 0; //否則,則返回0
}
int CCom::operator!=(CCom &com) //重載運(yùn)算符"!=",分別判斷復(fù)數(shù)的實(shí)部和虛部
{
if(*this==com)
return 0; //若相等,則返回0
else
return 1; //否則,則返回1
}
istream & operator>>(istream &is,CCom &com) //重載輸入,可以輸入a+bi的形式
{
cout<<"請(qǐng)輸入復(fù)數(shù):";
char s[80];
is>>s; //用字符串的形式接受復(fù)數(shù)
int len=strlen(s); //求出字符串的長(zhǎng)度
int n=0,sign=1; //n為當(dāng)前從字符串中提取出來的數(shù)字,初始化為0;sign是標(biāo)記符號(hào),初始化為正
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; //錯(cuò)誤,輸出出錯(cuò)信息并返回
}
}
for(int k=0;k<len;) //順序識(shí)別字符串中各字符
{
if(n!=0 &&(s[k]=='-'||s[k]=='+')) //當(dāng)前字符是否是符號(hào)位
{
com.Real=sign*n; //sign是符號(hào)位,且n!=0,即n已被賦值,表明當(dāng)前讀取的是虛部的符號(hào)
n=0; //將原n*sign值賦給實(shí)部,將n清零,準(zhǔn)備接受虛部的值
}
if(s[k]=='-') //當(dāng)前字符為負(fù)號(hào)
{
sign=-1;k++; //給符號(hào)標(biāo)志賦值
}
if(s[k]=='+') //當(dāng)前字符為正號(hào)
{
sign=1;k++; //給符號(hào)標(biāo)志賦值
}
if(s[k]=='i') //當(dāng)前字符為'i'
{
if(k!=len-1) //判斷字符'i'是否為字符串中作后一個(gè)字符
cout<<"error\n"; //如果不是,說明復(fù)數(shù)數(shù)據(jù)格式錯(cuò)誤
else
com.Image=sign*n; //如果是最后一個(gè)字符,復(fù)數(shù)對(duì)象已接受完,用sign*n為虛部賦值
break;
}
while(s[k]>='0' && s[k]<='9') //如果當(dāng)前字符在0~9之間,將數(shù)字字符轉(zhuǎn)換成數(shù)字?jǐn)?shù)值
{
n=n*10+s[k]-'0';
k++;
}
}
if(s[len-1]!='i' && n!=0) //如果最后一個(gè)字符不是'i',表示復(fù)數(shù)對(duì)象內(nèi)只有實(shí)部,沒有虛部
{
com.Real=n*sign;
}
return is;
}
ostream & operator<<(ostream &os,CCom &com) //重載輸入
{
if(fabs(com.Image)<EPS) // 如果虛部為0
os<<com.Real; //只輸出實(shí)部
else if((fabs(com.Real)<EPS)) //如果實(shí)部為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; //實(shí)部相加
sum.Image=Image+com.Image; //虛部相加
return sum;
}
CCom CCom::operator-(CCom &com) //減法重載
{
CCom sub;
sub.Real=Real-com.Real; //實(shí)部相減
sub.Image=Image-com.Image; //虛部相減
return sub;
}
CCom CCom::operator*(CCom &com) //乘法重載
{
CCom multi;
multi.Real=Real*com.Real-Image*com.Image; //實(shí)部乘積
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); //實(shí)部除積
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; //實(shí)部相加
Image=Image+com.Image; //虛部相加
return *this;
}
CCom CCom::operator-=(CCom &com) //重載減法賦值
{
Real=Real-com.Real; //實(shí)部相減
Image=Image-com.Image; //虛部相減
return *this;
}
CCom CCom::operator*=(CCom &com) //重載乘法賦值
{
double nReal=Real*com.Real-Image*com.Image; //實(shí)部乘積
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); //實(shí)部除積
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() //復(fù)數(shù)加法運(yùn)算函數(shù)
{
CCom num1,num2,sum,Zero(0,0);
cout<<"加法計(jì)算\n"<<"最少輸入兩個(gè)復(fù)數(shù),并且以0結(jié)束\n";
cout<<"第一個(gè)復(fù)數(shù):";
cin>>num1;
cout<<"第二個(gè)復(fù)數(shù):";
cin>>num2;
sum=num1+num2;
cout<<"第三個(gè)復(fù)數(shù):";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
sum=sum+num1;
cout<<"第"<<i<<"個(gè)復(fù)數(shù):";
cin>>num1;
i++;
}
cout<<"加法結(jié)果是:"<<sum<<endl;
cout<<"請(qǐng)按任意鍵繼續(xù)\n";
cin.get();
cin.get();
}
void Sub() //復(fù)數(shù)減法運(yùn)算函數(shù)
{
CCom num1,num2,sub,Zero(0,0);
cout<<"最少輸入兩個(gè)復(fù)數(shù),并且以0結(jié)束\n";
cout<<"第1個(gè)復(fù)數(shù):";
cin>>num1;
cout<<"第2個(gè)復(fù)數(shù):";
cin>>num2;
sub=num1-num2;
cout<<"第3個(gè)復(fù)數(shù):";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
sub=sub-num1;
cout<<"第"<<i<<"個(gè)復(fù)數(shù):";
cin>>num1;
i++;
}
cout<<"減法結(jié)果是:"<<sub<<endl;
cout<<"請(qǐng)按任意鍵繼續(xù)\n";
cin.get();
cin.get();
}
void Mul() //復(fù)數(shù)乘法運(yùn)算函數(shù)
{
CCom num1,num2,mul,Zero(0,0);
cout<<"乘法計(jì)算\n"<<"最少輸入兩個(gè)復(fù)數(shù),并且以0結(jié)束\n";
cout<<"第一個(gè)復(fù)數(shù):";
cin>>num1;
cout<<"第二個(gè)復(fù)數(shù):";
cin>>num2;
mul=num1*num2;
cout<<"第三個(gè)復(fù)數(shù):";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
mul*=num1;
cout<<"第"<<i<<"個(gè)復(fù)數(shù):";
cin>>num1;
i++;
}
cout<<"乘法結(jié)果是:"<<mul<<endl;
cout<<"請(qǐng)按任意鍵繼續(xù)\n";
cin.get();
cin.get();
}
void Div() //復(fù)數(shù)除法運(yùn)算函數(shù)
{
CCom num1,num2,div,Zero(0,0);
cout<<"除法計(jì)算\n"<<"最少輸入兩個(gè)復(fù)數(shù),并且以0結(jié)束\n";
cout<<"第一個(gè)復(fù)數(shù):";
cin>>num1;
cout<<"第二個(gè)復(fù)數(shù):";
cin>>num2;
div=num1/num2;
cout<<"第三個(gè)復(fù)數(shù):";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
div/=num1;
cout<<"第"<<i<<"個(gè)復(fù)數(shù):";
cin>>num1;
i++;
}
cout<<"除法結(jié)果是:"<<div<<endl;
cout<<"請(qǐng)按任意鍵繼續(xù)\n";
cin.get();
cin.get();
}
void Compare() //兩復(fù)數(shù)比較函數(shù)
{
CCom num1,num2;
cout<<"請(qǐng)輸入兩個(gè)復(fù)數(shù)\n";
cout<<"第一個(gè)復(fù)數(shù):";
cin>>num1;
cout<<"第二個(gè)復(fù)數(shù)\n";
cin>>num2;
if(num1==num2)
cout<<"這兩個(gè)復(fù)數(shù)相等\n";
else if(num1>num2)
cout<<num1<<"的模大于"<<num2<<"的模\n";
else if(num1<num2)
cout<<num2<<"的模大于"<<num1<<"的模\n";
else
cout<<"這兩個(gè)復(fù)數(shù)的模相等\n";
cout<<"請(qǐng)按任意鍵繼續(xù)\n";
cin.get();
cin.get();
}
void Jinzhi() //實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換
{
long n;
int p,c,m=0,s[100];
cout<<"輸入要轉(zhuǎn)換的數(shù)字:\n";
cin>>n;
cout<<"輸入要轉(zhuǎn)換的進(jìn)制:\n";
cin>>p;
cout<<"("<<n<<")10="<<"(";
while (n!=0)//數(shù)制轉(zhuǎn)換,結(jié)果存入數(shù)組s[m]
{
c=n%p;
n=n/p;
m++;s[m]=c; //將余數(shù)按順序存入數(shù)組s[m]中
}
for(int k=m;k>=1;k--)//輸出轉(zhuǎn)換后的序列
{
if(s[k]>=10) //若為十六進(jìn)制等則輸出相對(duì)應(yīng)的字母
cout<<(char)(s[k]+55);
else //否則直接輸出數(shù)字
cout<<s[k];
}
cout<<")"<<p<<endl;
cout<<"請(qǐng)按任意鍵繼續(xù)\n";
cin.get();
cin.get();
}
void outpt()
{
char szName[20];
cout<<"請(qǐng)輸入您的姓名:";
cin>>szName;
system("cls");
do
{
system("cls");
cout<<"\t這是一個(gè)計(jì)算器,可實(shí)現(xiàn)以下功能,請(qǐng)按對(duì)應(yīng)的按鍵(0-6)\n\n\n";
cout<<"\t*----------Hpioneer小計(jì)算器菜單---------*\n";
cout<<"\t| 1:多個(gè)復(fù)數(shù)加法,以0結(jié)束 |\n";
cout<<"\t| 2:多個(gè)復(fù)數(shù)減法,以0結(jié)束 |\n";
cout<<"\t| 3:多個(gè)復(fù)數(shù)乘法,以0結(jié)束 |\n";
cout<<"\t| 4:多個(gè)復(fù)數(shù)除法,以0結(jié)束 |\n";
cout<<"\t| 5:復(fù)數(shù)比較 |\n";
cout<<"\t| 6:進(jìn)制轉(zhuǎn)換 |\n";
cout<<"\t| 0:退出程序 |\n";
cout<<"\t| 請(qǐng)您選擇: |\n";
cout<<"\t*---------------------------------------*\n";
}
}
using namespace NameCCom;
int main(void) //主函數(shù)開始,void可以不寫
{
int h;
output();
cin>>h;//每步操作
if(h==1) //用戶選1則調(diào)用Add()函數(shù)
Add();
else if(h==2) //用戶選2則調(diào)用Sub()函數(shù)
Sub();
else if(h==3) //用戶選3則調(diào)用Mul()函數(shù)
Mul();
else if(h==4) //用戶選4則調(diào)用Di
v()函數(shù)
Div();
else if(h==5) //用戶選6則調(diào)用Compare()函數(shù)
Compare();
else if(h==6) //用戶選7則調(diào)用函數(shù)Jinzhi()函數(shù)
Jinzhi();
else if(h==0)
cout<<"非常感謝您的使用\n";
else
break;
}
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)C++程序設(shè)計(jì)有所幫助。
上一篇:Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析
欄 目:C語言
下一篇:從string類的實(shí)現(xiàn)看C++類的四大函數(shù)(面試常見)
本文標(biāo)題:簡(jiǎn)單實(shí)現(xiàn)C++復(fù)數(shù)計(jì)算器
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2231.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10使用OpenGL實(shí)現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項(xiàng)的七種實(shí)現(xiàn)方法
- 01-10C語言 解決不用+、-、&#215;、&#247;數(shù)字運(yùn)算符做加法
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實(shí)現(xiàn)方法


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置


