永发信息网

C语言:分数的乘法

答案:4  悬赏:20  手机版
解决时间 2021-11-15 21:30
C语言:分数的乘法
最佳答案
这是要干嘛,改错?
全部回答
int scan_frac(struct fraction *f, struct fraction *g){
int a,b,c,d;
if(scanf("%d/%d %d/%d",&a,&b,&c,&d)==EOF)return EOF;
f->symbol=(a<0)?(-1):1;
g->symbol=(c<0)?(-1):1;
f->numerator=a>0?a:(-a);
f->denominator=b;
g->numerator=c>0?c:(-c);
g->denominator=d;return 0;}

struct fraction multiply_frac(struct fraction f, struct fraction g){
struct fraction ans;
int fin;
ans.numerator=f.numerator*g.numerator;
ans.denominator=f.denominator*g.denominator;
ans.symbol=(f.symbol==g.symbol)?1:(-1);
fin=(ans.numerator>ans.denominator)?ans.numerator:ans.denominator;
while(fin>1){
if(ans.numerator%fin==0&&ans.denominator%fin==0){
ans.numerator/=fin;
ans.denominator/=fin;}
fin--;
}
return ans;}
#include 
#include 



struct fraction

{

    int numerator; // 分子

    int denominator; // 分母

    int symbol; // 符号,分子为负时取值为-1,为正时取值为1,其它取值无意义

};

int scan_frac(struct fraction *f, struct fraction *g);// 按题目格式输入两个分数,存入f和g所指的内存中。

struct fraction multiply_frac(struct fraction f, struct fraction g); //返回分数f和g的乘积。


int main()
{
    struct fraction f1, f2, product;
    while(scan_frac(&f1, &f2) != EOF)
    {
        product = multiply_frac(f1, f2);
        if(product.numerator == 0)
        {
            printf("0 ");
            continue;
        }
        if(product.symbol == -1)
            printf("-");
        printf("%d/%d ", product.numerator, product.denominator);
    }
    return 0;
}

//读取
int scan_frac(struct fraction *f, struct fraction *g)
{
  
char c=0;

int *tmpnum=&f->numerator;

*tmpnum=0;
f->symbol=1;
while((c=getchar())!=' ')
{
       

if(c<='9'&&c>='0')
 *tmpnum=*tmpnum*10+c-'0';
else if(c=='/')
{
               tmpnum=&f->denominator;
*tmpnum=0;
}
else if(c=='-')
f->symbol=-1;
}


  tmpnum=&g->numerator;
*tmpnum=0;
g->symbol=1;
     while((c=getchar())!=' ')
{
       

if(c<='9'&&c>='0')
 *tmpnum=*tmpnum*10+c-'0';
else if(c=='/')
{
               tmpnum=&g->denominator;
    *tmpnum=0;
}
else if(c=='-')
g->symbol=-1;
}
fflush(stdin);
        return c;

}
//乘积
struct fraction multiply_frac(struct fraction f, struct fraction g)
{
int i=0;
int tmp1,tmp2;
      struct fraction *result=(struct fraction *)malloc(sizeof( struct fraction));

  //约分
     tmp1=f.denominator*g.denominator;
  tmp2=f.numerator*g.numerator;

i=tmp1>tmp2?tmp2:tmp1;

while(i>=2)
{
  
if(tmp1%i==0
&&tmp2%i==0)
{
  tmp1/=i;
  tmp2/=i;
}
   i--;
}
 result->denominator=tmp1;
 result->numerator=tmp2;
     result->symbol=f.numerator*g.numerator;

  return *result;
}
关注此问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有没有关于保障性住房建设规模评价指标的资料
我5号汇款现在想退,怎么退
英伦风情建筑 是什么
老板j381净水器好么
我在一家网吧当网管天天清桌面端茶递水打扫卫
怡苑宾馆停车场地址在哪,我要去那里办事,
4.26×9/10+4.24除以中括号九分之十加括
商品1:29元/件商品2:25元/件商品3:26
怎么用手指到g点
请教Serdes TX眼图如何开的问题
(高考)+如何报志愿?
纽曼车载c58使用方法
如何停止一个正在运行的shell命令
花呗10号之前付款,什么时候还钱
描写夜晚古诗词
推荐资讯
能帮我讲讲这个PERL程序么,我想写一个统计AT
滋养面膜怎么用光晚上用吗
2008届宁夏高考状元王宁山是否被清华大学开除
请教shadowsock 遇到了 I/0 timeout,是
女师父的丈夫怎么称呼?
西红柿弧三是什么意思
knockout2中文版详细的使用方法,要初学者适
重庆艺鑫“时代秀”秀前指导有谁去参加了吗?
我想知道这是什么木头??
去哪里查询我的个人征信有没有不良记录?
数学排列组合。学校为新生开设4门选修课程,
unknown host问题怎么解决
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?