| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5014 人关注过本帖
标题:分数计算器
只看楼主 加入收藏
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
结帖率:53.85%
收藏
已结贴  问题点数:10 回复次数:6 
分数计算器
#include<iostream>
using namespace std;


class Fraction
{
    private:
        int f1;  //分子
        int f2;   //分母
    public:
        Fraction(int i=0,int j=1):f1(i),f2(j){}
        void gs()//格式函数
        {
            int q=f1;
            int w=f2;
            int p=q/w;
            for(;p!=0;)   //辗转相除法求最大公约数
            {
                int m=q%w;
                q=w;
                w=m;
               
                p=q/w;
               
               
            }
            f1/= w;
            f2/=w;
            
        }
        void jiaf(const Fraction &copy)//加法
        {
            f1=f1*copy.f2+f2*copy.f1;
            f2=f2*copy.f2 ;
        }
        void jianf(const Fraction &copy)//减法
        {
            f1=f1*copy.f2-f2*copy.f1;
            f2=f2*copy.f2;
        }
        void chengf(const Fraction &copy)//乘法
        {
            f1*=copy.f1;
            f2*=copy.f2;
        }
        void chuf(const Fraction &copy)//除法
        {
            f1*=copy.f2;
            f2*=copy.f1;
        }
        
        void Show()
        {
            cout<<"分子:"<<f1<<"分母:"<<f2<<endl;
        }
        Fraction( const Fraction &cp)  //复制构造函数
        {
            f1=cp.f1;
            f2=cp.f2;
        }
        ~Fraction(){
        }
    };



int main()
{
   
    void Show();
    cout<<"输入1个分数的分子与分母:"<<endl;
    int fz1,fm;
    cin>>fz1>>fm;
    Fraction fz(fz1,fm);
   
    cout<<"输入第二个分数的分子与分母:"<<endl;
    int fz2,fm2;
    cin>>fz2>>fm2;
    Fraction fr(fz2,fm2);
   
    Show();
    char c1;
    cin>>c1;
    fz.gs();
    fr.gs();
   
    while(c1!='-'&&c1!='+'&&c1!='/'&&c1!='*')
    {
        Show();
        cin>>c1;   //排除出入的符号不是 加减乘除的符号
    }
    switch(c1)
    {
        case '+':
            fz.jiaf(fr);
            break;
        case '-':
            fz.jianf(fr);
            break;
        case '*':
            fz.chengf(fr);
            break;
        case '/':
            fz.chuf(fr);
            break;
            
    }
    fz.gs();
    cout<<"执行:"<<c1<<endl;
    cout<<"结果是:"<<endl;
     
    fz.Show();
    return 0;

}
void Show(){
    cout<<"1 进行 +  运算"<<endl;
    cout<<"2 进行 — 运算"<<endl;
    cout<<"3 进行 /  运算"<<endl;
    cout<<"4 进行 *  运算"<<endl;
    cout<<"运算符号:"<<endl;
   
}
搜索更多相关主题的帖子: 计算器 private include public 公约数 计算器 private include public 公约数 
2016-04-04 18:07
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
怎么了?

一片落叶掉进了回忆的流年。
2016-04-04 18:27
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
收藏
得分:0 
回复 楼主 winnie96
就是运行出来
答案是错的
2016-04-05 21:35
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
收藏
得分:0 
回复 2楼 诸葛欧阳
选做)分数计算器
        为分数定义一个类,命名为Fraction,将分数表示成int类型的两个值:一个表示分子,一个表示分母,类中定义成员函数完成分数的+,-,*,/运算,并定义一个成员函数对分数进行规格化,规格化之后,分母一定是正的,并且分子分母的最大公约数为1。
        仿照计算器的运算过程,选择相应功能完成分数运算(+,-,*,/,清零,退出)
2016-04-05 21:38
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
楼主的类设计的不合理
类的实现代码写的方向错了
2016-04-05 22:12
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:10 
回复 楼主 winnie96
问题出在gs函数。这个函数估计是想约分吧。
改成这样即可:
void gs()//格式函数
        {
            int mx=abs(f1)<abs(f2)?abs(f1):abs(f2);
            for(int var=mx;var>0;var--)
            {
                if(f1%var==0&&f2%var==0)
                {
                    f1/=var;
                    f2/=var;
                    return;
                }
            }
            return;
        }
2016-04-05 22:42
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
收藏
得分:0 
谢谢
2016-04-07 21:25
快速回复:分数计算器
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018533 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved