第五周-项目2-分数类
第五周-项目二-分数类
/* * 程序的版权和版本声明部分 * 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/3 void 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; }
结果:
感受:有点复杂啊,想想吧!!!