数据结构与算法 分数变小数.doc_第1页
数据结构与算法 分数变小数.doc_第2页
数据结构与算法 分数变小数.doc_第3页
数据结构与算法 分数变小数.doc_第4页
数据结构与算法 分数变小数.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥学院计算机科学与技术系课程设计报告2010 2011 学年第 2 学期课程 数据结构与算法课程设计题目名称分数变小数问题学生姓名丁同飞学号0904013004专业班级09计科(3)指导教师王昆仑,张贯虹20 11 年 6 月一、题目名称:分数变小数问题内容:写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。例如:1/3=.3333表示为.(3),又如41/333=.123123123表示为.(123)。二、问题分析本程序要求实现将分数转化为小数,即写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。程序所能达到的:完成分数的输入,转换分数为小数并计算结果,判断输入的分数是否为正确输入,判断分数的结果是否有余数,存在循环节的小数将循环节用括号括起来,输出转换后的小数形式。完成这些功能需要解决的关键的问题是如何将分数转换为小数,判断小数是否有循环节,以及将循环节用括号括起来。数据的输入形式以及输入值的范围:输入分数时要输入分数的分子和分母,输入的值都为整数。结果的输出形式:输出的为分数对应的小数形式,如果出现循环节则输出的是将循环节用括号括起来的小数。测试数据:1.分子非正确输入:分子0,分母1,输出 Error2.分母非正确输入:分子1,分母0,输出 Error3. 没有余数: 分子 1,分母 2,输出 1/2=.54. 有 余 数:1)、分子 1,分母 7,输出 1/7=.(142857) 2)、分子 11,分母 12,输出 11/12=.91(6)三、数据结构的选择和概要设计数据结构的选择:对于分数变成小数问题,我采用的数据结构是数组,即将分数转变为小数的商和余数分别用数组存储,YSmax,记录每次的余数; Smax,记录每次的商。概要设计:1)、为了实现上述程序功能:1、输入分数的分子、分母并判断输入的分子分母是否为正确输入,2、调用转换函数将分数转换为小数,3、用数组存储转换后的商和余数,4、判断转换后的小数是否是循环小数,如果是,则将循环部分用括号括起来,5、输出转换后的小数。2)、本实验包含两个函数:1、主函数 main()2、分数转换为小数函数 Change()各函数之间的关系如下:main() Change()四、算法思想该程序实现的是将分数转变为小数,如果小数存在循环节的话,则将该小数的循环节用括号括起来再表示出来,首先输入分数的分子和分母,再判断输入的分子分母是否是正确输入,如果是则调用转换函数,在转换函数中用YSmax记录每次的余数, Smax记录每次的商,先初始化商和余数,计算分数变成小数是否有余数,如果没有余数,则如果分数转换后为整数,则直接输出整数部分,如果为小数,则输出 .x格式的小数,若转换后的小数有余数,则判断该小数是否存在循环节,即从小数点后第一个元素开始对应的余数开始向后检查,如果出现余数相等,则表示出现循环节,此时记下循环节的位置,将转换后的小数的循环节部分由之前标记的位置用括号括起来并输出。五、详细设计和主要编码段#define max 100 确定小数点后的最大位数 1、转换函数 void Change(int FZ,int FM) 实现分数转化为小数的函数 YSmax; 记录每次的余数,Smax; 记录每次的商 a为循环字节的位置,b为小数点后小数的位数 S0=FZ/FM;YS0=FZ%FM; 求商求余数 b=0;a=0; 初始化商和余数 while(YSb!=0&j=1&bmax) 当余数不为0且余数位数小于定义的最大值 取下一个数组元素 Sb=(YSb-1*10)/FM; 求商 YSb=(YSb-1*10)%FM; 求余数 for(i=0;i0) printf(.); 如果有小数,加入小数点 for(i=1;i0) 循环节结束时输入右括号 2、主函数void main() int FZ,FM; 定义变量scanf(%d,&FZ); 输入分子scanf(%d,&FM); 输入分母判断分子分母是否正确输入Change(FZ,FM); 调用转化函数六、上机调试情况记录1、语法错误及修改:所出现的语法问题是子函数以及变量的定义,括号的配对上,这些问题在编译时可根据警告提示将其解决。2、逻辑问题修改和调整:一开始时在判断转换后的小数的循环节时记下了循环节的位置,然后输出时由于要将循环节用括号括起来,在括的时候判断错误,出现了:之后改为for(i=1;i0) printf(); /循环节结束时输入右括号此时正确无误。七、测试用例、结果及其算法性能分析测试用例:1.分子非正确输入:分子0,分母1,输出 Error2.分母非正确输入:分子1,分母0,输出 Error3. 没有余数: 分子 1,分母 2,输出 1/2=.54. 有 余 数:1)、分子 1,分母 7,输出 1/7=.(142857) 2)、分子 11,分母 12,输出 11/12=.91(6)结果:算法性能分析:八、用户使用说明本程序名为 1.exe,运行环境为 VC+6.0:本程序运行带有提示性语句。执行程序后,首先提示该程序的用处“*分数转化为小数*”,接着会显示“请输入分数的分子”,此时输入用户需要输入的分子值,接着提示“请输入分数的分母”,此时输入用户需要输入的分母值,如果输入的分子或分母有小于或等于0的,则输出“Error”,如果是正确输入则输入完毕后会显示“转化后的小数为”,此时输出转化后的小数,如果输入的分数转换后为循环小数,则会输出用括号将循环节括起来的小数。本程序可以持续进行输入分数完成分数对小数的转换。九、参考文献1、王昆仑、李红.数据结构与算法.北京:中国铁道出版社,20072、百度:/aaron2004/archive/2004/12/16/219003.aspx十、附录(完整源程序)#include #define max 100 /小数点后最大位数 void Change(int FZ,int FM) /实现分数转化为小数的函数 int YSmax; /记录每次的余数 int Smax; /记录每次的商 int a,b; /a为循环字节的位置,b为小数点后小数的位数 int i=0,j=1;/转化过程中的变量并设初值,i=0表示小数点后第一个元素的序号,j=1表示商没有循环节 S0=FZ/FM;YS0=FZ%FM; /求商求余数 b=0;a=0; /初始化商和余数 while(YSb!=0&j=1&bmax)/当余数不为0且余数位数小于定义的最大值 b+; /取下一个数组元素 Sb=(YSb-1*10)/FM; /求商 YSb=(YSb-1*10)%FM; /求余数 for(i=0;i0) printf(.); /如果有小数,加入小数点 for(i=1;i0) printf(); /循环节结束时输入右括号 void main() /输出计算结果 int FZ,FM;/定义变量printf(*分数转化为小数*);/while(2)while(1) printf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论