精华内容
下载资源
问答
  • 复数计算器

    2015-09-01 10:18:52
    用C++语法和类写成的复数计算器。实现两个复数的四则运算。
  • 本文实例为大家分享了简单实现C++复数计算器的具体代码,供大家参考,具体内容如下1.有关计算器的功能A,实现多个复数(包括实数)的加减乘除,大小比较,B.实现十进制实数的进制转换,可以转换任意进制2.有关设计的...

    本文实例为大家分享了简单实现C++复数计算器的具体代码,供大家参考,具体内容如下

    1.有关计算器的功能

    A,实现多个复数(包括实数)的加减乘除,大小比较,

    B.实现十进制实数的进制转换,可以转换任意进制

    2.有关设计的原理

    A.复数计算的部分,采用运算符的重载,进行复数的加减乘除以及大小比较

    对于输入输出,(>>和<

    输入的重载,实现a+bi形式的复数的输入。

    输出的重载,实现实数的输出(实现特殊的只输出实部虚部之类的)。

    加减乘除的重载,实现有关复数的运算。

    B.进制转换的部分,采用进制转换的方法,实现10进制的任意进制转换。辗转相除,记录每次的余数,存储在数组中来记录转换得到的数字

    3.有关设计的特点

    A.采用函数对所实现功能进行封装。

    B.采用运算符的重载,使复数运算更加方便

    C.考虑所有的输入输出情况,对选择的操作,输入复数的类型等进行判断与相应的处理

    D.程序在完成以后,接受大家建议,规范代码格式,自己在制作过程有所收获也有所学习。

    下面是有关代码的实现:

    #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<

    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

    {

    if(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

    {

    if((s[k] '9') && (s[k]!='+' && s[k]!='-' && s[k]!='i'))

    {

    cout<

    return is; //错误,输出出错信息并返回

    }

    }

    for(int k=0;k

    {

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

    {

    com.Real=sign*n; //sign是符号位,且n!=0,即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<

    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<

    {

    if(fabs(com.Image)

    os<

    else if((fabs(com.Real)

    os<

    else if(com.Image>0)

    os<

    else

    os<

    return os;

    }

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

    {

    CCom sum;

    sum.Real=Real+com.Real; //实部相加

    sum.Image=Image+com.Image; //虚部相加

    return sum;

    }

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

    {

    CCom sub;

    sub.Real=Real-com.Real; //实部相减

    sub.Image=Image-com.Image; //虚部相减

    return sub;

    }

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

    {

    CCom multi;

    multi.Real=Real*com.Real-Image*com.Image; //实部乘积

    multi.Image=Real*com.Image+Image*com.Real; //虚部乘积

    return multi;

    }

    CCom CCom::operator/(CCom &com) //除法重载

    {

    CCom div;

    div.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //实部除积

    div.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虚部除积

    return div;

    }

    CCom CCom::operator+=(CCom &com) //重载加法赋值

    {

    Real=Real+com.Real; //实部相加

    Image=Image+com.Image; //虚部相加

    return *this;

    }

    CCom CCom::operator-=(CCom &com) //重载减法赋值

    {

    Real=Real-com.Real; //实部相减

    Image=Image-com.Image; //虚部相减

    return *this;

    }

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

    {

    double nReal=Real*com.Real-Image*com.Image; //实部乘积

    double nImage=Real*com.Image+Image*com.Real; //虚部乘积

    Real=nReal;

    Image=nImage;

    return *this;

    }

    CCom CCom::operator/=(CCom &com) //重载除法赋值

    {

    double nReal=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //实部除积

    double nImage=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虚部除积

    Real=nReal;

    Image=nImage;

    return *this;

    }

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

    {

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

    return 1;

    else

    return 0;

    }

    void Add() //复数加法运算函数

    {

    CCom num1,num2,sum,Zero(0,0);

    cout<

    cout<

    cin>>num1;

    cout<

    cin>>num2;

    sum=num1+num2;

    cout<

    cin>>num1;

    int i=4;

    while(!(num1==Zero))

    {

    sum=sum+num1;

    cout<

    cin>>num1;

    i++;

    }

    cout<

    cout<

    cin.get();

    cin.get();

    }

    void Sub() //复数减法运算函数

    {

    CCom num1,num2,sub,Zero(0,0);

    cout<

    cout<

    cin>>num1;

    cout<

    cin>>num2;

    sub=num1-num2;

    cout<

    cin>>num1;

    int i=4;

    while(!(num1==Zero))

    {

    sub=sub-num1;

    cout<

    cin>>num1;

    i++;

    }

    cout<

    cout<

    cin.get();

    cin.get();

    }

    void Mul() //复数乘法运算函数

    {

    CCom num1,num2,mul,Zero(0,0);

    cout<

    cout<

    cin>>num1;

    cout<

    cin>>num2;

    mul=num1*num2;

    cout<

    cin>>num1;

    int i=4;

    while(!(num1==Zero))

    {

    mul*=num1;

    cout<

    cin>>num1;

    i++;

    }

    cout<

    cout<

    cin.get();

    cin.get();

    }

    void Div() //复数除法运算函数

    {

    CCom num1,num2,div,Zero(0,0);

    cout<

    cout<

    cin>>num1;

    cout<

    cin>>num2;

    div=num1/num2;

    cout<

    cin>>num1;

    int i=4;

    while(!(num1==Zero))

    {

    div/=num1;

    cout<

    cin>>num1;

    i++;

    }

    cout<

    cout<

    cin.get();

    cin.get();

    }

    void Compare() //两复数比较函数

    {

    CCom num1,num2;

    cout<

    cout<

    cin>>num1;

    cout<

    cin>>num2;

    if(num1==num2)

    cout<

    else if(num1>num2)

    cout<

    else if(num1

    cout<

    else

    cout<

    cout<

    cin.get();

    cin.get();

    }

    void Jinzhi() //实现进制转换

    {

    long n;

    int p,c,m=0,s[100];

    cout<

    cin>>n;

    cout<

    cin>>p;

    cout<

    while (n!=0)//数制转换,结果存入数组s[m]

    {

    c=n%p;

    n=n/p;

    m++;s[m]=c; //将余数按顺序存入数组s[m]中

    }

    for(int k=m;k>=1;k--)//输出转换后的序列

    {

    if(s[k]>=10) //若为十六进制等则输出相对应的字母

    cout<

    else //否则直接输出数字

    cout<

    }

    cout<

    cout<

    cin.get();

    cin.get();

    }

    void outpt()

    {

    char szName[20];

    cout<

    cin>>szName;

    system("cls");

    do

    {

    system("cls");

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    }

    }

    using namespace NameCCom;

    int main(void) //主函数开始,void可以不写

    {

    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则调用Di

    v()函数

    Div();

    else if(h==5) //用户选6则调用Compare()函数

    Compare();

    else if(h==6) //用户选7则调用函数Jinzhi()函数

    Jinzhi();

    else if(h==0)

    cout<

    else

    break;

    }

    return 0;

    }

    以上就是本文的全部内容,希望对大家学习C++程序设计有所帮助。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,009
精华内容 1,203
关键字:

复数计算器