7.1设计并实现有理数库,使用整数表示分子和分母,完成有理数的加减乘除与化简运算

 1 //class_head.h
 2 class Complex
 3 {
 4 public:
 5        Complex()
 6        {molecules=0;denominator=0;}
 7        Complex(int n,int m);//对运算符的重载,c3默认会传第二个操作数的值,所以只要写一个参数//也可以这样的写法 Complex operator+(Complex &c2);
 8        Complex operator+(Complex c3);
 9        Complex operator-(Complex c3);
10        Complex operator*(Complex c3);
11        Complex operator/(Complex c3);
12        Complex input(Complex &c);//实现对私有成员的赋值操作
13        void output();
14 private:
15         int molecules;
16         int denominator;
17         void simplification();//化简
18 };
//class_yuan.cpp
#include<iostream>
using namespace std;
#include "class_head.h"
#include<cmath>
Complex::Complex(int n,int m)
{
molecules=n,denominator=m;
simplification();
}//使用了欧几里得算法(辗转相除法)利用两个数的公约数对于较小数与两数之间的余数的公约数
void Complex::simplification()
{
if(denominator<0)
{
molecules=-molecules;
denominator=-denominator;
}
int a=abs(molecules);//abs()是取绝对值,包含在头文件<cmath>里面
int b=abs(denominator);
while(b>0)
{
int t=a%b;
a=b;
b=t;
}
molecules=molecules/a;
denominator=denominator/a;
}
Complex Complex::operator+(Complex c3)
{
int a=molecules;
int b=denominator;
int c=c3.molecules;
int d=c3.denominator;
int e=a*d+b*c;
int f=b*d;
return Complex(e,f);
}
Complex Complex::operator-(Complex c3)
{
c3.molecules=-c3.molecules;
return operator+(c3);
}
Complex Complex::operator*(Complex c3)
{
int a=molecules;
int b=denominator;
int c=c3.molecules;
int d=c3.denominator;
int e=a*c;
int f=b*d;
return Complex(e,f);
}
Complex Complex::operator/(Complex c3)
{
int t=c3.molecules;
c3.molecules=c3.denominator;
c3.denominator=t;
return operator*(c3);
}
Complex Complex::input(Complex &c)
{
int a,b;
cout<<"输入分子 ";
cin>>a;
cout<<"输入分母 ";
cin>>b;
molecules=a;
denominator=b;
return c;
}
void Complex::output()
{
if(molecules%denominator==0)
cout<<molecules/denominator;
else
cout<<molecules<<"/"<<denominator;
}

  

//main()
#include<iostream>
using namespace std;
#include "class_head.h"
int main()
{
int i;
Complex c1,c2,c3;
cout<<"¥¥输入第一个操作数¥¥"<<endl;
c1.input(c1);
cout<<"¥¥输入第二个操作数¥¥"<<endl;
c2.input(c2);
cout<<"请选择要进行的操作"<<endl;
cout<<"1表示+法"<<endl;
cout<<"2表示-法"<<endl;
cout<<"3表示*法"<<endl;
cout<<"4表示/法"<<endl;
cin>>i;
switch(i)
{
case 1:
c3=c1+c2;
cout<<"进行加法之后的结果为:"<<endl;
cout<<"结果等于:";
c3.output();
cout<<endl;
break;
case 2:
c3=c1-c2;
cout<<"进行减法之后的结果为:"<<endl;
cout<<"结果等于:";
c3.output();
cout<<endl;
break;
case 3:
c3=c1*c2;
cout<<"进行乘法之后的结果为:"<<endl;
cout<<"结果等于:";
c3.output();
cout<<endl;
break;
case 4:
c3=c1/c2;
cout<<"进行除法之后的结果为:"<<endl;
cout<<"结果等于:";
c3.output();
cout<<endl;
break;
}
return 0;
}

  

原文地址:https://www.cnblogs.com/chenzinumber1/p/8275008.html

时间: 2024-10-19 04:19:50

7.1设计并实现有理数库,使用整数表示分子和分母,完成有理数的加减乘除与化简运算的相关文章

泛函编程(18)-泛函库设计-并行运算组件库

作为专业的编程人员,我们经常会因为工作需要建立一些工具库.所谓工具库就是针对工作上经常会遇到的一些共性问题预先编制的由一整套函数所组成的函数库.通常这些工具库的功能都是在特别定制的一些数据类型支持下由一系列函数围绕着这些数据类型进行运算而实现的.在泛函编程范畴内也不例外.但在泛函工具库里的函数则更重视函数的组合能力(functional composition):因而泛函的工具库一般称为组件库(combinator library),库内函数则被称之为组件(combinator).组件库的设计者

练习1:python设计停车入库出库系统

前言: 最近在某个测试群看到有人抛出了一个面试题.为了提升自己的编程能力,我也尝试的用python去写了一下. 语言:python,数据库:sqlite  .菜鸟来袭,只是基本实现功能,可能没有考虑太多的其他因素,各位大神莫见笑! 主要学习渠道(基础入门): https://www.runoob.com/sqlite/sqlite-create-table.html https://www.runoob.com/python3/python3-basic-syntax.html 题目:设计一个简

【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔(2019-07-21)

说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.本次工程延续以往的代码风格,从底层BSP驱动包到应用代码,变量命名,文件命名,程序框架,注释等都比较规范,大家阅读或者移植都会比较方便.      另外,阅读代码时,务必将编辑器的缩进参数和TAB设置为4来阅读本文件,否则显示不整齐. 3.本教程每周会继续更新1-2章,之后将开启配套的视频教程制作,加大对初学者的支持力度. 4.V5,V6,V7将通过这次升级,达到底层驱

Swift中如何化简标准库中冗长的类实例初始化代码

可能有些童鞋并不知道,在Swift中缩写点符号对于任何类型的任何static成员都有效. 我们实际写一个例子看一下: import UIKit class CFoo{ static let sharedInstance = CFoo() } struct SFoo{ static let sharedInstance = SFoo() } let foo:CFoo = .sharedInstance let f:SFoo = .sharedInstance 以上代码中可以看到,foo类型为CFo

设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。(Java语言)

这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要提供以下的功能: double toDouble(); 将分数转换为double Fraction plus(Fraction r); 将自己的分数和r的分数相加,产生一个新的Fraction的对象.注意小学四年级学过两个分数如何相加的哈. Fraction multiply(Fraction r); 将自己的分数和r的分数相乘,产生一个新的Fraction的对象. void print(); 将

20175126Apollo 20175126《Java程序设计》结队编程项目——四则运算 第一周阶段总结

结队编程项目——四则运算 一.项目需求 自动生成小学四则运算题目(加.减.乘.除)统计正确率 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 需求分析: 生成四则运算:需要使用随机数生成,需要创造一个能实现计算功能的类. 支持多运算符:运算符也需要利用随机生成,并且不限个数. 支持真分数:需要用到生成分子.分母的函数,将分数化简等. 统计正确率:需要设置一个计算变量,并需要用一个判断正确的函数. 二.设计思路 首先根据需求分析,进行大体的设计: 生成题目→输入答案→判断正

数据结构及算法答案

1.1 简述下列术语:数据,数据元素.数据对象.数据结构.存储结构.数据类型和抽象数据类型. 解:数据是对客观事物的符号表示.在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称.     数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理.     数据对象是性质相同的数据元素的集合,是数据的一个子集.     数据结构是相互之间存在一种或多种特定关系的数据元素的集合.     存储结构是数据结构在计算机中的表示.     数据类型是一个值的集合和定义在这个

[转]100个经典C语言程序(益智类问题)

目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 1.7 分数四则运算 17.平分七筐鱼 18.有限5位数 19. 8 除不尽的数 21.4位反序数 22.求车速 23.阿姆斯特朗数 24.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+c

软件工程概论作业03--将随机产生的表达式导入数据库

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Random; import java.util.Scanner; import java.util.Stack; public class Size { publ