第五周-项目二-分数类
/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: object.cpp * 作者:杨绍宁* 完成日期: 2013年 4 月 3 日 * 版本号: v1.0 * 输入描述:无 * 问题描述:函数重载。 * 程序输出:分数。 */ #include <iostream>using namespace std;class CFraction{private:int nume; // 分子int deno; // 分母 public:CFraction(int nu=0,int de=1); //构造函数,初始化用void set(int n=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为1时,输出化简后形式4/3;//style为2时,输出1(1/3)形式,表示一又三分之一;//style为3时,用小数形如1.3333 //不给出参数和非1、2,3,认为是方式0};void CFraction::input(){int nu,de;char a;cout<<"请输入nu,a,de:";cin>>nu>>a>>de;if(a!='/'){cout<<"格式错误!!!"<<endl;exit(0);}else{nume=nu;deno=de; //切记!!!因为函数调用完,内存空间就释放啦,nume,deno的值不变啊}}void CFraction::set(int nu,int de){nume=nu;deno=de;}CFraction::CFraction(int nu,int de):nume(nu),deno(de){}void CFraction::simplify(){int r,x,y;x=nume;y=deno;while(y>0){r=x%y;x=y;y=r;}nume=nume/x;deno=deno/x;}void CFraction::amplify(int n){nume=nume*n;}void CFraction::output(int style) { int n; switch(style) { case 0: cout<<"原样:" <<nume<<'/'<<deno<<endl; break; case 1: cout<<"化简形式: "<<nume<<'/'<<deno<<endl; break; case 2: cout<<"带分数形式:" <<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl; break; case 3: cout<<"近似值:" <<nume/double(deno)<<endl; break; default: cout<<"默认原样:" <<nume<<'/'<<deno<<endl; } } int main(){CFraction t;t.set(8,6);t.output(0);t.simplify();t.output(1);t.output(2);t.output(3);return 0;}
结果:
感受:有点复杂啊,想想吧!!!