1.有關計算器的功能
A,實現多個復數(包括實數)的加減乘除,大小比較,
B.實現十進制實數的進制轉換,可以轉換任意進制
2.有關設計的原理
A.復數計算的部分,采用運算符的重載,進行復數的加減乘除以及大小比較
對於輸入輸出,(>>和<<),加減乘除運算進行重載。
輸入的重載,實現a+bi形式的復數的輸入。
輸出的重載,實現實數的輸出(實現特殊的只輸出實部虛部之類的)。
加減乘除的重載,實現有關復數的運算。
B.進制轉換的部分,采用進制轉換的方法,實現10進制的任意進制轉換。輾轉相除,記錄每次的余數,存儲在數組中來記錄轉換得到的數字
3.有關設計的特點
A.采用函數對所實現功能進行封裝。
B.采用運算符的重載,使復數運算更加方便
C.考慮所有的輸入輸出情況,對選擇的操作,輸入復數的類型等進行判斷與相應的處理
D.程序在完成以後,我發了自己的博客,之後在博客上接受大家建議,規范代碼格式,自己在制作過程有所收獲也有所學習。
1,登錄界面:
2,實現界面:
#include
#include
#include
#include
#include
#include
#include
#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 '9') && (s[k]!='+' && s[k]!='-' && s[k]!='i'))
{
cout<<"error"<= '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< 0)
os<>num1;
cout<<"第二個復數:";
cin>>num2;
sum=num1+num2;
cout<<"第三個復數:";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
sum=sum+num1;
cout<<"第"<>num1;
i++;
}
cout<<"加法結果是:"<>num1;
cout<<"第2個復數:";
cin>>num2;
sub=num1-num2;
cout<<"第3個復數:";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
sub=sub-num1;
cout<<"第"<>num1;
i++;
}
cout<<"減法結果是:"<>num1;
cout<<"第二個復數:";
cin>>num2;
mul=num1*num2;
cout<<"第三個復數:";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
mul*=num1;
cout<<"第"<>num1;
i++;
}
cout<<"乘法結果是:"<>num1;
cout<<"第二個復數:";
cin>>num2;
div=num1/num2;
cout<<"第三個復數:";
cin>>num1;
int i=4;
while(!(num1==Zero))
{
div/=num1;
cout<<"第"<>num1;
i++;
}
cout<<"除法結果是:"<>num1;
cout<<"第二個復數\n";
cin>>num2;
if(num1==num2)
cout<<"這兩個復數相等\n";
else if(num1>num2)
cout<>n;
cout<<"輸入要轉換的進制:\n";
cin>>p;
cout<<"("<= 1; k--)//輸出轉換後的序列
{
if(s[k]>=10) //若為十六進制等則輸出相對應的字母
cout<<(char)(s[k]+55);
else //否則直接輸出數字
cout<>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() //主函數
{
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則調用Div()函數
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;
}