程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 5_2分數的各種運算

5_2分數的各種運算

編輯:C++入門知識

[cpp]
/* 
* 程序的版權和版本聲明部分 
* Copyright (c)2012, 煙台大學計算機學院學生 
* All rightsreserved. 
* 文件名稱: object.cpp 
* 作者:紀子龍 
* 完成日期: 2013年3  月 21 日 
* 版本號: v1.0 
* 輸入描述:無 
* 問題描述:無 
* 程序輸出:無 

/*
* 程序的版權和版本聲明部分
* Copyright (c)2012, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱: object.cpp
* 作者:紀子龍
* 完成日期: 2013年3  月 21 日
* 版本號: v1.0
* 輸入描述:無
* 問題描述:無
* 程序輸出:無[cpp] view plaincopyprint?*/ 
#include <iostream>  
using namespace std; 
class CFraction 

private: 
    int nume;  // 分子  
    int deno;  // 分母  
public: 
    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;  
    //不給出參數和非1、2,認為是方式0  
}; 
void CFraction::input()                 //按照"nu/de"的格式,如"5/2"的形式輸入  

     
    cout<<"please input nume deno"<<endl; 
    cin>>nume>>deno; 

void CFraction::simplify()              //化簡(使分子分母沒有公因子)  

    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; 

void CFraction::amplify(int n)          //放大n倍,如2/3放大5倍為10/3  

    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) 
    { 
        int a,b,e,t,i,c=3;  
        a=nume; 
        b=deno; 
        if (a>b)    
        { 
            cout<<a/b<<".";   
            for (i=1;i<c+1;i++)   
            {     
                t=a*10/b;    
                e=a%b;      
                a=e;     
                cout<<t;  
            } 
        }     
            cout<<endl;     
        if (a<b)     
        { 
            cout<<"0.";    
            for (i=1;i<c+1;i++)    
            {    
                t=a*10/b;    
                e=a%b;     
                a=e;    
                cout<<t;       
            }     
            cout<<endl;   
        }    
    } 
else 

    if(style==2) 
    { 
        int a,b,c=0; 
        a=nume; 
        b=deno; 
        while(a>=b) 
        { 
            a=a-b; 
            c++; 
        } 
         
        if(a==0) 
            cout<<c<<endl; 
        else 
            cout<<c<<"("<<a<<"/"<<b<<")"<<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; 
        } 
    } 
}        

int main() 

    CFraction num1; 
    num1.input(); 
    num1.amplify(3); 
    num1.simplify(); 
    num1.output(1); 
    num1.output(2); 
    num1.output(3); 
    num1.output(0); 
    return 0; 

運行結果: 

*/
#include <iostream>
using namespace std;
class CFraction
{
private:
 int nume;  // 分子
 int deno;  // 分母
public:
 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;
 //不給出參數和非1、2,認為是方式0
};
void CFraction::input()     //按照"nu/de"的格式,如"5/2"的形式輸入
{
 
 cout<<"please input nume deno"<<endl;
 cin>>nume>>deno;
}
void CFraction::simplify()    //化簡(使分子分母沒有公因子)
{
 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;
}
void CFraction::amplify(int n)   //放大n倍,如2/3放大5倍為10/3
{
 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)
 {
  int a,b,e,t,i,c=3;
  a=nume;
  b=deno;
  if (a>b)  
  {
   cout<<a/b<<"."; 
   for (i=1;i<c+1;i++) 
   {   
    t=a*10/b;  
    e=a%b;    
    a=e;   
    cout<<t;
   }
  }   
   cout<<endl;   
  if (a<b)   
  {
   cout<<"0.";  
   for (i=1;i<c+1;i++)  
   {  
    t=a*10/b;  
    e=a%b;   
    a=e;  
    cout<<t;     
   }   
   cout<<endl; 
  }  
 }
else
{
 if(style==2)
 {
  int a,b,c=0;
  a=nume;
  b=deno;
  while(a>=b)
  {
   a=a-b;
   c++;
  }
  
  if(a==0)
   cout<<c<<endl;
  else
   cout<<c<<"("<<a<<"/"<<b<<")"<<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;
  }
 }
}  
}
int main()
{
 CFraction num1;
 num1.input();
 num1.amplify(3);
 num1.simplify();
 num1.output(1);
 num1.output(2);
 num1.output(3);
 num1.output(0);
 return 0;
}
運行結果:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved