第4周專案2-分數類的雛形
*
* Copyright (c) 2015, 煙臺大學計算機學院
* All rights reserved.
* 檔名稱:test.cpp
* 作 者:劉暢
* 完成日期:2015年 3 月 28 日
* 版 本 號:v1.0
*
* 問題描述:設計一個簡單的分數類,完成對分數的幾個運算。
* 輸入描述:輸入要改變的值;
* 程式輸出:按要求輸出。
程式碼如下:
#include <iostream>
#include <cmath>
#include <cstdlib>
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)形式,表示一又三分之一;
//style為3時,用小數形式輸出,如1.3333;
//預設方式0
};
CFraction::CFraction(int nu,int de)
{
if (de!=0)
{
nume=nu;
deno=de;
}
else
{
cerr<<"程式初始化錯誤,程式退出。"<<endl;
exit(0);
}
}
void CFraction::set(int nu,int de)
{
if (de!=0)
{
nume=nu;
deno=de;
}
}
void CFraction::input()
{
int nu,de;
char x;
do
{
cin>>nu>>x>>de;
if (x!='/')
{
cout<<"輸入格式有誤,請重新輸入:";
continue;
}
else if (de==0)
{
cout<<"分母不能為0,請重新輸入:";
continue;
}
else
{
break;
}
}
while (1);
nume=nu;
deno=de;
}
void CFraction::simplify()
{
int n=gcd(nume,deno);
nume/=n;
deno/=n;
}
int gcd(int x, int y) //求最大公約數
{
int z;
while (y!=0)
{
z=x;
x=y;
y=z%y;
}
return x;
}
void CFraction::amplify(int n)
{
nume*=n;
}
void CFraction::output(int style)
{
int n;
switch (style)
{
case 0:
cout<<"原樣輸出: "<<nume<<"/"<<deno<<endl;
break;
case 1:
n=gcd(nume,deno);
cout<<"化簡後輸出: "<<nume/n<<"/"<<deno/n<<endl;
break;
case 2:
n=gcd(nume,deno);
cout<<"帶分數形式: "<<nume/deno<<"("<<(nume%deno)/n<<"/"<<deno/n<<")"<<endl;
break;
case 3:
cout<<"小數形式: "<<nume/(double)deno<<endl;
break;
default:
cout<<"預設方式輸出: "<<nume<<"/"<<deno<<endl;
}
}
int main()
{
CFraction a,b(8,6);
cout<<"對於a:";
a.output();
cout<<"改變a:";
a.set(10,6);
a.output();
a.output(2);
cout<<"放大a:";
a.amplify(5);
a.output();
cout<<"輸入a:";
a.input();
a.output();
a.output(3);
cout<<endl;
cout<<"對於b: ";
b.output(0);
b.output(1);
b.output(2);
b.output(3);
b.output();
cout<<"化簡b:";
b.simplify();
b.output();
cout<<"放大b:";
b.amplify(2);
b.output();
return 0;
}
執行結果:
知識點總結:
通過本程式,理解並基本掌握了類的建構函式的賦值方式,鞏固了基於物件程式設計的方法,也為運算子過載等積累些感性認識(^0^);
學習心得:
感覺分數要被我玩壞了啊,哈哈。
對於建構函式在賦值上感覺沒什麼大問題了,雖然看有些程式碼時還是理不清的感覺。
對於exit(0)和cerr,本來想著是不是用exit(0)之前輸出的話一定要用cerr,百度了一下,二者沒有什麼關係,只是cerr一般用來顯示錯誤資訊而已。然後又想到了exit(0)和exit(1)又什麼區別,如下:
exit(0):正常執行程式並退出程式;
exit(1):非正常執行導致退出程式;
相關文章
- 第3周專案2-三角形類2
- 第2周專案2-長方柱類
- 第15周-專案2-有些數的階乘不算了
- 第13周-閱讀專案2-有關引數的get函式函式
- uniapp websocket 雛形APPWeb
- MVVM 小雛形 knockoutMVVM
- 第3周專案1-三角形類1
- 第13周-專案2-用檔案儲存的學生名單
- 第14周-專案2-二進位制檔案瀏覽器瀏覽器
- 第3周專案3-三角形類(程式的多檔案組織)
- 天翼雲中南數字產業園落地長沙 “天心數谷”初具雛形產業
- 第4周專案1-三角形類的建構函式(4)-使用引數初始化表函式
- 專案管理中的ABC分類法(轉)專案管理
- 第4周專案1-三角形類的建構函式(1)-使用帶引數建構函式函式
- 第15周-閱讀專案2-異常處理&&名稱空間
- 寒假專案2-猴子選大王
- 從零實現MVVM模式的Web前端框架的雛形MVVM模式Web前端框架
- 第11周-八邊形Octagon類Go
- ODI第8節-變數(二):專案變數變數
- 第4周專案1-三角形類的建構函式(3)-使用有預設引數的建構函式函式
- Hyperf 完整專案-2-服務限流
- 開源 iOS 專案分類索引大全iOS索引
- Mybatis執行流程學習之手寫mybatis雛形MyBatis
- 第2周專案3-時間類(1)
- 第2周專案3-時間類(2)
- 專案管理軟體的主要功能分類專案管理
- 第4周專案4-指向學生類的指標指標
- Swift 專案總結 02 常用分類方法Swift
- 第4周專案1-三角形類的建構函式(2)-預設建構函式函式
- 天哪!手動編寫mybatis雛形竟然這麼簡單MyBatis
- 帶你從0開發圖表庫系列-初具雛形
- 比特幣指令碼及交易分析 - 智慧合約雛形比特幣指令碼
- 第14周-閱讀專案2-中文字元以二進位制方式儲存字元
- 遞迴樹形查詢所有分類遞迴
- MVC + EFCore 專案實戰 - 數倉管理系統2- 搭建基本框架配置EFCoreMVC框架
- 一個分數類的實現——Rational類
- 雲遊戲+ AI +直播,《Rival Peak》是否會成為未來遊戲的雛形?遊戲AI
- 基於影像視覺詞彙的文字分類方法(完整專案)視覺文字分類