用C语言编程复数计算器,简单实现C++复数计算器
本文实例为大家分享了简单实现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++程序设计有所帮助。
用C语言编程复数计算器,简单实现C++复数计算器相关推荐
- AI Studio下C语言编程:一道简单的C语言作业题目
简 介: 本文测试了在 AI Studio中进行C语言编程的过程.使用与 搭建AI Studio 中Python开发环境 同样的 "AIS" python文件,可以在Windows ...
- c语言程序设计四则运算,用C语言编程实现一个简单的四则运算计算器
满意答案 dwjn1d8qqu7 2013.12.31 采纳率:42% 等级:11 已帮助:10300人 #include //函数,读数操作数 int getNextNum() { int r ...
- c++和c语言的区别_C语言编程篇·····最简单的C语言程序
C 语言的发展方向C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处 ...
- C语言编程猜谜语,简单的谜语大全及答案
谜面是灯谜的主要部分,是猜谜时以隐语的形式表达描绘形象.性质.功能等特征,供人们猜射的说明文字.下面是学习啦小编为大家带来的关于简单的谜语大全及答案的内容,希望你们喜欢. 谜语合集一 明又明,亮又亮, ...
- 键盘查询方式的c语言编程,求助大佬简单的单片机键盘c语言编程问题
异组端口组成4*4矩阵键盘的端口状态读写方法 #include #define uint unsigned int //宏定义数据类型uint #def ...
- c语言设计程序计算器,C语言程序设计,做一个简单计算器
题目: C语言程序设计,做一个简单计算器 程序内容有:加减乘除和平方,立方,开方等.用if或者swith结构来编程. 算加法时只输出加法的结果,算减法时只出减法的结果,如此类推. 解答: 已发送, # ...
- java三子棋人机游戏_C语言编程入门游戏《三子棋》
经过C语言初级阶段的系统学习,对基本C语言的知识有了一定的了解和认识,能够通过C语言编程解决一些简单的问题.本次完成一个简单的游戏<三子棋>. 游戏简介:常见的3x3棋盘,有两名游戏玩家, ...
- c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。
题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...
- 简易计算机课程设计总结,C语言课程设计报告简单计算器程序
C语言课程设计报告简单计算器程序 (26页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 24.9 积分 .课程设计名称:C语言课程设计课程设计题目:简单 ...
- python简单编程-编程中最简单的语言Python,这样学或许更容易
最近微信小程序上面出了一个跳一跳的小游戏 大家有没有玩呀? 编程中最简单的语言Python,这样学或许更容易 分享之前我还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Py ...
最新文章
- 一个比特币要挖多久?
- Python正则表达式 re.sub()函数:标志位flags与参数个数问题
- aop简介-aop开发明确的事
- 深度学习之非极大值抑制(Non-maximum suppression,NMS)
- 实时计算 Flink 版 最佳实践
- Springboot遇到的问题
- 爆款入门 | 第 14 期微生物组-扩增子16S分析和可视化(线上/线下同时开课,2022.4)...
- Android应用程序组件
- 19) maven 项目结构:聚集
- 成像反了_宋国荣, 窦致夏:快速超声 C 扫描成像中的信号频域分析法及其应用...
- 千个Excel文件合并为一个文件
- most_common()函数源码解读
- 【抢头条】迄今最全的无刷电机工作及控制原理分享-绝对...!
- dnf超时空漩涡副本路线流程图_DNF超时空漩涡怎么打
- 【C语言】输出百分号“%”
- 老男孩之《生日快乐》
- 【Ubuntu小工具安装】
- shell语言简单学习
- 在cmd中使用start运行exe文件闪退问题
- 柱状图标签在柱的上方怎么进行展示
热门文章
- 使用C#创建快捷方式
- Android自动化测试框架Robotium
- oracle11 ssd 补丁,新装Oracle 11gR2 11.2.0.2重要说明——Patchset p10098816(附补丁下载地址).docx...
- 给非天才准备的 GRE 单词背诵方案
- 移动开发技术(Android)——实验1 Android开发环境搭建及简单程序实现
- html半透明遮罩,div半透明遮罩效果
- 免费个人简历模板、PPT模板网址大全
- 关于Windows mobile设备中心,同步软件不出现,打开卡住问题的解决
- Installshield 静默安装
- ET Reporter