第五週任務二(分數類)
阿新 • • 發佈:2019-01-01
* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: 分數類 * 作 者: 馮珍珍 * 完成日期: 2012年3月25日 * 版 本 號: * 對任務及求解方法的描述部分 * 輸入描述: * 問題描述: * 程式輸出: * 程式頭部的註釋結束*/ #include <iostream> using namespace std; int gcd(int,int);//求最大公約數的函式宣告 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; //style為1時,輸出4/3; //style為2時,輸出1(1/3),表示一又三分之一; //不給出引數和非1、2,認為是方式0 }; CFraction::CFraction(int nu,int de) //建構函式,初始化用 { if(de!=0) { nume=nu; deno=de; } else { cout<<"分母不能置為0!"<<endl; exit(0); } } void CFraction:: Set(int nu,int de) //置值,改變值時用 { if(de!=0) { nume=nu; deno=de; } } void CFraction:: input() //按照"nu/de"的格式,如"5/2"的形式輸入 { char c; while(1) { cout<<"輸入分數(m/n)"; cin>>nume>>c>>deno; if(c!='/') cout<<"格式不對!"<<endl; else if(deno==0) cout<<"分母不能為0!"<<endl; else break; } } void CFraction::simplify() //化簡(使分子分母沒有公因子) { int c=gcd(nume,deno); nume=nume/c; deno=deno/c; } void CFraction::amplify(int n) //放大n倍,如2/3放大5倍為10/3 { nume=nume*n; } void CFraction::output(int style) //輸出:以8/6為例,style為0時,輸出8/6; { int m; m=gcd(nume,deno); switch(style) { case 0:cout<<nume<<'/'<<deno;break; case 1:cout<<(nume/m)<<'/'<<(deno/m);break; //style為1時,輸出4/3; case 2:cout<<(nume/deno)<<"("<<(nume%deno)/m<<'/'<<deno/m<<")";break;//style為2時,輸出1(1/3),表示一又三分之一; default:cout<<nume<<'/'<<deno<<endl; //不給出引數和非1、2,認為是方式0z } cout<<endl; } int gcd(int x,int y) //求最大公約數函式定義 { int r; while(y!=0) { r=x%y; x=y; y=r; } return x; } int main() { CFraction c1; c1.output(0); //輸出 c1.Set(8,6); //置值 c1.output(0);//輸出 c1.amplify(4);//擴大倍數 c1.output(0);//輸出 c1.input();//輸入 c1.simplify(); c1.output(0); c1.output(1); c1.output(2); return 0; }