- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构与算法 分数变小数
合肥学院
计算机科学与技术系
课程设计报告
2010 ~ 2011 学年第 2 学期
课程 数据结构与算法 课程设计题目名称 分数变小数
一、题目
名称:分数变小数写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。例如:1/3=.3333…表示为.(3),又如41/333=.123123123…表示为.(123)。写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。 S[max],记录每次的商。
概要设计:
1)、为了实现上述程序功能:1、输入分数的分子、分母并判断输入的分子分母是否为正确输入,2、调用转换函数将分数转换为小数,3、用数组存储转换后的商和余数,4、判断转换后的小数是否是循环小数,如果是,则将循环部分用括号括起来,5、输出转换后的小数。
2)、本实验包含两个函数:
1、主函数 main()
2、分数转换为小数函数 Change()
各函数之间的关系如下:
main() Change()
四、算法思想
该程序实现的是将分数转变为小数,如果小数存在循环节的话,则将该小数的循环节用括号括起来再表示出来,首先输入分数的分子和分母,再判断输入的分子分母是否是正确输入,如果是则调用转换函数,在转换函数中用YS[max]记录每次的余数, S[max]记录每次的商,先初始化商和余数,计算分数变成小数是否有余数,如果没有余数,则如果分数转换后为整数,则直接输出整数部分,如果为小数,则输出 .x格式的小数,若转换后的小数有余数,则判断该小数是否存在循环节,即从小数点后第一个元素开始对应的余数开始向后检查,如果出现余数相等,则表示出现循环节,此时记下循环节的位置,将转换后的小数的循环节部分由之前标记的位置用括号括起来并输出。
五、详细设计和主要编码段
#define max 100 确定小数点后的最大位数
1、转换函数 void Change(int FZ,int FM) 实现分数转化为小数的函数
{
YS[max]; 记录每次的余数,S[max]; 记录每次的商
a为循环字节的位置,b为小数点后小数的位数
S[0]=FZ/FM;YS[0]=FZ%FM; 求商求余数
b=0;a=0; 初始化商和余数
while(YS[b]!=0j==1bmax) 当余数不为0且余数位数小于定义的最大值
{
取下一个数组元素
S[b]=(YS[b-1]*10)/FM; 求商
YS[b]=(YS[b-1]*10)%FM; 求余数
for(i=0;i=b-1;i++) 从小数点后第一个元素开始
{
如果出现循环节则退出即(YS[b]==YS[i])
{
a=i+1; 记下循环字节的位置
j=0;
break; } } }
输出转化后的小数为(%d/%d=,FZ,FM)
if(S[0]!=0) 如果商不为0
输出商S[0]
if(b0) printf(.); 如果有小数,加入小数点
for(i=1;i=b;i++) 小数点后的数从第一个开始
{
if(i==a) 循环节出现时输入左括号
printf(%d,S[i]); 输出循环部分
}
if(a0) 循环节结束时输入右括号
}
2、主函数void main()
{
int FZ,FM; 定义变量
scanf(%d,FZ); 输入分子
scanf(%d,FM); 输入分母
判断分子分母是否正确输入
Change(FZ,FM); 调用转化函数
}
六、上机调试情况记录
1、语法错误及修改:所出现的语法问题是子函数以及变量的定义,括号的配对上,这些问题在编译时可根据警告提示将其解决。
2、逻辑问题修改和调整:
一开始时在判断转换后的小数的循环节时记下了循环节的位置,然后输出时由于要将循环节用括号括起来,在括的时候判断错误,出现了:
之后改为for(i=1;i=b;i++) //小数点后的数从第一个开始
{
if(i==a) printf((); //循环节出现时输入左括号
printf(%d,S[i]); //输出循环部分
}
if(a0) printf()); //循环节结束时输入右括号
此时正确无误。
七、测试用例、结果及其算法性能分析
测试用例:
1.分子非正确输入:分子0,分母1,
文档评论(0)