C++头歌实训平台结构体有理数均值

编程要求

在右侧编辑器中的Begin-End之间补充代码,计算nn<100)个有理数(数据由平台提供,已在主函数中获取)的平均数并返回,结果为最简分数形式;

测试输入:

3
1/2  3/4  5/6

预期输出:25/36

测试输入:

5
-1/2  2/3  -3/4  4/5  -5/6

预期输出:-37/300

#include <iostream>

using namespace std;

struct rationalNumber{

int fenzi; // 分子

int fenmu; // 分母

};

// 函数rnMean:计算n个有理数的平均数

// 参数:a-存放有理数的数组,n-有理数的个数

// 返回值:n个有理数的平均数

rationalNumber rnMean(rationalNumber a[], int n);

struct rationalNumber rnAdd(struct rationalNumber x, struct rationalNumber y);//求两个有理数的相加并且以最简形式返回

int main()

{

char c;

rationalNumber a[100],z;

int n, i;

cin >> n; // 输入有理数个数

// 输入n个有理数

for(i = 0; i < n; i++)

cin >> a[i].fenzi >> c >> a[i].fenmu;

z = rnMean(a,n); // 计算有理数平均数

// 输出平均数

if(z.fenmu == 1)

cout << z.fenzi << endl;

else

cout << z.fenzi << "/" << z.fenmu << endl;

return 0;

}

// 请在此添加代码,实现函数rnMean

/********** Begin *********/

rationalNumber rnMean(rationalNumber a[], int n)

{

int i;

for( i = 0;i < n-1;i++)//注意此处是i < (n-1)

{

a[i+1] = rnAdd(a[i],a[i+1]);

}

a[i].fenmu = a[i].fenmu * n;

return a[i];

}

rationalNumber rnAdd(struct rationalNumber x, struct rationalNumber y)

{

rationalNumber m,n;

n.fenzi = x.fenzi * y.fenmu + x.fenmu * y.fenzi;

n.fenmu = x.fenmu * y.fenmu;

m = n;

int c;

while(m.fenmu != 0)//辗转相除法求最大公约数

{

c = m.fenzi%m.fenmu;

m.fenzi = m.fenmu;

m.fenmu = c;

}

m.fenzi = (m.fenzi > 0)?m.fenzi:-m.fenzi;//防止出现最大公约数是负数的情况

n.fenzi = n.fenzi/m.fenzi;//化简

n.fenmu = n.fenmu/m.fenzi;

return n;

}

/********** End **********/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值