分数的各种运算

来源:互联网 发布:嵌入式算不算人工智能 编辑:程序博客网 时间:2024/04/29 07:36
/** 程序的版权和版本声明部分* Copyright (c)2012, 烟台大学计算机学院学生* All rightsreserved.* 文件名称: object.cpp* 作者:隋 鑫* 完成日期: 2013 年 3 月 29 日* 版本号: v1.0* 输入描述:无* 问题描述:* 程序输出:*/#include<iostream>#include <Cmath>using namespace std;class CFraction{private:int nume;  // 分子int deno;  // 分母 public:CFraction(int nu=0,int de=1);   //构造函数,初始化用void set(int nu=0,int de=1);//置值,改变值时用void input();//按照"nu/de"的格式,如"5/2"的形式输入void simplify();//化简(使分子分母没有公因子)void amplify(int n);//放大n倍,如2/3放大5倍为10/3void output(int style=0);//输出:以8/6为例,style为0时,原样输出8/6;//style为0时,输出化简后形式4/3;//style为1时,输出1(1/3)形式,表示一又三分之一;                            //style为2时,用小数形式输出,如1.3333                            //不给出参数和非1、2,认为是方式0};CFraction::CFraction(int nu, int de){nume=nu;deno=de;}void CFraction::input(){    char c;cout<<"请输入分数(格式nume/deno):";while(1){cin>>nume>>c>>deno;if(c!='/')cout<<"格式不正确,请重新输入:"<<endl;elsebreak;}}void CFraction::simplify(){      int t,r,x,y,n,d;  x=nume;  y=deno;      if (y>x)  {t=x;x=y;y=t;  } while((r=x%y)!=0) {x=y;y=r; }n=nume/y;d=deno/y;cout<<"化简为最简形式为:"<<n<<"/"<<d<<endl;}void CFraction::amplify(int n){int x,y;x=nume;y=deno;x*=n;cout<<"放大"<<n<<"倍后为:"<<x<<"/"<<y<<endl;}void CFraction::output(int style){double m;int x,y,z=0;x=nume;y=deno;if(style==0||style>2) cout<<"原样输出为:"<<x<<'/'<<y<<endl;    else if(style==1){while(x>=y){x-=y;z++;}if(x==0)cout<<z<<endl;elsecout<<"输出"<<z<<"("<<x<<"/"<<y<<")"<<endl;}else {   m=double(x)/double(y);cout<<"输出小数形式为:"<<m<<endl;}}int main(){CFraction num1;num1.input();num1.simplify();num1.amplify(3);num1.output(0);num1.output(1);num1.output(2);return 0;}

运行结果:


原创粉丝点击