• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 简单实现C++复数计算器

简单实现C++复数计算器

作者:Hseeker 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Hseeker 通过本文主要向大家介绍了c++复数计算器,c++复数类,c++复数运算,c++复数四则运算,c++用栈实现计算器等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

1.有关计算器的功能
 A,实现多个复数(包括实数)的加减乘除,大小比较, 
 B.实现十进制实数的进制转换,可以转换任意进制 

2.有关设计的原理
 A.复数计算的部分,采用运算符的重载,进行复数的加减乘除以及大小比较
 对于输入输出,(>>和<<),加减乘除运算进行重载。
 输入的重载,实现a+bi形式的复数的输入。
 输出的重载,实现实数的输出(实现特殊的只输出实部虚部之类的)。
 加减乘除的重载,实现有关复数的运算。
 B.进制转换的部分,采用进制转换的方法,实现10进制的任意进制转换。辗转相除,记录每次的余数,存储在数组中来记录转换得到的数字 

3.有关设计的特点
 A.采用函数对所实现功能进行封装。
 B.采用运算符的重载,使复数运算更加方便
 C.考虑所有的输入输出情况,对选择的操作,输入复数的类型等进行判断与相应的处理
 D.程序在完成以后,接受大家建议,规范代码格式,自己在制作过程有所收获也有所学习。

下面是有关代码的实现:

#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();
  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();
  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))
  {




 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 简单实现C++复数计算器

相关文章

  • 2017-05-28用标准c++实现string与各种类型之间的转换
  • 2017-05-28简单的汉诺塔问题解法代码
  • 2017-05-28C++概念重载、覆盖、隐藏的使用说明
  • 2017-05-28C++事件处理中__event与__raise关键字的用法讲解
  • 2017-05-28c++几种基本的插入排序(图文)
  • 2017-05-28简单介绍C++中变量的引用
  • 2017-05-28c语言合并两个已排序数组的示例(c语言数组排序)
  • 2017-05-28浅谈C++中派生类对象的内存布局
  • 2017-05-28大数(高精度数)模板(分享)
  • 2017-05-28详解C++编程中多级派生时的构造函数和访问属性

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c语言中字符串分割函数及实现方法
    • 字符串的组合算法问题的C语言实现攻略
    • 详解C++语言中的加法运算符与赋值运算符的用法
    • C++基本算法思想之穷举法
    • c语言实现多线程动画程序示例
    • C语言切割多层字符串(strtok_r strtok使用方法)
    • C语言之单链表的插入、删除与查找
    • 深入线性时间复杂度求数组中第K大数的方法详解
    • Cocos2d-x学习笔记之开发环境搭建
    • C语言实现的bitmap位图代码分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有