用C++编写一个小型复数计算器 请用面向对象方法设计并实现一个小型复数计算器,包括如下功能: 实

用C++编写一个小型复数计算器请用面向对象方法设计并实现一个小型复数计算器,包括如下功能:实现复数的设置和显示实现复数加减乘除功能,并显示运算结果实现用运算符==进行复数... 用C++编写一个小型复数计算器
请用面向对象方法设计并实现一个小型复数计算器,包括如下功能:
实现复数的设置和显示
实现复数加减乘除功能,并显示运算结果
实现用运算符 = = 进行复数的相等比较,并显示比较结果
展开
 我来答
键盘未找到
推荐于2016-04-21 · TA获得超过328个赞
知道小有建树答主
回答量:403
采纳率:100%
帮助的人:266万
展开全部


#include<iostream>
#include<string>
using namespace std;

typedef float REAL;
#define MAX_BUF_LEN 256

typedef struct COMPLEX
{
REAL r; // 实部
REAL i; // 虚部
};

class Complex
{
private:
COMPLEX *cp;
public:
Complex()
{
cp = (COMPLEX*)malloc(sizeof(COMPLEX));
memset(cp, 0, sizeof(COMPLEX));
}
Complex(const Complex & c)
{
cp = (COMPLEX*)malloc(sizeof(COMPLEX));
cp->r = c.cp->r;
cp->i = c.cp->i;
}
~Complex()
{
if (cp)
{
free(cp);
cp = 0;
}
}

static bool ParseComplex(COMPLEX * cp, const char * strCplx, const int len)
{
memset(cp, 0, sizeof(COMPLEX));
char buf[MAX_BUF_LEN];

int signPos = -1, // +/-号位置
iPos = -1; // 结尾的i的位置
for (int i = len - 1; i > -1; i--)
{
if ('i' == strCplx[i])
iPos = i;
else if ('+' == strCplx[i] || '-' == strCplx[i])
{
signPos = i;
break;
}
}
if (0 == iPos) // 纯虚数i
{
cp->r = 0;
cp->i = 1;
}
else if (0 < iPos) // 复数
{
// 实部
if (0 < signPos)
{
memset(buf, 0, sizeof(MAX_BUF_LEN));
memcpy(buf, strCplx, signPos);
cp->r = atof(buf);
}
// 虚部
if (signPos + 1 == iPos) // 虚数部分 = -i / +i
cp->i = '+' == strCplx[signPos] ? 1 : -1;
else
{
memset(buf, 0, sizeof(MAX_BUF_LEN));
memcpy(buf, strCplx + signPos, iPos - signPos);
cp->i = atof(buf);
}
}
else // 实数
{
memset(buf, 0, sizeof(MAX_BUF_LEN));
memcpy(buf, strCplx, len);
cp->r = atof(buf);
}
return true;
}

static void Print(COMPLEX & cp)
{
if (0 != cp.i) // 复数
{
if (0 == cp.r) // 纯虚数
{
if (-1 == cp.i)
cout << "-i";
else if (1 == cp.i)
cout << "i";
else
cout << cp.i << "i";
}
else
{
// 实部
cout << cp.r;
// 虚部
if (-1 == cp.i)
cout << "-i";
else if (1 == cp.i)
cout << "+i";
else
{
if (0 < cp.i)
cout << "+";
cout << cp.i << "i";
}
}
}
else// 实数
cout << cp.r;
}
bool Parse(const char * strCp, const int len)
{
return ParseComplex(cp, strCp, len);
}
void Print()
{
Print(*cp);
}
Complex & operator = (const Complex & c)
{
cp->r = c.cp->r;
cp->i = c.cp->i;
return *this;
}
bool operator == (const Complex & c)
{
return c.cp->r == cp->r && c.cp->i == cp->i;
}
Complex  operator + (const Complex & c)
{
Complex tmp;
tmp.cp->r = cp->r + c.cp->r;
tmp.cp->i = cp->i + c.cp->i;
return tmp;
}
Complex  operator - (const Complex & c)
{
Complex tmp;
tmp.cp->r = cp->r - c.cp->r;
tmp.cp->i = cp->i - c.cp->i;
return tmp;
}
Complex  operator * (const Complex & c)
{
Complex tmp;
tmp.cp->r = cp->r * c.cp->r;
tmp.cp->i = cp->i * c.cp->i;
return tmp;
}
Complex  operator / (const Complex & c)
{
Complex tmp;
if (0 != c.cp->r && 0 != c.cp->i)
{
tmp.cp->r = cp->r / c.cp->r;
tmp.cp->i = cp->i / c.cp->i;
}
return tmp;
}

};


void main()
{
const int calCnt = 4;
const char calSimbol[calCnt][3] = { "+", "-", "*", "/" };
enum CALCULATIONS{ ADD , MINUS, MUL, DIV };
const int inputCpCnt = 2;
char strCp[inputCpCnt][MAX_BUF_LEN];
const int inputcp = calCnt;

Complex cp[calCnt + inputCpCnt];

while (1)
{
for (int i = 0; i < inputCpCnt; i++)
{
cout << "请输入第 " << i + 1 << "个复数: ";
cin >> strCp[i];
getchar();
if (!cp[inputcp + i].Parse(strCp[i], strlen(strCp[i])))
{
cout << "无效输入!" << endl;
continue;
}
}
cp[ADD] = cp[inputcp] + cp[inputcp + 1];
cp[MINUS] = cp[inputcp] - cp[inputcp + 1];
cp[MUL] = cp[inputcp] * cp[inputcp + 1];
cp[DIV] = cp[inputcp] / cp[inputcp + 1];

for (int i = 0; i < calCnt; i++)
{
cp[inputcp].Print();
cout <<" "<< calSimbol[i]<<" ";
cp[inputcp + 1].Print();
cout << " = ";
cp[i].Print();
cout << endl;
}
cp[inputcp].Print();
if (cp[inputcp] == cp[inputcp + 1])
cout << " == ";
else
cout << " != ";
cp[inputcp + 1].Print();
cout << endl;

};
}
弭平莹0Gn
2015-06-20 · TA获得超过214个赞
知道小有建树答主
回答量:1913
采纳率:0%
帮助的人:393万
展开全部
小型复数计算器设计你好 我能保证质量 。
追问
怎么设计
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式