C++课程设计报告(复数计算器)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) //重载输出 {