c++简单复数计算器

1.有关计算器的功能

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

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

2.有关设计的原理

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

对于输入输出,(>>和<<),加减乘除运算进行重载。

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

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

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

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

3.有关设计的特点

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

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

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

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

1,登录界面:

2,实现界面:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <ctime>

#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 <<(ostream &os, 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);                            //乘法赋值重载
     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 <(CCom &com)    //重载运算符"<",比较模的大小
  {
    if(mod() < com.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<len;k++)   //判断接受的字符串是否合法
    {
      if((s[k]<‘0‘ || s[k]> ‘9‘) && (s[k]!=‘+‘ && s[k]!=‘-‘ && s[k]!=‘i‘))
      {
        cout<<"error"<<endl;
        return is;          //错误,输出出错信息并返回
      }
    }
    for(int k = 0; k < len;)     //顺序识别字符串中各字符
    {
      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<<"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,CCom &com)  //重载输入
  {
    if(fabs(com.Image) < EPS)       // 如果虚部为0
      os<<com.Real;          //只输出实部
    else if((fabs(com.Real) < EPS))   //如果实部为0
           os<<com.Image<<"i";    //只输出虚部
         else if(com.Image > 0)
                os<<com.Real<<"+"<<com.Image<<"i";
              else
                os<<com.Real<<com.Image<<"i";    //虚部为正
    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<<"加法计算\n"<<"最少输入两个复数,并且以0结束\n";
     cout<<"第一个复数:";
     cin>>num1;
     cout<<"第二个复数:";
     cin>>num2;
     sum=num1+num2;
     cout<<"第三个复数:";
     cin>>num1;
     int i=4;
     while(!(num1==Zero))
     {
       sum=sum+num1;
       cout<<"第"<<i<<"个复数:";
       cin>>num1;
       i++;
     }
     cout<<"加法结果是:"<<sum<<endl;
     cout<<"请按任意键继续\n";
     cin.get();
}

void Sub()         //复数减法运算函数
{
     CCom num1,num2,sub,Zero(0,0);
     cout<<"最少输入两个复数,并且以0结束\n";
     cout<<"第1个复数:";
     cin>>num1;
     cout<<"第2个复数:";
     cin>>num2;
     sub=num1-num2;
     cout<<"第3个复数:";
     cin>>num1;
     int i=4;
     while(!(num1==Zero))
     {
         sub=sub-num1;
         cout<<"第"<<i<<"个复数:";
         cin>>num1;
          i++;
     }
     cout<<"减法结果是:"<<sub<<endl;
     cout<<"请按任意键继续\n";
     cin.get();
}

void Mul()                     //复数乘法运算函数
{
     CCom num1,num2,mul,Zero(0,0);
     cout<<"乘法计算\n"<<"最少输入两个复数,并且以0结束\n";
     cout<<"第一个复数:";
     cin>>num1;
     cout<<"第二个复数:";
     cin>>num2;
     mul=num1*num2;
     cout<<"第三个复数:";
     cin>>num1;
     int i=4;
     while(!(num1==Zero))
     {
         mul*=num1;
         cout<<"第"<<i<<"个复数:";
         cin>>num1;
         i++;
     }
     cout<<"乘法结果是:"<<mul<<endl;
     cout<<"请按任意键继续\n";
     cin.get();
}

void Div()                     //复数除法运算函数
{
     CCom num1,num2,div,Zero(0,0);
     cout<<"除法计算\n"<<"最少输入两个复数,并且以0结束\n";
     cout<<"第一个复数:";
     cin>>num1;
     cout<<"第二个复数:";
     cin>>num2;
     div=num1/num2;
     cout<<"第三个复数:";
     cin>>num1;
     int i=4;
     while(!(num1==Zero))
     {
        div/=num1;
        cout<<"第"<<i<<"个复数:";
        cin>>num1;
        i++;
     }
     cout<<"除法结果是:"<<div<<endl;
     cout<<"请按任意键继续\n";
     cin.get();
}

void Compare()                //两复数比较函数
{
      CCom num1,num2;
      cout<<"请输入两个复数\n";
      cout<<"第一个复数:";
      cin>>num1;
      cout<<"第二个复数\n";
      cin>>num2;
      if(num1==num2)
        cout<<"这两个复数相等\n";
      else if(num1>num2)
        cout<<num1<<"的模大于"<<num2<<"的模\n";
      else if(num1<num2)
        cout<<num2<<"的模大于"<<num1<<"的模\n";
      else
        cout<<"这两个复数的模相等\n";
      cout<<"请按任意键继续\n";
      cin.get();
}

void Jinzhi()                //实现进制转换
{
        long n;
        int p,c,m=0,s[100];
        cout<<"输入要转换的数字:\n";
        cin>>n;
        cout<<"输入要转换的进制:\n";
        cin>>p;
        cout<<"("<<n<<")10="<<"(";

        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<<(char)(s[k]+55);
            else         //否则直接输出数字
            cout<<s[k];
        }
        cout<<")"<<p<<endl;
        cout<<"请按任意键继续\n";
        cin.get();
}

void outpt()
{
   char szName[20];
   cout<<"请输入您的姓名:";
   cin>>szName;
   system("cls");
   do
    {
      system("cls");
      cout<<"\t这是一个计算器,可实现以下功能,请按对应的按键(0-6)\n\n\n";
      cout<<"\t*----------Hpioneer小计算器菜单---------*\n";
      cout<<"\t|      1:多个复数加法,以0结束          |\n";
      cout<<"\t|      2:多个复数减法,以0结束          |\n";
      cout<<"\t|      3:多个复数乘法,以0结束          |\n";
      cout<<"\t|      4:多个复数除法,以0结束          |\n";
      cout<<"\t|      5:复数比较                       |\n";
      cout<<"\t|      6:进制转换                       |\n";
      cout<<"\t|      0:退出程序                       |\n";
      cout<<"\t|      请您选择:                        |\n";
      cout<<"\t*---------------------------------------*\n";
}

}

using namespace NameCCom;

int main() //主函数
{
    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则调用Div()函数
        Div();
    else if(h == 5)     //用户选6则调用Compare()函数
        Compare();
    else if(h == 6)  //用户选7则调用函数Jinzhi()函数
        Jinzhi();
    else if(h == 0)
        cout<<"非常感谢您的使用\n";
    else
        break;
    }
  return 0;
}
时间: 2024-10-10 15:10:32

c++简单复数计算器的相关文章

JS实现一个简单的计算器

使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择框的值. 提示:document.getElementById( id名 ).value 获取或设置 id名的值. 第三步: 获取通过下拉框来选择的值来改变加减乘除的运算法则. 提示:使用switch判断运算法则. 第四步:  通过 = 按钮来调用创建的函数,得到结果. 注意: 使用parseInt

留念 C语言第一课简单的计算器制作

学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h>  #include<stdlib.h> #include<conio.h>void displayMenu();void add();void sub();void multiply();void divide();void yushu();void jiecheng();void leijia();void jiechengleijia();int main(in

最简单的计算器脚本

看过老男孩的视频,感触颇深啊,老师的思想真不是一般人可以想到的,来看看老男孩老师的超简单的计算器脚本吧 #!/bin/sh echo $(($1)) 大家都知道$(())中间小括号里面的内容可以被外面括号当作运算来输出,但是知道以上的方式的人有多少呢??? 脚本应用 [[email protected] scripts]# cat 1.sh  #!/bin/sh echo $(($1)) [[email protected] scripts]# sh 1.sh 10*10 100 [[email

利用树莓派实现简单的计算器

在实验板上实现一个简单的计算器,要求在实验板的命令行运行程序,输入两个100以内的数字以及运算符 (+,-,*,/),然后计算结果并在数码管上显示计算结果. 电路设计如下: 实物连接: 代码如下: #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #define DIGIT1 9 #define DIGIT2 13 #define DIGIT3 12 #define DIGIT4 8 #define

VS2012中使用MFC制作简单的计算器

用MFC来制作一个简单的计算器,来加深对MFC学习的理解,这个计算器是建立在对话框的基础上,下面来简单介绍下如何制作属于你自己的计算器 1.首先,点击VS2012,启动VS软件,然后建立如下图所示的应用程序,在图的下面输入项目名 2.建立基于对话框的标准程序,如下图所示,其余设置采用系统设置,点击完成 3.如下图,软件会生成下面的对话框,还有相应的库,代码,资源文件等 4.对上面的对话框进行编辑,如下图中所示,最后编辑的样子如下,其中1,5,6是Edit 控件,2,7是静态控件,3是buttio

教学项目之-通过Python实现简单的计算器

教学项目之-通过Python实现简单的计算器 计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2

IOS 开发笔记-基础 UI(1)-简单的计算器

(1)UI是App的根基:一个App应该是先有UI界面,然后在UI的基础上增加实用功能 (2)UI相对简单易学:UI普遍是学习过程中最简单的一块,能快速拥有成就感和学习兴趣 (3)UI至关重要:开发中的绝大部分时间都在处理UI 谨记一条IOS软件开发定律:万物皆对象,UI界面上的每一个元素都是一个对象 IOS,android 软件开发过程 UIKit框架是跟UI有关系的,标签,文本,按钮,进度条,开关等控件,都是封装在UIKit框架内部的,UIKit框架中提供了丰富多彩的可视化组件元素,利用UI

使用JS完成一个简单的计算器功能

使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElementById("id").value = 1: 取值:var = document.getElementById("id").value: 任务 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择框的值. 提示:document.getElement

Swift之旅:1.概述-用Swift实现一个简单的计算器

学习所用到的资源: 斯坦福大学公开课:iOS 8开发 网易空开课地址链接:斯坦福大学公开课:IOS8开发 github上字幕链接:字幕 百度网盘资源下载链接:百度网盘 1.详解IOS编程的四个层 ①cocoa touch层 这是我们最长用到的层,里面最长用到的当然是最基础的控件 ②媒体层(Media) ③核心服务层 ④核心操作系统层 2.新建一个Swift的IOS工程 ①打开Xcode,按照图示新建一个工程 ②选择Application 然后 单击Sigle View Application.