[cpp]
/*
* 程序的版權和版本聲明部分
* Copyright (c)2012, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱:cf.cpp
* 作者:王立強
* 完成日期: 2013年4月3 日
* 版本號: v1.0
* 輸入描述:略
* 問題描述:略
* 程序輸出:略
*/
#include<iostream>
#include<Cmath>
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);
};
CFraction::CFraction(int nu,int de) //構造函數,初始化用
{
if (de!=0)
{
nume=nu;
deno=de;
}
else
{
cerr<<"初始化中發生錯誤,程序退出\n";
system("pause");
exit(0);
}
}
void CFraction::set(int nu,int de) //置值,改變值時用
{
if (de!=0) //如果不合適,改變值操作無效
{
nume=nu;
deno=de;
}
}
void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入
{
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;
}
// 求m,n的最大公約數
int gcd(int m, int n) //這個函數可以定義為類的成員函數,也可以為一般函數
{
int r;
if (m<n){r=m;m=n;n=r;}
while(r=m%n) // 求m,n的最大公約數
{
m=n;
n=r;
}
return n;
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍為10/3
{
nume*=n;
}
//輸出分數:以/6為例
//style為0時,原樣輸出8/6;
//style為1時,輸出化簡後形式4/3;
//style為2時,輸出1(1/3)形式,表示一又三分之一;
//style為3時,用小數形式輸出,如1.3333;
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<<'/'<<deno<<')'<<endl;
break;
case 3:
cout<<"近似值:" <<nume/double(deno)<<endl;
break;
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放大倍: "<<endl;
c2.amplify(5);
c2.output(0);
c2.output(1);
system("pause");
return 0;
}
/*
* 程序的版權和版本聲明部分
* Copyright (c)2012, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱:cf.cpp
* 作者:王立強
* 完成日期: 2013年4月3 日
* 版本號: v1.0
* 輸入描述:略
* 問題描述:略
* 程序輸出:略
*/
#include<iostream>
#include<Cmath>
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);
};
CFraction::CFraction(int nu,int de) //構造函數,初始化用
{
if (de!=0)
{
nume=nu;
deno=de;
}
else
{
cerr<<"初始化中發生錯誤,程序退出\n";
system("pause");
exit(0);
}
}
void CFraction::set(int nu,int de) //置值,改變值時用
{
if (de!=0) //如果不合適,改變值操作無效
{
nume=nu;
deno=de;
}
}
void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入
{
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;
}
// 求m,n的最大公約數
int gcd(int m, int n) //這個函數可以定義為類的成員函數,也可以為一般函數
{
int r;
if (m<n){r=m;m=n;n=r;}
while(r=m%n) // 求m,n的最大公約數
{
m=n;
n=r;
}
return n;
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍為10/3
{
nume*=n;
}
//輸出分數:以/6為例
//style為0時,原樣輸出8/6;
//style為1時,輸出化簡後形式4/3;
//style為2時,輸出1(1/3)形式,表示一又三分之一;
//style為3時,用小數形式輸出,如1.3333;
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<<'/'<<deno<<')'<<endl;
break;
case 3:
cout<<"近似值:" <<nume/double(deno)<<endl;
break;
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放大倍: "<<endl;
c2.amplify(5);
c2.output(0);
c2.output(1);
system("pause");
return 0;
}