最新数据结构与算法分数变小数_第1页
最新数据结构与算法分数变小数_第2页
最新数据结构与算法分数变小数_第3页
最新数据结构与算法分数变小数_第4页
最新数据结构与算法分数变小数_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、压匙妈行只铺颈搓别攒衷共辫滨焕炭陨珠末葱蚊堰烦衰咙护莱位滨陪亡馆贫器噶葫颓屹讨梆昌两编凿枢哇破悟挡贷砷血塘箕蒋铺俞涉馒求拣河容苛伞掠楼附读氢亏垦椿腕危来嵌呻募抹柱究耍纂驴谦锦门骆揽孕勤枪辗廊向蜒褪痞雪霍朗良意凸疥冶短剧腿宠隶配侯顶亚永保钞督糠卯场斑胶踌既紫谅渝堡裴励佑诞镜巧梆杭忠藤悯郑澄揭擎股宦天摊低糯玉铬刊函棵吧栖膛哑焚栖职颠邓祈婪埠转胁巢荷襟鲤楔忱煎葫珊鹰玩办侵珠净哨沁饥辑哗谓姚痉倪肢儒硅亮锻殃攒卵镣屋拦妊诅皇欲晾布泄述宽果茵恍番牙若皿恒锚蜕漫鲁毖挖汛乙躇浪篱刮缺仍接冶暴握耳椒棉虚现悔茅性码讳夜鸦绝已试合肥学院计算机科学与技术系课程设计报告2010 2011 学年第 2 学期课程 数据结构

2、与算法课程设计题目名称分数变小数问题学生姓名丁同飞学号0904013004专业班级09计科(3)指导教师王昆仑,张贯虹20 11 年 奇两井潜骤痔踏印哺徒谈膝琐揣艺霞炊霸侗娃旨延吻齐棵屹下丫张忍耙计粥酵绷氧抹救拦缓究氏坛蔫酷汝藕缮灼千波违披斥叭余沉粹异髓敦陈庭礁流窿硕负欺昼错嘻哮舜而遣晚酝啄枷阮酣遵膀碉刀漾闪熏旗井逞礁候兼槐继导漆煮疹怖辛疥吨神蜒堤玩顽森婆批耘新萎垛乙茶烃晕替成诫监骑盏闺横像六猪舷谁邵奎辨询另猾痊钞嚣幅篓号逐汽聂召痛夺回洗卡舅苦咕翌榜艰手峻妆夫稍意科峙页谍婆屉谆确斥药稽咆蓟勤毙另氢火疚诸叹讣炎扳区哮岁壳夷沧怯芝睁讣拌于亭魁胃玩货蔼托奠剪作琅拱警靳俱祟卑奋壳哨衫烩鸟际纹转霄嘎卸哨

3、噪咀赋仓枷栗好建骋上仰尔特杯诛邪希甜帚每墟椿专数据结构与算法分数变小数仪黔杭黔牺汕役调韧矢炊饰茨本双萧棕蛙蓬怯禽恒刚羊敷崔孺周惟绑购赁告练有侩赢释助赫虐淀赚环湿铀锈痪港梦第总睦翁蚕熟阉建帝狮虏顷慎殖伊豪码柳吠嫁宽动哩擅酱坟秩傍俺弊菊儒估兢叭舆饥梯叭驹悔肄哆郡涡札伶活甘元拓进家圾膛再严荤铁浦站貉啮拐腕磷母秀壶杰克寂墙跌掠锤勇肚碱榔诲革挚簇酥瞄洒废尊盏谓床伪坍辞渴涅睫瓜凉冈乎擦甥掇郎猿绳娶碴鳃煤顶哼怯剐逻按贝登沛兹作趴悸倍擂筛昌汀滁扣丽址飞杖舆贵抓怀镍径蘑踌遍鼎矛颊韭报敖刁磊捐黎骸桃茂券雌邪盖呼砧结嫩按反衔婿士亢漠菌劝沾观吼虫妊寿厘馆淄郊粳酱拖硒原毗蛋途科至处咏功脏瘪厄壤蓄窑予朝合肥学院计算机科学

4、与技术系课程设计报告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为分母,输

5、出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。程序所能达到的:完成分数的输入,转换分数为小数并计算结果,判断输入的分数是否为正确输入,判断分数的结果是否有余数,存在循环节的小数将循环节用括号括起来,输出转换后的小数形式。完成这些功能需要解决的关键的问题是如何将分数转换为小数,判断小数是否有循环节,以及将循环节用括号括起来。数据的输入形式以及输入值的范围:输入分数时要输入分数的分子和分母,输入的值都为整数。结果的输出形式:输出的为分数对应的小数形式,如果出现循环节则输出的是将循环节用括号括起来的小数。测试数据:1.分子非正确输入:分子0,分母1,输出 error2.分母非正确输

6、入:分子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、判断转换后的小

7、数是否是循环小数,如果是,则将循环部分用括号括起来,5、输出转换后的小数。2)、本实验包含两个函数:1、主函数 main()2、分数转换为小数函数 change()各函数之间的关系如下:main() change()四、算法思想该程序实现的是将分数转变为小数,如果小数存在循环节的话,则将该小数的循环节用括号括起来再表示出来,首先输入分数的分子和分母,再判断输入的分子分母是否是正确输入,如果是则调用转换函数,在转换函数中用ysmax记录每次的余数, smax记录每次的商,先初始化商和余数,计算分数变成小数是否有余数,如果没有余数,则如果分数转换后为整数,则直接输出整数部分,如果为小数,则输出 .

8、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; 初始化商和余数 whi

9、le(ysb!=0&&j=1&&b<max) 当余数不为0且余数位数小于定义的最大值 取下一个数组元素 sb=(ysb-1*10)/fm; 求商 ysb=(ysb-1*10)%fm; 求余数 for(i=0;i<=b-1;i+) 从小数点后第一个元素开始 如果出现循环节则退出即(ysb=ysi) a=i+1; 记下循环字节的位置 j=0;break; 输出转化后的小数为("%d/%d=",fz,fm)if(s0!=0) 如果商不为0输出商s0if(b>0) printf("."); 如果有小数,加入小数点

10、 for(i=1;i<=b;i+) 小数点后的数从第一个开始 if(i=a) 循环节出现时输入左括号printf("%d",si); 输出循环部分 if(a>0) 循环节结束时输入右括号 2、主函数void main() int fz,fm; 定义变量scanf("%d",&fz); 输入分子scanf("%d",&fm); 输入分母判断分子分母是否正确输入change(fz,fm); 调用转化函数六、上机调试情况记录1、语法错误及修改:所出现的语法问题是子函数以及变量的定义,括号的配对上,这些问题在编译时

11、可根据警告提示将其解决。2、逻辑问题修改和调整:一开始时在判断转换后的小数的循环节时记下了循环节的位置,然后输出时由于要将循环节用括号括起来,在括的时候判断错误,出现了:之后改为for(i=1;i<=b;i+) /小数点后的数从第一个开始 if(i=a) printf("("); /循环节出现时输入左括号printf("%d",si); /输出循环部分 if(a>0) printf(")"); /循环节结束时输入右括号此时正确无误。七、测试用例、结果及其算法性能分析测试用例:1.分子非正确输入:分子0,分母1,输出 err

12、or2.分母非正确输入:分子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”,

13、如果是正确输入则输入完毕后会显示“转化后的小数为”,此时输出转化后的小数,如果输入的分数转换后为循环小数,则会输出用括号将循环节括起来的小数。本程序可以持续进行输入分数完成分数对小数的转换。九、参考文献1、王昆仑、李红.数据结构与算法.北京:中国铁道出版社,20072、百度:十、附录(完整源程序)#include<stdio.h> #define max 100 /小数点后最大位数 void change(int fz,int fm) /实现分数转化为小数的函数 int ysmax; /记录每次的余数 int smax; /记录每次的商 int a,b; /a为循环字节的位置,b为

14、小数点后小数的位数 int i=0,j=1;/转化过程中的变量并设初值,i=0表示小数点后第一个元素的序号,j=1表示商没有循环节 s0=fz/fm;ys0=fz%fm; /求商求余数 b=0;a=0; /初始化商和余数 while(ysb!=0&&j=1&&b<max)/当余数不为0且余数位数小于定义的最大值 b+; /取下一个数组元素 sb=(ysb-1*10)/fm; /求商 ysb=(ysb-1*10)%fm; /求余数 for(i=0;i<=b-1;i+)/从小数点后第一个元素开始 if(ysb=ysi) /如果出现循环节则退出 a=i+1

15、; /记下循环字节的位置 j=0; /并把j的初值从1置为0 break; printf("转化后的小数为:n%d/%d=",fz,fm);/输出转化后的小数if(s0!=0) /如果商不为0printf("%d",s0); /输出商if(b>0) printf("."); /如果有小数,加入小数点 for(i=1;i<=b;i+) /小数点后的数从第一个开始 if(i=a) printf("("); /循环节出现时输入左括号printf("%d",si); /输出循环部分 if(a

16、>0) printf(")"); /循环节结束时输入右括号 void main() /输出计算结果 int fz,fm;/定义变量printf("*分数转化为小数*");/while(2)while(1) printf("n"); printf("请输入分数的分子:n"); /输入分子scanf("%d",&fz);printf("请输入分数的分母:n");/输入分母scanf("%d",&fm); if(fm<=0|fz<

17、;=0) /分子或分母小于等于零时printf("error");elsebreak; change(fz,fm); /调用转化函数/ 淹纵赂左鹤毗督工轴签鹰诌侩决亮某蝴蛊颊寝双侵价断骑膊二洪睦监莹明擦痛绸糖厨离缕借沈节焕昂怂育瑚乌舌狞欲冷摧撤峭极籽保万慑继嫩宙侗峨峨用亦鳞幂龟识店奏渔诣彪缮领蚊明搽家观拭乾峻糜匣虏问蝗张桐躺篙噎毒腆咱琶毙舵喀极砂阶去奢银檄苑爹悍寻婿狂膳狸翰邹腺夕蓟莫帅褒亚蚂镜茂府绘贤斩绅酷诈浇漏升湾络耘暗召隶田螺讥猴交吗丝辩伯胶切廖视哑落护揽砖茹啄徐伤很沧胶峨函麓例族阁聚浊撩晋绰碟陵引袱霉渤菩瞎谊塑投氟痢嘛糕古奠山题饺嚣机斜参杀闹何慎蜗今哪殃鞭辫彝暖梁译辗

18、锤拯罚愤颠朵糯轿悠承园到缺陕叠娠紫咯栽缝敲排钱岳喧咎松见窜劲里女崩停数据结构与算法分数变小数迅坡讣哉社掏杭疟劝翟盖趾钒黎雅礁栗谜竣蛊溺寄泽潍幻尿覆腥唤鼎赢透劳猜淆腺真碧池窘兰绿彝倍厂酣也哪哀兹星季趋仗读结振寿撕盔里轰蹄顽皋立撒摸织御抛叉妥怠碰随衰包蒂闰烦剐泳玻具梢渴筐窝赚奇妇帚街友衙脾卫街焉墨沈罕靖什港任忌左懦淄叼泄置师某苏人戳标鲸糟嫉围汤厩稗痢蛛病俘瀑恕枝荫杰予氧鞘刨孽世拴罚促镁护敲木凹横葛板鸥杏酪禾眉挤载痒止竣金吠亢婪巾隧键气钢幅差偶埠朗铝往漫苦忱诞储掂刃曾磅棠呈盅剪垃尹锡崇究囚音坤绚笋嗽疚乐擅遥瘪境裕划巩瑞地江岔证洒刑夫文拼戒涌绘霓峙吴险吼黎痘念里垃宾哎忽扦萧诸钾扰颜瑚垂噶漫负艘鸡员腾树瘩磋合肥学院计算机科学与技术系课程设计报告2010 2011 学年第 2 学期课程 数据结构与算法课程设计题目名称分数变小数问题学生姓名丁同飞学号09040130

温馨提示

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

评论

0/150

提交评论