分数计算器(C++课设)
需求概述
(1)设计一个分数计算器,进行分数的算术运算和逻辑运算。
(2)能够像使用基本数据的对象一样,对分数进行“+”、“-”、“*”和“/”等算术运算和比较两个分数的大小。
(3)以a/b的形式输入输出分数,允许输入输出整数这种特殊形式。
(4)对不是约化型的分数进行约化,避免分母为负数。
(5)如果分数的分母为0、除数为0或输入时格式有错,采用异常处理机制解决。
输入
以分数的形式输入。(如1/2)
若分母为0会抛出异常,重新输入。
菜单页面
RationalNumber.h(头文件)
#ifndef RATIONAL_NUMBER_H
#define RATIONAL_NUMBER_Hclass RationalNumber
{public:RationalNumber( int = 0, int = 1 ); // 默认构造函数RationalNumber &operator+(const RationalNumber&);RationalNumber operator-(const RationalNumber&);RationalNumber operator*(const RationalNumber&);RationalNumber operator/(const RationalNumber&);// 关系运算符bool operator>(const RationalNumber&)const;bool operator<(const RationalNumber&)const;bool operator>=(const RationalNumber&)const;bool operator<=(const RationalNumber&)const;// 判等运算符bool operator==(const RationalNumber&)const;bool operator!=(const RationalNumber&)const;void printRational() const; // 以分数形式显示
private:int numerator; // 私有变量 分子int denominator; //私有变量 分母void reduction(); // 分数约分
}; // end class RationalNumber#endif
RationalNumber.cpp
#include <cstdlib>
#include <iostream>
using namespace std;#include "RationalNumber.h"// RationalNumber 构造函数设置a和b并经行约分
RationalNumber::RationalNumber(int a, int b)
{if (b <= 0)b = 1;numerator = a;denominator = b;reduction();
}
//重载+运算符
RationalNumber &RationalNumber::operator+(const RationalNumber &right)
{RationalNumber temp;if(denominator==right.denominator){temp.numerator=numerator+right.numerator;temp.denominator=denominator;}else{temp.numerator=numerator*right.denominator+denominator*right.numerator;temp.denominator=denominator*right.denominator;}temp.reduction();return temp;
}
// 重载-运算符
RationalNumber RationalNumber::operator-(const RationalNumber& right)
{RationalNumber temp;if(denominator==right.denominator){temp.numerator=numerator-right.numerator;temp.denominator=denominator;}else{temp.numerator=numerator*right.denominator-denominator*right.numerator;temp.denominator=denominator*right.denominator;}temp.reduction();return temp;
}
// 重载 * 运算符
RationalNumber RationalNumber::operator*(const RationalNumber& right)
{RationalNumber temp;temp.numerator=numerator*right.numerator;temp.denominator=denominator*right.denominator;temp.reduction();return temp;
}
// 重载 / 运算符
RationalNumber RationalNumber::operator/(const RationalNumber& right)
{RationalNumber temp;if(right.numerator==0)cout<<"denominator cannot be 0"<<endl;else{temp.numerator=numerator*right.denominator;temp.denominator=denominator*right.numerator;}temp.reduction();return temp;
}
// 重载 > 运算符
bool RationalNumber::operator>(const RationalNumber& right)const
{double a=numerator/denominator;double b=right.numerator/right.denominator;return a>b;
}
// 重载 < 运算符
bool RationalNumber::operator<(const RationalNumber& right)const
{return !(*this>=right);
}
// 重载 >= 运算符
bool RationalNumber::operator>=(const RationalNumber& right)const
{return (*this>right||*this==right);
}
//重载 <= 运算符
bool RationalNumber::operator<=(const RationalNumber& right)const
{return !(*this>right);
}
// 重载 == 运算符
bool RationalNumber::operator==(const RationalNumber& right)const
{double a=numerator/denominator;double b=right.numerator/right.denominator;return a==b;
}
// 重载 != 运算符
bool RationalNumber::operator!=(const RationalNumber& right)const
{return !(*this==right);
}
// printRational 函数
void RationalNumber::printRational() const
{if ( numerator == 0 ) // 将分数打印为0cout << numerator;else if ( denominator == 1 ) // 将分数打印为整数cout << numerator;elsecout << numerator << '/' << denominator;
} // end function printRational// 约分函数
void RationalNumber::reduction()
{int largest, gcd = 1; // 最大公约数largest = ( numerator > denominator ) ? numerator: denominator;for ( int loop = 2; loop <= largest; loop++ )if ( numerator % loop == 0 && denominator % loop == 0 )gcd = loop;numerator /= gcd;denominator /= gcd;
} // end function reduction
main.cpp
这里的循环写的太恶心了,时间复杂度直接爆炸,暂时还没想到好的解决办法(其实就是懒的改)
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;#include "RationalNumber.h"int main()
{cout << "欢迎使用分数计算器" << endl;while (1){int above, blow; //分子分母cout << endl;cout << "请输入第一个分数:" << endl;while (1){cin >> above;getchar(); //吃“/”符号cin >> blow;try{if (blow == 0)throw - 1; //抛出int类型异常else{cout << "该分数为:" << endl;break;}}catch (int){cout << "分母不能为0,请重新输入" << endl; //异常处理cout << endl;}}RationalNumber a(above, blow); //将分子分母存储为RationalNumber类a.printRational();cout << endl;cout << endl;RationalNumber x;int select;while (1){system("pause");system("cls");cout << setw(20) << "==========================" << endl;cout << setw(20) << "1. 加法运算" << endl;cout << setw(20) << "2. 减法运算" << endl;cout << setw(20) << "3. 乘法运算" << endl;cout << setw(20) << "4. 除法运算" << endl;cout << setw(20) << "5. 关系判别" << endl;cout << setw(20) << "6. 重新输入" << endl;cout << setw(20) << "0. 退出 " << endl;cout << setw(20) << "==========================" << endl;cout << setw(20) << "请输入菜单项" << endl;cin >> select;if (select == 6)break;if (select == 0)return 0;cout << endl;cout << "请输入第二个分数:" << endl;while (1){cin >> above;getchar();cin >> blow;try{if (blow == 0)throw - 1; //抛出int类型异常else{cout << "该分数为:" << endl;break;}}catch (int){cout << "分母不能为0,请重新输入" << endl;cout << endl;}}RationalNumber b(above, blow);b.printRational();cout << endl;switch (select){case 1:x = a + b;cout << endl;cout << "相加结果为: ";a.printRational();cout << "+";b.printRational();cout << "=";x.printRational();a = x;cout << endl;cout << endl;break;case 2:x = a - b;cout << endl;cout << "相减结果为: ";a.printRational();cout << "-";b.printRational();cout << "=";x.printRational();a = x;cout << endl;break;case 3:x = a * b;cout << endl;cout << "相乘结果为: ";a.printRational();cout << "*";b.printRational();cout << "=";x.printRational();a = x;cout << endl;cout << endl;break;case 4:x = a / b;cout << endl;cout << "相除结果为: ";a.printRational();cout << "/";b.printRational();cout << "=";x.printRational();a = x;cout << endl;cout << endl;break;case 5:cout << endl;cout << "判定结果为: ";cout << endl;a.printRational();cout << ((a > b) ? " > " : " <= ");b.printRational();cout << endl;a.printRational();cout << ((a != b) ? " != " : " == ");b.printRational();cout << endl;cout << endl;break;case 6:break;case 0:return 0;}}}
} // end main
分数计算器(C++课设)相关推荐
- C51简易计算器微机课设
目前实现功能: 1.末尾数置0 2.加减乘的五位数计算 3.计算结果溢出时,报错"ERROR" 4.有删除键 #include <REGX52.H> int digit ...
- 一元稀疏多项式计算器 【 数据结构课设作业 】 带界面,无bug,可以直接运行
一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立多项式. (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,-,cn,en,其中n是多项式 ...
- Java课设-百行代码实现简易计算器
成绩: __________ Java程序设计 工程实践 --简易计算器的设计 院. 系 计算机与软件学院 专业 信息安全 姓 名 指导教师 2022年 6 月 11 日 目录: 一. 设计简介 2 ...
- 计算机组成原理设计一个累加和,组成原理课设关于累加器.doc
组成原理课设关于累加器 沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:计算机组成原理课程设计 课程设计题目:COP2000实现数据累加 院(系):计算机学院 专 业:计算机科学与技术 班 级 ...
- c语言学生成绩查询课设报告,C语言课设报告(学生考试成绩查询程序)【荐】.doc...
C语言课设报告(学生考试成绩查询程序)[荐].doc 学生考试成绩查询程序 学号:******** 姓名:***** 完成日期:****年月 通过键盘输入学生的考试信息,包括:学号.姓名.课程名称.学 ...
- 分数计算器java报告_20182307 2019-2020-1 《数据结构与面向对象程序设计》实验四报告...
20182307 2019-2020-1 <数据结构与面向对象程序设计>实验四报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 陆彦杰 学号:20182307 实验 ...
- c语言学生学籍管理修改,C语言课设之学生学籍管理系统.doc
C语言课设之学生学籍管理系统.doc 题目学生学籍管理系统 目录一.个人简介.二.报告摘要.三.报告目录.四.报告正文. 1.系统需求分析 2.系统总体设计 3.系统详细设计六.总结. 二.报告摘要 ...
- QT五子棋游戏课设及源码(连接mysql数据库含打开并运行程序的教程)
gdut大一下学期c++课设(得分:95) 实验报告及源码压缩包百度云下载: 链接:https://pan.baidu.com/s/1zO5ofMz09fiWihxCcZcFbg 提取码:ddav 首 ...
- 大学期间所有课设及大作业源代码
程序员练成记 出处:牟尼的专栏 http://blog.csdn.net/u012027907 记得刚上大一时,那时对这个专业(软件工程)很陌生,甚至对电脑都很陌生,有时还有点儿害怕,因为我在进入大学 ...
最新文章
- Boost boost_1_63_0安装 gcc4.8 gcc5.4
- unity3d世界坐标系和本地坐标系
- Jenkins-Pipeline 流水线发布
- 像素级复制!荣威R品牌“撞车”小鹏P7剪刀门,还是手动的?
- Spring Security Oauth2 之密码模式
- 栈Stack的相关操作(java)
- java并发学习--线程池(一)
- 银联网关支付接口规范
- 手把手教如何制作数字证书并进行程序的数字签名
- wincc远程服务器配置,如何配置WINCC作为OPC服务器?
- 开源推荐:可用于生产的java聚合支付系统
- java的重载和重写实例_java中重写和重载的区别
- network secruity studay day3
- 人工智能兴起的条件_跟我说规矩。 AI受虐狂的兴起
- PostgreSQL 13新特性:fetch first with ties
- r语言是高级编程语言_什么是R编程?
- IDEA中 单元测试@Test的使用
- 罗技推出可蓝牙连接的5.1环绕立体声扬声器
- Sybase ASE 查询当前版本和所有数据库
- UC Berkeley AI Project -MindsDB 学习
热门文章
- 最流行的双线水平条形图,怎么画的?Horizontal bar chart by python and matplotlib
- python加权求和_在Python中计算加权的成对距离矩阵
- Tikhonov正则化选取的方法
- 抖音快手最新版抓包模块免费送
- Python - SciPy - ECG信号的谱分析及数字滤波
- python——一个投票器
- 如何更改手机屏幕上的待机快捷键...
- 简单的建立一个网络电视直播软件
- 华硕无畏Pro14和 联想小新pro14参数对比 哪个好
- PB级区块链开源存储引擎“泓”Huge