有限小数或无限循环小数化为分数(分数化为小数包含有限小数)

一、对大于1的自然数n,将其倒数1/n化成小数有三种类型:

  1. n的因数中只含有2或5,其结果必然是有限小数,且小数位数等于其因数2或5中最多的个数,例如:1/40=0.025,有3位小数,而40=2^3*5,其中含有3个因数2;
  2. 如果n中不含因数2或5,把它化成小数将是一个纯无限循环小数,这种情况前面已经介绍过;
  3. n中既有因数2或5又有其它因数,把它化成小数将是一个混无限循环小数:其中不循环部分的位数,等于其因数2或5中最多的个数;循环节的位数只由2或5以外的因数决定,例如:1/56=0.017’857142’,其中不循环部分有3位小数,循环节是6位,而56=2^3*7,其中含有3个因数2和一个因数7,我们已经知道7的倒数的循环节位数也是6位。

二、用C语言编程把单位分数化为小数:

//分数化小数(包含:有限小数 纯无限循环小数 混无限循环小数)

#include <stdio.h>

int main ()

{ int i,b,y,y1,w;//循环变量i,被除数b,余数y,循环节位数w,

int m,n; //范围[m,n],(其中m,n均为自然数,且2<=m<=n)

printf("请输入自然数范围m n(用空格隔开):"); scanf("%d %d",&m,&n);

if(m<=1) m=2; //排除0和1的倒数

for(i=m;i<=n;i )

{ y=i;w=0; //i给余数y;含因数2或5的最多个数w置0

while(y==0){ y/=10; w ; } //y能被几个10整除

while(y%2==0) { y/=2; w ; } //y能被几个2整除

while(y%5==0) { y/=5; w ; } //y能被几个5整除

printf("1/%d=0.",i);

y=1; //余数(被除数)置1

while(w!=0) //当含2或5的个数不是0时反复除:

{ y*=10; //余数后补0

printf("%d",y/i); //输出一位商(不循环部分)

y%=i; w--; //求新余数,个数减1

}

if(y==0) {printf("\n");continue;} //若是有限小数,看下一个i

printf("'"); //'为循环部分开始标记,用单引号' '里面表示一个循环节

b=y*10; y1=y; //先把余数*10传给b(保证下面的循环能进行);把循环开始前的余数传给y1

while(b!=y1) //当余数=循环开始时的余数时跳出

{ y*=10;w ; //余数*10变为被除数,累计循环部分位数

printf("%d",y/i); //输出一位商(循环部分)

y%=i; b=y; //求新余数,余数y传给除数b

}

printf("',其循环节有%d位\n",w); //'为循环部分结束标记,输出循环节位数w

}

}

三、单位分数化小数运行结果展示:

有限小数或无限循环小数化为分数(分数化为小数包含有限小数)(1)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页