标题:用类表示分数,输入两个分数,能对其进行加减乘除四个运算,并输出结果。
只看楼主
安静的高调
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-3-26
结帖率:100%
已结贴  问题点数:20 回复次数:7 
用类表示分数,输入两个分数,能对其进行加减乘除四个运算,并输出结果。
#include<iostream>
using namespace std;

class Frac
{
  public:
      void set_frac();
      void add_frac();
      void sub_frac();
      void multi_frac();
      void divi_frac();
      void output_frac();
  private:
      float frac1;
      float frac2;
      float frac;
};
 
void Frac::set_frac()
{
    cin>>frac1;
    cin>>frac2;
}

void Frac::add_frac()
{
    float t;
    t=frac1+frac2;
}

void Frac::sub_frac()
{
    float m;
    m=frac1-frac2;
}

void Frac::multi_frac()
{
    float n;
    n=frac1*frac2;
}

void Frac::divi_frac()
{
    float k;
    k=frac1/frac2;
}

void Frac::output_frac()
{
    cout<<frac<<endl;
}

Frac f;
int main()
{
    f.set_frac();
    f.add_frac();
    f.sub_frac();
    f.multi_frac();
    f.divi_frac();
    f.output_frac();
return 0;
}
这是我刚写的一个关于类的程序,要求用类表示分数,输入两个分数,能对其进行加减乘除四个运算,并输出结果,但是不能运行出相应结果,而且在进行除法部分的除这个符号不知道该用什么,/表示的是除后取整,而%表示的是除后取余,这个程序要怎么调一下?
搜索更多相关主题的帖子: private 
2011-04-17 23:01
zkdlyf168
Rank: 2
等 级:论坛游民
帖 子:11
专家分:13
注 册:2011-4-17
得分:7 
#include<stdio.h>

int gys(int x,int y)
{
    return y?gys(y,x%y):x;
}

int gbs(int x,int y)
{
    return x/gys(x,y)*y;
}

void yuefen(int fz,int fm)
{
    int s=gys(fz,fm);
    fz/=s;
    fm/=s;
    printf("the result is %d/%d\n",fz,fm);
}

void add(int a,int b,int c,int d)
{
    int u1,u2,v=gbs(b,d),fz1,fm1;
    u1=v/b*a;
    u2=v/d*c;
    fz1=u1+u2;
    fm1=v;
    yuefen(fz1,fm1);
}

void mul(int a,int b,int c,int d)
{
    int u1,u2;
    u1=a*c;
    u2=b*d;
    yuefen(u1,u2);
}

void sub(int a,int b,int c,int d)
{
    int u1,u2,v=gbs(b,d),fz1,fm1;
    u1=v/b*a;
    u2=v/d*c;
    fz1=u1-u2;
    fm1=v;
    yuefen(fz1,fm1);
}

void div(int a,int b,int c,int d)
{
    int u1,u2;
    u1=a*d;
    u2=b*c;
    yuefen(u1,u2);
}

void main()
{
    char op;
    int a,b,c,d;
    scanf("%ld %ld %c %ld %ld",&a,&b,&op,&c,&d);
    switch(op)
    {
    case '+':add(a,b,c,d);
        break;
    case '-':sub(a,b,c,d);
        break;
    case '*':mul(a,b,c,d);
        break;
    case '/':div(a,b,c,d);
        break;
    }
}
运行后输入5 4 * 5 2然后按Enter键就能算出四分之五乘以二分之五的值了...
收到的鲜花
2011-04-17 23:10
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:2 
楼主怎么可能加减乘除这样的函数都不要参数就算呢。就一个分数和谁加呀?

2楼的虽然是 C 式的,但也很有参考价值。楼主可以看看。
2011-04-18 00:32
安静的高调
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-3-26
得分:0 
回复 3楼 pangding
我就是不明白在程序里面的分数要怎么表示,如果用/表示那不是取整吗?现在知道可以分子分母分别表示了!
2011-04-18 14:50
安静的高调
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-3-26
得分:0 
#include<iostream>
using namespace std;

class Fenshu
{
    public:
        void input_fenshu();
        void yuefen_fenshu();
        void add_fenshu();
        void mul_fenshu();
        void sub_fenshu();
        void div_fenshu();
   
    private:
        int fz;
        int fm;
};

void Fenshu::input_fenshu()
{
    cin>>fz;
    cin>>fm;
}

void Fenshu::yuefen_fenshu()
{
    int s;
    fz/=s;
    fm/=s;
   printf("the result is %d/%d\n",fz,fm);
}

void Fenshu::add_fenshu()                                   //作加法
{
    int u1,u2;
    int v,a,b,c,d;
    int fz1,fm1;
    u1=v/b*a;
    u2=v/d*c;
    fz1=u1+u2;
    fm1=v;
    void Fenshu::yuefen_fenshu();
}

void Fenshu::mul_fenshu()                                   //作乘法
{
    int u1,u2;
    int a,b,c,d;
    u1=a*c;
    u2=b*d;
    void Fenshu::yuefen_fenshu();
}

void Fenshu::sub_fenshu()                                    //作减法
{
    int u1,u2;
    int v,a,b,c,d;
    u1=v/b*a;
    u2=v/d*c;
    fz=u1-u2;
    fm=v;
    void Fenshu::yuefen_fenshu();
}

void Fenshu::div_fenshu()                                    //作除法
{
    int u1,u2;
    int a,b,c,d;
    u1=a*d;
    u2=b*c;
    void Fenshu::yuefen_fenshu();
}


int main()
{Fenshu f;
  
     f.input_fenshu();
     f.yuefen_fenshu();
     f.add_fenshu();
     f.mul_fenshu();
     f.sub_fenshu();
     f.div_fenshu();

return 0;
}
  我想用c++来写这个程序,这是我将上面的程序按c++改后的程序,可还是运行不出结果,麻烦帮我看一下!
2011-04-18 19:02
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:6 
程序代码:
#include <stdio.h>
#include <math.h>


void easy(int * pa, int * pb)
{
    for(int i = 2;i<=fabs(*pa);i++)
    {
        if(0 == *pa%i && 0 == *pb%i)
        {
            *pa /= i;
            *pb /= i;
        }
    }
}
int main()
{
    int a,b,c,d;
    a = b = c = d = 0;
    a=3;b=4;c=5;d=6;

    int x1 = a*d;//加法
    int x2 = c*b;
    int y = b*d;

    int x = x1 + x2;
    easy(&x,&y);
    printf("加法:%d/%d\n",x,y);

    x1 = a*d;//减法
    x2 = c*b;
    y  = b*d;
    x  = x1 - x2;

    easy(&x,&y);
    printf("减法:%d/%d\n",x,y);

    y  = b*d;//乘法
    x  = a*c;

    easy(&x,&y);
    printf("乘法:%d/%d\n",x,y);

    y  = b*c;//除法
    x  = a*d;

    easy(&x,&y);
    printf("除法:%d/%d\n",x,y);


    return 0;
}
自己封装去   别忘了要有虚函数
收到的鲜花

                                         
===========深入<----------------->浅出============
2011-04-18 19:18
安静的高调
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-3-26
得分:0 
我想找个高手帮我改下我写的那个c++的程序,用c写的程序给我思考,可我还是不知道自己的程序在哪出错了……
2011-04-20 22:12
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:5 
你的错误:
1. 如 3 楼 pangding 所言,四则运算的函数怎么能不要参数呢?
2. 分数的四则运算过程必须分别计算分子和分母,你写的函数怎么能把自己定义的类当做 float 类型来对待呢?

你先去把基础知识好好的学一下吧,把最基本的概念搞清楚。
下面是个非常简单的 c 代码,看一下吧

程序代码:
#include <stdio.h>
#include <math.h>

typedef struct {
    int n, d;
} fraction;

void red_frac(fraction * f) {
    int i;
    for (i = 2; i <= abs(f->n) && i <= abs(f->d); i++) {
        while (f->n % i == 0 && f->d % i == 0) {
            f->n /= i;
            f->d /= i;
        }
    }
    
    if ((f->n < 0 && f->d > 0) || (f->n >0 && f->d < 0)) {
        f->n = -abs(f->n);
    } else {
        f->n = abs(f->n);
    }
    f->d = abs(f->d);
    
}

void set_frac(fraction * f, int n, int d) {
    f->n = n;
    f->d = d;
    red_frac(f);
}

void add_frac(fraction * r, fraction lop, fraction rop) {
    r->n = lop.n * rop.d + lop.d * rop.n;
    r->d = lop.d * rop.d;
    red_frac(r);
}

void sub_frac(fraction * r, fraction lop, fraction rop) {
    r->n = lop.n * rop.d - lop.d * rop.n;
    r->d = lop.d * rop.d;
    red_frac(r);
}

void mul_frac(fraction * r, fraction lop, fraction rop) {
    r->n = lop.n * rop.n;
    r->d = lop.d * rop.d;
    red_frac(r);
}

void div_frac(fraction * r, fraction lop, fraction rop) {
    r->n = lop.n * rop.d;
    r->d = lop.d * rop.n;
    red_frac(r);
}

void put_frac(fraction f) {
    printf("(%d/%d)", f.n, f.d);
}

int main() {
    fraction a, b, c;
    set_frac(&a, 15, 25);
    set_frac(&b, -42, 35);
    add_frac(&c, a, b);
    put_frac(a), printf(" + "), put_frac(b), printf(" = "), put_frac(c), printf("\n");
    sub_frac(&c, a, b);
    put_frac(a), printf(" - "), put_frac(b), printf(" = "), put_frac(c), printf("\n");
    mul_frac(&c, a, b);
    put_frac(a), printf(" * "), put_frac(b), printf(" = "), put_frac(c), printf("\n");
    div_frac(&c, a, b);
    put_frac(a), printf(" / "), put_frac(b), printf(" = "), put_frac(c), printf("\n");
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-20 23:31 编辑 ]
收到的鲜花
2011-04-20 23:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-337049-1-1.html




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

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