关闭

第五周作业 2

165人阅读 评论(0) 收藏 举报

 /* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* 文件名称:                              
* 作    者: 计114-4   孙建朋                         
* 完成日期: 2012  年  3 月 19  日
* 版 本 号: 2012031902         
 
* 对任务及求解方法的描述部分
* 输入描述: 
* 问题描述: 分数的化简,放大,输出。
* 程序输出: 按要求输出
* 程序头部的注释结束
*/ 

 

#include<iostream>   
using namespace std;  
int gcd(int x,int y);    //求最大公约数   
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;     
};  
//结构体   
CFraction::CFraction(int nu,int de)  
{  
    if(de!=0)  
    {  
        nume=nu; 
        deno=de;  
    }      
	else  
    {  
        cout<<"分母不能为零"<<endl;  
        exit(0);  
    }  
}  
//设定分子分母的值;   
void CFraction::set(int nu,int de)  
{  
    if(de!=0)  
    {  
        nume=nu;         
		deno=de;  
    }  
}  
//按照"nu/de"的格式,如"5/2"的形式输入   
void CFraction::input()  
{  
    char c;  
    while(1)  
    {  
        cin>>nume>>c>>deno;  
        if(c!='/')  
            cout<<"格式不对,请从新输入:"<<endl;  
		else if(deno==0)  
            cout<<"分母不能为零,请从新输入:"<<endl;  
        else  
            break;  
    }  
}  
//化简(使分子分母没有公因子)   
void CFraction::simplify()  
{  
    int n=gcd(nume,deno);  
	nume/=n;  
    deno/=n;  
}  
//求最大公约数;   
int gcd(int x,int y)  
{  
    int r;  
    while(y!=0)  
    {  
        r=x%y;  
        x=y;  
        y=r;  
    }  
    return x;  
}  
//放大n倍,如2/3放大5倍为10/3   
void CFraction::amplify(int n)  
{  
    nume*=n;  
}  
//输出:以8/6为例,style为0时,输出8/6;   
void CFraction::output(int style)  
{  
    int i;  
    switch(style)  
    {  
	case 0:  
        cout<<nume<<'/'<<deno<<endl;  
		break;  
    case 1:  
        i=gcd(nume,deno);  
		cout<<(nume/i)<<'/'<<(deno/i)<<endl;  
        break;  
    case 2:  
        int nu,de;  
        i=gcd(nume,deno);  
        nu=nume/i;  
        de=deno/i;  
        cout<<(nume/deno)<<"("<<(nu/de)<<'/'<<de<<")"<<endl;  
        break;  
    default:  
        cout<<nume<<'/'<<deno<<endl;  
    }  
}  
int main()  
{  
    CFraction c1;  
    c1.output(0);  
    c1.set(24,14);  
    cout<<"假分数形式为:"<<endl;  
    c1.output(0);  
    cout<<"扩大4倍后的值为:"<<endl;  
    c1.amplify(4);  
    c1.output(0);  
    c1.simplify();  
    cout<<"代分数形式为:"<<endl;  
    c1.output(2);  
    cout<<"请输入您想要的分数:"<<endl;  
    c1.input();  
    c1.simplify();  
    cout<<"化简后的值为:"<<endl;  
    c1.output(1);  
    system("pause");  
    return 0;  
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36697次
    • 积分:986
    • 等级:
    • 排名:千里之外
    • 原创:70篇
    • 转载:0篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论