c语言分数求和并输出分数(C语言分数数列求和公式)
C语言的分数计算和输出格式问题
C语言里面没有分数,1/3会被当作是1除以3来计算,结果是一个小数。要输出1/3,必须是像字符串一样的输出:printf("1/3");
也可以这样:int a = 1, b = 3; printf("%d/%d", a, b);
N个分数相加的结果还是会被当作小数处理,必须你自己设计算法让它成为a/b的形式
如何在c语言中实现分数相加,以分数形式输出,并化为最简
完整的C程序:
#include?"stdio.h"
/*?分数结构?*/
typedef?struct
{
int?numerator; /*?分子?*/
int?denominator; /*?分母?*/
}?Fraction;
int?GCD(int?a,int?b);
int?LCM(int?a,int?b);
Fraction?Add(Fraction?f1,?Fraction?f2);
void?main()
{
Fraction?f1,?f2,?f3;
f1.numerator?=?1;
f1.denominator?=?3;
f2.numerator?=?1;
f2.denominator?=?6;
f3?=?Add(f1,?f2);
printf("%d/%d?+?%d/%d?=?%d/%d\n",?f1.numerator,?f1.denominator,?f2.numerator,?f2.denominator,?f3.numerator,?f3.denominator);
}
/*?返回两个分数相加的结果?*/
Fraction?Add(Fraction?f1,?Fraction?f2)
{
Fraction?retValue;
int?lcm?=?LCM(f1.denominator,?f2.denominator); /*?计算最小公倍数?*/
int?gcd;
retValue.denominator?=?lcm;
retValue.numerator?=?f1.numerator?*?lcm?/?f1.denominator?+?f2.numerator?*?lcm?/?f2.denominator;
gcd?=?GCD(retValue.numerator,?retValue.denominator);
retValue.numerator?/=?gcd;
retValue.denominator?/=?gcd;
return?retValue;
}
/*?返回两个整数的最大公约数?*/
int?GCD(int?a,int?b)
{
int?i,temp_gcd;
for(i=a;i=1;i--)
{
if(a%i==0)
{
if(b%i==0)
{
temp_gcd=i;
return?temp_gcd;
}
}
}
}
/*?返回两个整数的最小公倍数?*/
int?LCM(int?a,int?b)
{
int?temp_lcm;
temp_lcm?=?a?*?b?/?GCD(a,b);
return?temp_lcm;
}
运行测试:
输入两个分数,计算它们的和,并以最简分式的方式输出 要求用C语言编出来!!在线等答案!用结构体解答
typedef?struct?{
int?n;
int?d;
}Rat;
int?gcd(int?a,?int?b)?{
while?(1)?{
if?(a??b)?{
int?t?=?a;
a?=?b;
b?=?t;
}
a?=?a?%?b;
if?(a?==?0)?return?b;
}
}
void?add(Rat*?a,?Rat*?b,?Rat*?res)?{
if?(a-d??b-d)?{
int?g;
res-n?=?a-n*b-d?+?b-n*a-d;
res-d?=?a-d*b-d;
g?=?gcd(res-n,?res-d);
if?(gcd!=1)?{
res-n?/=?g;
res-d?/=?g;
}
}
printf("%d/%d?+?%d/%d?=?%d/%d",?a-n,?a-d,?b-n,?b-d,?res-n,?res-d);
}
int?main()?{
Rat?a?=?{3,?4};
Rat?b?=?{11,?12};
Rat?c;
add(a,?b,?c);
return?0;
}
如何用C语言编程输入两个分数求和并以最简分式的方式输出?
#include "stdio.h"
int fun(int num1,int num2)/*求最大公约数函数*/
{
int a,b,temp;
if(num1num2)
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;
b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
main()
{
int a1,a2,b1,b2,c=1,num1,num2;
printf("请输入第一个分数的分子:\n");
scanf("%d",a1);
printf("请输入第一个分数的分母:\n");
scanf("%d",a2);
printf("请输入第一个分数的分子:\n");
scanf("%d",b1);
printf("请输入第一个分数的分母:\n");
scanf("%d",b2);
num1=a1*b2+b1*a2;
num2=a2*b2;
c=fun(num1,num2);
num1=num1/c;
num2=num2/c;
if(num2==1)
printf("结果为:%d:",num1);
else
printf("结果为:%d/%d:",num1,num2);
}
n个分数相加的C语言程序
1.输入n2.输入n个分数:分子 分母3.输出结果。 #include stdio.hint main()
{
int n, i;
double a, b, sum;
sum = 0;
scanf("%d", n);
for(i = 0; i n; i ++){
scanf("%lf %lf", a, b);
sum += a/b;
}
printf("The result is %lf\n", sum);
return 0;
}
C语言:分数求和
//结构定义中包含两个成员,分子和分母
struct?fraction
{
int?up,?down;/*分子和分母*/
};
/*
相加算法的核心是找两个分母的最小公倍数和结果分子分母的最大公约数,分别单独函数来求
*/
int?pubtime(int,?int);//最小公倍数
int?pubsub(int,?int);//最大公约数,可用辗转相除法求,挺经典的一个方法。
/********分数相加********/
fraction?add(fraction?f1,?fraction?f2)
{
fraction?result;
result.down?=?pubtime(f1.down,?f2.down);
result.up?=?f1.up?*?result.down?/?f1.down?+?f2.up?*?result.down?/?f2.down;
int?n?=?pubsub(result.up,?result.down);
result.up?/=?n;?result.down?/=?n;
return?result;
}
int?pubtime(int?n1,?int?n2)
{
int?n?=?pubsub(n1,?n2);
return?n1?*?n2?/?n;
}
int?pubsub(int?n1,?int?n2)
{
int?r?=?n1;
if(n2??n1)
r?=?n1,?n1?=?n2,?n2?=?r;
do
{?/*辗转相除*/
r?=?n1?%?n2;
if(r?==?0)?break;
n1?=?n2;?n2?=?r;
}while(true);
return?n2;
}