分数类
来源:互联网 发布:java中时间格式化 编辑:程序博客网 时间:2024/05/01 00:50
/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 文件名称:text.cpp * 作者:胡颖 * 完成日期:2013 年 4月 3日 * 版本号:v1.0 * * 输入描述:无 输入分数 * 问题描述: * 程序输出:输出变换后的分数*问题分析: * 算法设计:略 */ #include <iostream>#include<cmath>#include<cstdlib>using namespace std;int gcd(int m,int n);class CFraction{ 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倍 void output(int style=0);//style为1时,输出化简后形式4/3; // style为2时,输出1(1/3)形式,表示一又三分之一; // style为2时,用小数形式输出,如1.33333; //不给出参数和非1,2,3,认为是方式0; private: int nume;//分子 int deno;//分母};CFraction::CFraction(int nu,int de){ if(de!=0) { nume=nu; deno=de; } else { cerr<<"初始化中发生错误,程序退出\n"; exit(0); }}void CFraction::set(int nu,int de){ if(de!=0) { nume=nu; deno=de; }}void CFraction::input(){ int nu,de; char c; while(1) { cout<<"输入分数(m/n):"; cin>>nu>>c>>de; if(c!='/') cout<<"输入格式错误!\n"; else if(de==0) cout<<"分母不能为零!\n"; else break; } nume=nu; deno=de;}void CFraction::simplify(){ int n=gcd(deno,nume); deno/=n; nume/=n;}int gcd(int m,int n){ int r; if(m<n) { r=m; m=n; n=r; } while(r=m%n) { m=n; n=r; } return n;}void CFraction::amplify(int n){ nume*=n;}void CFraction::output(int style){ int n; switch(style) { case 0: cout<<"原样:"<<nume<<'/'<<deno<<endl; break; case 1: n=gcd(deno,nume); cout<<"化简形式:"<<nume/n<<'/'<<deno/n<<endl; break; case 2: cout<<"带分数形式:"<<nume/deno<<'('<<nume%deno<<'/'<<')'<<endl; break; case 3: cout<<"近似值:"<<nume/double (deno)<<endl; default: cout<<"默认原样:"<<nume<<'/'<<deno<<endl; }}int main(){ CFraction c1,c2(8,6); cout<<"关于c1:"<<endl; c1.output(0); cout<<"改变c1:"<<endl; c1.set(2,7); c1.output(); cout<<"输入c1:"<<endl; c1.input(); c1.output(0); cout<<"关于c2:"<<endl; c2.output(0); c2.output(1); c2.output(3); c2.output(3); c2.output(); cout<<"将c2化简:"<<endl; c2.simplify(); c2.output(0); cout<<"将c2放大5倍后:"<<endl; c2.amplify(5); c2.output(0); c2.output(1); return 0;}
运行结果: