/*
* Copyright (c) 2011, 烟台大学计算机学院
* All rights reserved.
* 作 者:王静
* 完成日期:2013 年 4 月 2 日
* 版 本 号: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 simplify1(); //化简输出1(1/3)形式,表示一又三分之一;
void amplify(int n); //放大n倍,如2/3放大5倍为10/3
void output(int style); //输出:以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() //按照"nu/de"的格式,如"5/2"的形式输入
{
char c;
do{
cout<<"请按照nu/de的格式输入分子与分母"<<endl;
cin>>nume>>c>>deno;
if(c!='/')
cout<<"输入错误,请重新输入"<<endl;
}while(c!='/');
}
void CFraction::simplify() //化简(使分子分母没有公因子)
{
int i,n=1;
int num,den;
if(nume>deno){
for(i=2;i<=deno;i++){
if(nume%i==0&&deno%i==0){
n=n*i;
}
}
}else{
for(i=2;i<=nume;i++){
if(nume%i==0&&deno%i==0){
n=n*i;
}
}
}
num=nume/n;den=deno/n;
cout<<"经过方式1化简后为:"<<endl;
cout<<num<<"/"<<den<<endl;
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍为10/3
{
int num;
num=nume*n;
cout<<"该数放大n倍后为:"<<endl;
cout<<num<<"/"<<deno<<endl;
}
void CFraction::simplify1()
{
int n=0,num;
simplify();
cout<<"经过方式2化简后为:"<<endl;
if(nume>deno){
n=nume/deno;
num=nume%deno;
cout<<n<<"("<<num<<"/"<<deno<<")"<<endl;
}else{
cout<<num<<"/"<<deno<<endl;
}
}
void CFraction::output(int style) //输出:以8/6为例,style为0时,原样输出8/6;
{
switch(style)
{
case(0):
cout<<"化简后为:"<<endl;
cout<<nume<<"/"<<deno<<endl;break;
case(1): //style为1时,输出化简后形式4/3;
simplify();break;
case(2): //style为2时,输出1(1/3)形式,表示一又三分之一;
simplify1();break;
case(3):
cout<<"经过方式3化简后为:"<<endl;//style为3时,用小数形式输出,如1.3333;
cout<<nume/double(deno)<<endl;break;
default:
cout<<"化简后:"<<endl; //不给出参数和非1、2,认为是方式0
cout<<nume<<"/"<<deno<<endl;break; //输出:以8/6为例,style为0时,原样输出8/6;
}
}
int main()
{
CFraction num1;//构造函数,初始化用
num1.output(0); //输出:以8/6为例,style为0时,原样输出8/6;
CFraction num2;
num2.set(5,3); //置值,改变值时用
num2.amplify(4); //放大n倍,如2/3放大5倍为10/3
num2.output(1); //输出:以8/6为例,style为0时,原样输出8/6;
num2.output(2);
num2.output(3);
num2.output(4);
CFraction num3;
num3.input(); //按照"nu/de"的格式,如"5/2"的形式输入
num3.output(3);
num3.amplify(2); //放大n倍,如2/3放大5倍为10/3
num3.output(2); //化简输出1(1/3)形式,表示一又三分之一;
return 0;
}
运行结果:
(贴图)
心得体会: