C++课程设计报告(复数计算器)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京信息工程大学

《面向对象程序设计》课程设计实验报告

课程名:面向对象程序设计

专业:网络工程

班级:2班

作者:张煜荻、吴辉煌、张一东

日期:2011年5~6月

实验内容

题目:设计一个复数计算器。

要求:1)所设计的复数计算器可以进行+、-、×运算。2)设计输入重载函数,要求能接收从键盘输入a+b i形式的复数,在程序中可以识别出实部、虚部并进行赋值。3)设计算器测试程序,对加减法进行测试,要求在两位数以内,对乘法进行测试,乘法要求为一位数的运算。

小组分工

程序源码

#include

#include

#define EPS 1e-5//定义精度为10^-5

using namespace std;

namespace NameCalculator //定义空间NameCalculator

{

class Calculator //定义Calculator类

{

private:

double Real,Image; //私有成员:实部Real、虚部Image public:

Calculator(double real=0,double image=0) //构造函数

{

Real=real;

Image=image;

}

int operator==(Calculator &com); //等于重载

Calculator operator+(Calculator &com); //加法重载

Calculator operator-(Calculator &com); //减法重载

Calculator operator*(Calculator &com); //乘法重载

Calculator operator*=(Calculator &com);//乘法赋值重载

friend istream & operator>>(istream &is,Calculator &com); //输入重载

friend ostream & operator<<(ostream &os,Calculator &com); //输出重载};

int Calculator::operator==(Calculator &com) //重载等于

{

if(Real==com.Real && Image==com.Image)

return 1;

else

return 0;

}

Calculator Calculator::operator+(Calculator &com) //加法重载

{

Calculator sum;

sum.Real=Real+com.Real;

sum.Image=Image+com.Image;

return sum;

}

Calculator Calculator::operator-(Calculator &com) //减法重载

{

Calculator sub;

sub.Real=Real-com.Real;

sub.Image=Image-com.Image;

return sub;

}

Calculator Calculator::operator*(Calculator &com) //乘法重载

{

Calculator multi;

multi.Real=Real*com.Real-Image*com.Image;

multi.Image=Real*com.Image+Image*com.Real;

return multi;

}

Calculator Calculator::operator*=(Calculator &com) //重载乘法赋值{

double nReal=Real*com.Real-Image*com.Image;

double nImage=Real*com.Image+Image*com.Real;

Real=nReal;

Image=nImage;

return *this;

}

istream & operator>>(istream &is,Calculator &com) //重载输入{

cout<<"请输入复数:";

char s[20];

is>>s; //用字符串形式接受输入的复数

int len=strlen(s);

int n=0,sign=1;

com.Image=com.Real=0;

for(int k=0;k

{

if((s[k]<'0'||s[k]>'9')&&(s[k]!='+'&&s[k]!='-'&&s[k]!='i'))

{

cout<<"输入错误"<

return is;

}

}

for(k=0;k

{

if(n!=0 &&(s[k]=='-'||s[k]=='+')) //字符是否是符号

{

com.Real=sign*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,Calculator &com) //重载输出

{

相关文档
最新文档