#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()
}