C语言分数相加求和

Python017

C语言分数相加求和,第1张

#include <stdio.h>

#include <math.h>

int fenzi(int i)  // 分子就是 1 3 7 13 21 31  他们之间的差是 2 4 6 8 10

{

    if (i <= 0)

        return 1

    return i * 2 + fenzi(i-1)

}

int fenmu(int i)  // 分母就是 2 的 i + 1 次方

{

    return (int)pow(2, i+1)

}

int main()

{

    double sum = 0

    int flag, x, y

    for (int i = 0 i < 20 i++)

    {

        x = fenzi(i)

        y = fenmu(i)

        flag = pow(-1, i)  // + - 随i是奇偶变换

        printf("%c%d/%d", flag > 0 ? '+' : '-', x, y)

        sum += flag * x * 1.0 / y

    }

    printf(" = %lf\n", sum)

    return 0

}

#include <stdio.h>

#include <math.h>

#include <conio.h>

typedef struct

{

int x /*分子*/

int y /*分母*/

}Frac

void Simplify(Frac* c) /*化简分式:2/4化简为1/2*/

{

if(c->y<0)

{

c->x=-c->x

c->y=-c->y

}

int a=abs(c->x),b=abs(c->y)

while(a!=0&&b!=0) a<b?b-=a:a-=b

int k=((a==0) ? b : a)

c->x=c->x/k

c->y=c->y/k

}

void Add(Frac a,Frac b,Frac*c) /* 分式相加:c=a+b */

{

c->x=(a.x*b.y+a.y*b.x)

c->y=a.y*b.y

Simplify(c)

}

main()

{

Frac a,b,c,d,sum

printf("请输入三个分数(先输分子,再输分母):\n")

scanf("%d%d",&(a.x),&(a.y))

scanf("%d%d",&(b.x),&(b.y))

scanf("%d%d",&(c.x),&(c.y))

Simplify(&a)

Simplify(&b)

Simplify(&c)

Add(a,c,&d)

Add(d,c,&sum)

printf("%d/%d + %d/%d + %d/%d = %d/%d\n",a.x,a.y,b.x,b.y,c.x,c.y,sum.x,sum.y)

getch()

}