- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
C语言分数化成小数
分数变小数
写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。例如:1/3=.00000...表示为.(3),又如41/333=.123123123...表示为.(123)。
一些转化的例子:
1/3=.(3)
22/5=4.4
1/7=.(142857)
3/8=.375
45/46=.803(571428)
用上面的分数和11/59来测试你的程序。
运行举例:
ENTERN,D:17
1/7=.(142857)
本题中,0=N=65535,0=D=65535,设运算结果小数点后最多保留100位。
(1)解题思路
本题可以模仿手算除法的形式,重复地进行求商和余数的运算,直到余数为0或出现循环节为止。
(2)运行结果
ENTERN,D:1159
11/59=.(1864406779661016949152542372881355932203389830508474576271)
附:改写后的C源程序如下:
#include
#defineMax100/*小数点后最大位数*/
intLeft[Max];
intDigit[Max];/*记录每次的余数和商*/
intn,d,q,Top;/*q为循环字节的位置*/
voidInit(void)
{
printf(ENTERN,D:);
scanf(%d%d,n,d);
}
voidCacl(void)/*计算*/
{
inti=0,j=1;
Digit[0]=n/d;/*求商*/
Left[0]=n%d;/*求余数*/
Top=0;
q=0;/*初始化商和余数*/
while(Left[Top]!=0j==1Top100)
{
Top++;/*取下一个数组元素*/
Digit[Top]=(Left[Top-1]*10)/d;/*求商*/
Left[Top]=(int)(Left[Top-1]*10)%d;/*求余数*/
for(i=0;itop-1;i++)p=
{
if(Left[Top]==Left[i])/*如果出现循环节则退出*/
{
q=i+1;
j=0;
break;
}
}
}
}
voidPrint(void)/*输出计算结果*/
{
inti;
printf(n/d=);
if(Digit[0]!=0)printf(%d,Digit[0]);
if(Top0)printf(.);
for(i=1;i=Top;i++)
{
if(i==q)printf(();
printf(%d,Digit[i]);
}
if(q0)printf());
}
voidmain(void)
{
Init();/*读入数据*/
Cacl();/*计算*/
Print();/*打印结果*/
}
欢迎转载,但请保留出处,本文章转自[华软源码],原文链接:/doc/0412547651.html,/Article/2011/5725.html
/top-1;i++)
文档评论(0)