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;            //使用标准空间命名stdnamespace 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;    //若大,则返回1elsereturn 0;    //否则,则返回0}int CCom::operator <(CCom &com)    //重载运算符"<",比较模的大小{if(mod() < com.mod())return 1;           //若小,则返回1elsereturn 0;           //否则,则返回0}int CCom::operator!=(CCom &com)   //重载运算符"!=",分别判断复数的实部和虚部{if(*this == com)return 0;           //若相等,则返回0elsereturn 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";    //如果不是,说明复数数据格式错误elsecom.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)       // 如果虚部为0os<<com.Real;          //只输出实部else if((fabs(com.Real) < EPS))   //如果实部为0os<<com.Image<<"i";    //只输出虚部else if(com.Image > 0)os<<com.Real<<"+"<<com.Image<<"i";elseos<<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;elsereturn 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";elsecout<<"这两个复数的模相等\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";elsebreak;}return 0;
}

c++简单复数计算器相关推荐

  1. c++复数计算器(四则运算+坐标模长、角度表示)

    用类实现的简单复数计算器 废话少说,直接上代码 #include <iostream> #include <math.h> #define PI acos(-1) using ...

  2. c++小项目练习之复数计算器

    准备了一个月的考试终于结束了.总结一下这一个月学到的理论知识,规划一下1月的计划.昨天敲了一天的代码.复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作.纯代码后面再做详 ...

  3. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  4. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  5. 计算器的程序代码java_java 简单的计算器程序实例代码

    java 简单的计算器程序 实现实例: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class c ...

  6. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  7. vue设置一个简单的计算器

    vue设置一个简单的计算器 <div id="app"><input type="text" v-model="n1"&g ...

  8. 【练习题】构造方法 编写Java程序,模拟简单的计算器。

    package day09; /*1.[练习题]构造方法 编写Java程序,模拟简单的计算器. 定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有.编写构造方法,赋予n1和n2初 ...

  9. java 简单的计算器程序,Java 简易计算器程序

    最近开始学习java,参考教科书写了一个简单的计算器程序,贴上来,以便有用的时候可以参考. 呵呵,哈哈!!! import java.awt.Container; import java.awt.Fl ...

  10. Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面

    2019独角兽企业重金招聘Python工程师标准>>> 目标:完成一个简单的计算器的界面,暂时不做点击处理,主要联系UI布局. 步骤: 1.创建一个空的windows phone 项 ...

最新文章

  1. PTA 基础编程题目集 7-17 爬动的蠕虫 C语言
  2. JavaScript数组方法大全(推荐)
  3. kdj值应用口诀_KDJ买卖绝学!记住这些操作 精准判断quot;顶部和底部quot; 让你远离亏损...
  4. python下 help()使用方法
  5. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案
  6. 跟我一起使用electron搭建一个文件浏览器吧
  7. 通俗理解决策树算法中信息增益的
  8. 简单网络聊天程序java_基于Java实现hello/hi简单网络聊天程序
  9. 权限控制_多租户系统设计之权限控制
  10. html5动画在线制作工具,KoolShow-KoolShow(HTML5动画制作工具) v2.4.4 官方版-CE安全网...
  11. SQL server 远程连接 1326错误
  12. centOs中安装 IF.SVNadmin 及SVN过程详细
  13. 基于Trie树实现拼音搜索自动补全
  14. EXFAT文件系统DBR的完美恢复
  15. WPF 通过Image控件实现多张图片的播放
  16. ie浏览器怎么打开html,win10ie浏览器不能打开html设置怎么办
  17. CxImage学习使用1:环境搭建
  18. 开启及清除NV_RESTORE信息的方法
  19. outlook仅限于此计算机如何解决,Outlook2013中IMAP方式已发送邮件、已删除邮件等文件夹注册失败...
  20. 如果大家看了我的tools专栏,里面的小工具有不少,我提炼出来给大家——变换控制台颜色

热门文章

  1. js怎样判断图片链接是否有效
  2. ArduinoProteus 8 Professional——(超声波检测传感器SRF04(距离检测))for Neuedu
  3. React高级(五)
  4. RStudio打开后空白的解决
  5. sql语句查询A表有而B表没有的数据
  6. 原生js的e.target.closest()方法
  7. 移动端触摸(touch)事件
  8. 东子破解的java设计模式状态模式
  9. GitHub使用官网指南之Hello World
  10. 利用div实现遮罩层效果