分数运算(结构体函数版)(烦得要死)

9 篇文章 0 订阅
8 篇文章 0 订阅

题目描述

给出两个分数,要求用结构体表示分数,并要求用函数的形式实现分数的加法和乘法操作。

为了帮助同学们测试程序。下面给出了程序的主体结构。同学们只需要提交add和multiply两个函数的代码。
#include <stdio.h>

struct fraction{
    int numer; //分子
    int deno; //分母
};

/************begin*************************/
// 你的函数实现位置。只需提交函数的定义代码,并且提交语言只能选择C(不能选C++)
//功能一:同学们在此实现函数 struct fraction add(struct fraction x, struct fraction y); 分数x和y的加法操作,并返回结构

 //功能二:同学们在此实现函数 struct fraction multiply(struct fraction *px, struct fraction *py) ;分数*px和*py的乘法操作,并返回结构
/**************end*******************/





int main()
{
  char op;
  struct fraction a, b, c;

  scanf("%d/%d%c%d/%d", &a.numer, &a.deno, &op, &b.numer, &b.deno);
  if(op == '+') {
    c = add(a, b);
  } else if(op == '*') {
    c = multiply(&a, &b);
  }
  printf("%d/%d\n", c.numer, c.deno);
  return 0;
}
 



 

输入

输入包括一行,形如"a/b+(或*)c/d",见样例。a,b,c,d均为正整数,a<b且c<d。
加法和乘法各占50%的数据。只完成一个函数也可以拿到部分分数。
 

输出

给出分数操作的结果(保证结果小于1),要求是最简分数形式。

样例输入 Copy

1/2+1/6

样例输出 Copy

2/3
#include <stdio.h>

struct fraction{
    int numer; //分子
    int deno; //分母
};
struct fraction add(struct fraction x, struct fraction y){
 	  //char result;
 	  //result=(x.numer*y.deno+y.numer*x.deno)/x.deno*y.deno;
 	 int gcd(int x,int y)//求最大公约数
     {
	return !y? x>0?x:-x:gcd(y,x%y);
}
	  int a,b;
 	  char d;
	  struct fraction result;
 	  a=x.numer*y.deno+y.numer*x.deno;
 	  b=x.deno*y.deno;
 	  d=gcd(a,b);
 	  result.numer=a/d;
	   result.deno=b/d;
 	  return result;


 }
 struct fraction multiply(struct fraction *px, struct fraction *py){

 	 int gcd(int x,int y)
     {
	return !y? x>0?x:-x:gcd(y,x%y);
}
	  int a,b;
 	  char d;
	  struct fraction result;
 	  a=(*px).numer*(*py).numer;//注意是(*px),要加括号!!!!!
 	  b=(*px).deno*(*py).deno;
 	  d=gcd(a,b);
 	  result.numer=a/d;
	   result.deno=b/d;
 	  return result;

 }
int main()
{
  char op;
  struct fraction a, b, c;

  scanf("%d/%d%c%d/%d", &a.numer, &a.deno, &op, &b.numer, &b.deno);
  if(op == '+') {
    c = add(a, b);
  } else if(op == '*') {
    c = multiply(&a, &b);
  }
  printf("%d/%d\n", c.numer, c.deno);
  return 0;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值