45.将真分数分解为埃及分数
46.列出真分数序列
47.计算分数的精确值
45.将真分数分解为埃及分数
分子为1 的分数称为埃及分数,现输入一个真分数,请将该分数分解为埃及分数。
如:8/11=1/2+1/5+1/55+1/110。
*问题分析与算法设计
若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。
*程序与程序注释
#include<stdio.h>
void main()
{
long int a,b,c;
printf("Please enter a optional fraction(a/b):");
scanf("%ld/%ld",&a,&b); /*输入分子a和分母b*/
printf("It can be decomposed to:");
while(1)
{
if(b%a) /*若分子不能整除分母*/
c=b/a+1; /*则分解出一个分母为b/a+1的埃及分数*/
else{ c=b/a; a=1;} /*否则,输出化简后的真分数(埃及分数)*/
if(a==1)
{
printf("1/%ld\n",c);
break; /*a为1标志结束*/
}
else
printf("1/%ld + ",c);
a=a*c-b; /*求出余数的分子*/
b=b*c; /*求出余数的分母*/
if(a==3) /*若余数为3,输出最后两个埃及分数*/
{ printf("1/%ld + 1/%ld\n",b/2,b); break;}
}
}
*运行结果
1. Please enter a optional fraction (a/b): 1/6
It can be decomposed to: 1/6
2. Please enter a optional fraction (a/b): 20/33
It can be decomposed to: 1/2+1/10+1/165
3. Please enter a optional fraction (a/b): 10/89
It can be decomposed to: 1/9+1/801
4. Please enter a optional fraction (a/b): 19/99
It can be decomposed to: 1/6+1/40+1/3960
5. Please enter a optional fraction (a/b): 8/89
It can be decomposed to: 1/11+1/957
46.列出真分数序列
按递增顺序依次列出所有分母为40,分子小于40的最简分数。
*问题分析与算法设计
对分子采用穷举法,利用最大公约数的方法,判定分子与40是否构成真分数。
*程序与程序注释
#include<stdio.h>
void main()
{
int i,num1,num2,temp;
printf("The fraction serials with demominator 40 is:\n");
for(i=1;i<=40;i++) /*穷举40以内的全部分子*/
{
num1=40;
num2=i;
while(num2!=0) /*采用辗转相除法求出最大公约数*/
{
temp=num1%num2;
num1=num2;
num2=temp;
}
if(num1==1) /*若最大公约数为1,则为最简真分数*/
printf("%d/40 ",i);
}
}
*运行结果
The fraction serials with demominator 40 is:
1/40 3/40 7/40 9/40 11/40 13/40 17/40 19/40
21/40 23/40 27/40 29/40 31/40 33/40 37/40 39/40
*思考题
按递增顺序依次列出所有分母小于等于40的最简真分数
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |