/* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: c.cpp * 作者:杨腾飞 * 完成日期: 2013年 4 月3 日 * 版本号: v1.0 * 输入描述: * 问题描述: * 程序输出: */ #include<iostream> using namespace std; int gcd(int m, int n); 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/3 void output(int style=0);//输出:以8/6为例,style为0时,原样输出8/6; }; CFraction::CFraction(int nu,int de) { nume=nu; deno=de; } void CFraction::set(int nu,int de) { nume=nu; deno=de; } void CFraction::input() { char c; while(1) { cout<<"请按照nu/de格式出入分子分母"<<endl; cin>>nume>>c>>deno; if(c!='/') cout<<"输入格式错误!\n "; else if (deno==0) cout<<"分母不能为零!\n "; else break; } } void CFraction::simplify() { int g=gcd(deno, nume); deno/=g; nume/=g; } int gcd(int m, int n)// 求m,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) //放大n倍,如2/3放大5倍为10/3 { int nu; nu=nume*n; cout<<"该数放大n倍后为:"<<endl; cout<<nu<<"/"<<deno<<endl; } void CFraction::output(int style) { switch(style) { case 0: cout<<"原样输出为:"<<nume<<"/"<<deno<<endl; break; case 1: int g; g=gcd(deno, nume); cout<<"化简后的分数为:"<<nume/g<<"/"<<deno/g<<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; break; } } int main() { CFraction s(8,6),s1; cout<<"直接赋值:"<<endl; s.output(0); s.output(1); s.output(2); s.output(3); cout<<"输入分数: "<<endl; s1.input(); s1.output(0); s1.output(1); s1.output(2); s1.output(3); system("pause"); return 0; }