01./* 02.* 程式的著作權和版本聲明部分 03.* Copyright (c)2013, 煙台大學電腦學院學生 04.* All rightsreserved. 05.* 檔案名稱: CFraction .cpp 06.* 作 者:趙冠哲 07.* 完成日期:2013年3月29日 08.* 版本號碼: v1.0 09.* 輸入描述: 10.* 問題描述: 11.*/ #include <iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); void set(int nu,int de); void input(); 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,認為是方式0 }; int main() { CFraction cf1; cf1.input(); cf1.amplify(5); cf1.simplify();cf1.output(0); cf1.output(1); cf1.output(2); cf1.output(3); return 0; } CFraction::CFraction(int nu,int de){nume=nu;deno=de;}void CFraction::set(int nu,int de){nume=nu;deno=de;cout<<"輸入的分式為:"<<nume<<"/"<<deno<<endl;}void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入 { cout<<" 請輸入分子、分母:"; cin>>nume>>deno; } void CFraction::simplify() { int a,b,c,d,num1,num2,temp; num1=nume; num2=deno; c=nume; d=deno; if(num1>num2) { temp=num1; num1=num2; num2=temp; } a=num1; b=num2; while(b!=0) { temp=a%b; a=b; b=temp; } c=c/a; d=d/a; cout<<"化簡後為:"<<c<<"/"<<d<<endl; } void CFraction::amplify(int n) { int a,b; a=nume; b=deno; a=a*n; b=b*n; cout<<"擴大倍數後為:"<<a<<"/"<<b<<endl; } void CFraction::output(int style) { if(style==3) { double a;a=double(nume)/double(deno);cout<<"用小數形式輸出為:"<<a<<endl;}else if(style==2) { int b;if(nume>deno){b=nume/deno;cout<<"寫成假分數為:"<<b<<"("<<(nume-deno*b)<<"/"<<deno<<")"<<endl;}else {cout<<nume<<"/"<<deno<<endl;}}else if(style==1) { int a,b,c,d; int num1,num2,temp; num1=nume; num2=deno; c=nume; d=deno; if(num1>num2) {{ temp=num1;num1=num2;num2=temp; } a=num1; b=num2; while(b!=0) { temp=a%b; a=b; b=temp; } c=c/a; d=d/a; cout<<"化簡後為:"<<c<<"/"<<d<<endl; }else {cout<<"化簡後為:"<<nume<<"/"<<deno<<endl; } }}
運行結果: