题目描述
给出两个分数,要求用结构体表示分数,并要求用函数的形式实现分数的加法和乘法操作。
为了帮助同学们测试程序。下面给出了程序的主体结构。同学们只需要提交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;
}