c++复数的手写输入 输入一个复数,输出他的实部和虚部 注意是手写输入最好是代码

 我来答
键盘未找到
2015-06-20 · TA获得超过328个赞
知道小有建树答主
回答量:403
采纳率:100%
帮助的人:263万
展开全部

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

typedef float REAL;
#define MAX_BUF_LEN 256

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

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

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;
}
int main()
{
char strCp[MAX_BUF_LEN];
COMPLEX * cp = (COMPLEX*)malloc(sizeof(COMPLEX));
while (1)
{
cin >> strCp;
getchar();
if(ParseComplex(cp, strCp, strlen(strCp)))
{
Print(*cp);
cout << endl;
}

}
free(cp);
}
追问
谢谢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式