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

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 **********/

你可能感兴趣的:(c++)