我是靠谱客的博主 斯文红酒,最近开发中收集的这篇文章主要介绍求有理数的平均数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本关任务:计算n(n<100)个有理数的平均数并返回,要求输出结果为最简分数形式。

测试:
输入:3
1/2 3/4 5/6
输出:25/36

测试2:
输入: 5
-1/2 2/3 -3/4 4/5 -5/6
输出:-37/300

#include <stdlib.h>
#include <stdio.h>
struct rationalNumber
{
int fenzi; // 分子
int fenmu; // 分母
};
// 函数rnMean:计算n个有理数的平均数
// 参数:a-存放有理数的数组,n-有理数的个数
// 返回值:n个有理数的平均数
struct rationalNumber rnMean(struct rationalNumber a[], int n);
struct rationalNumber reduction(struct rationalNumber n);
struct rationalNumber rnAdd(struct rationalNumber x, struct rationalNumber y);
int main()
{
char c;
struct rationalNumber a[100],z,k;
int n, i;
// 输入有理数个数
scanf("%d", &n);
// 输入n个有理数
for(i = 0; i < n; i++)
scanf("%d%c%d", &a[i].fenzi, &c, &a[i].fenmu);
z = rnMean(a,n);
// 计算有理数平均数
// 输出平均数
if(z.fenmu == 1)
printf("%dn", z.fenzi);
else
printf("%d/%dn", z.fenzi, z.fenmu);
return 0;
}
// 找最大公约数,并对有理数分式进行化简
struct rationalNumber reduction(struct rationalNumber n)
{
int temp;
int k,j;
int max,min;
if(((n.fenzi)<0)&&((n.fenmu)>0))
// 分了几类,当然也能abs()是对整数取绝对值,而fabs()是对浮点数取.
{
j = -n.fenzi;
k = n.fenmu;
}
else if(((n.fenmu)<0) &&((n.fenzi)>0))
{
j = n.fenzi;
k = -n.fenmu;
}
else
{
j = n.fenzi;
k = n.fenmu;
}
if(k<j)
{
temp = k;
k = j;
j = temp;
}
while(j!=0)
//辗转相除法?
{
temp = k % j;
k = j;
j = temp;
}
n.fenzi = (n.fenzi) / k;
n.fenmu = (n.fenmu) / k;
return n;	//返回化简后的有理式(返回的与函数的类型一致)
}
struct rationalNumber rnAdd(struct rationalNumber x, struct rationalNumber y)
{
struct rationalNumber k;
k.fenzi = (x.fenzi) * (y.fenmu) + (x.fenmu) *(y.fenzi);
//这两行是分数加法同用的情况
k.fenmu = (x.fenmu) * (y.fenmu);
k = reduction(k);
return k;
}
struct rationalNumber rnMean(struct rationalNumber a[], int n)
{
int i;
struct rationalNumber k;
for(i=0;i<n-1;i++)
{
a[i+1] = rnAdd(a[i],a[i+1]); //进行一个数据的叠加,此时已经化简好了。
}
a[i].fenmu = (a[i].fenmu) * n;
return a[i];
}

这是个小练习,跟朋友们分享下。本人大一生,初学c语言。如果朋友们有更好的想法,欢迎和我交流哦。

最后

以上就是斯文红酒为你收集整理的求有理数的平均数的全部内容,希望文章能够帮你解决求有理数的平均数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部