C++大作业阿拉伯与罗马数的转换Word文档格式.docx
《C++大作业阿拉伯与罗马数的转换Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++大作业阿拉伯与罗马数的转换Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
2.2计数规则3
2.3组合规则3
2.4分析3
2.5流程图4
3.程序详细设计5
3.1关键代码分析5
3.11罗马数据转换成十进制数5
3.12将十进制数转换为罗马数据6
3.2疑难问题解决6
4.使用情况7
4.1展示各种的功能运行情况7
5.总结7
5.1程序的优点和缺点7
5.2遇到的困难及解决的问题7
5.3收获总结8
6.参考文献8
1.概述
1.1开发环境:
本档案利用DEVc++编译流程,可根据所需目标简单迅速的实现阿
拉伯数字和罗马数字的相互转换,准确高效。
主要的功能有信息录入,转换通道的选择,数字的正确转换,多次进行数字转换等。
本程序专门为阿拉伯数字和罗马数字的相互转化而设计,为了方便操作程序简化了界面的操作,使信息的录入更加方便,达到事半功倍的效果。
此程序采用面向对象的DEVc++编写,兼容性好,准确度高。
运用了c++程序数组的专业知识。
1.2已知设计参数或设计前提
1.2.1开发平台:
DEVc++
1.2.2已知:
用已知的十进制数字根据对照表将其转换为罗马数字,用已知的罗马数字根据字母的前后判断,对照表将其转换为罗马数字
1.3设计内容及要求
1.3.1提供十进制转换罗马数字或者罗马数字转换十进制的选择通道
1.3.2对于需要转换的数字进行全面正确的录入
1.3.3实现十进制转换罗马数字或者罗马数字转换十进制
1.3.4实现转换后数字的正确输出
1.3.5第一次转换完成后还可以继续进行第二次转换,满足重新选择通道
1.4课程设计小组人员
组长:
刘良成员:
刘良刘伟周豪
2.程序概要设计
本程序为一个翻译程序,将一种表达形式换算成另一种表达形式。
该题是把罗马数字转换成十进制数或者把一个十进制数字转换成罗马数字。
初步设想:
输入一个字符数组,即一个罗马数字,然后按照其位数上的权值展开后输出,即输出一个十进制数。
罗马数字有如下符号:
I
(1),V(5),X(10),L(50),C(100),D(500),M(1000)。
反之,输入一个十进制数字,根据对照表将其转换为罗马数字
2.2计数规则
2.2.1若干相同数字连写表示的数是这些罗马数字的和,如III=3。
2.2.2小数字在大数字前面表示的数是用大数字减去小数字,如IV=4。
2.2.3小数字在大数字后面表示的数是用大数字加上小数字,如VI=6。
2.3组合规则
2.3.1基本数字Ⅰ、X、C中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个,放在大数的左边只能用一个。
2.3.2不能把基本数字V、L、D中的任何一个作为小数放在大数的左边采用相减的方法构成数目,放在大数的右边采用相加的方式构成数目,只能使用一个。
2.3.3V和X左边的小数字只能用Ⅰ。
2.3.4L和C左边的小数字只能用X。
2.3.5D和M左边的小数字只能用C。
2.4分析
2.4.1罗马数字转阿拉伯数字
从前往后遍历罗马数字,如果某个数比前一个数小,则把该数加入到结果中,反之,则在结果中两次减去前一个数并加上当前这个数。
比如XVIII=18,其对应的阿拉伯数字表示为10_5_1_1_1,因此结果为10+5+1+1+1=18。
XIX=19,其对应的阿拉伯数字表示为10_1_10,因此结果为10+1+10-2*1=19。
2.4.2阿拉伯数字转罗马数字
把所有小数字在前的组合也作为基本数字,做一个对应的数值映射表。
例如:
4=1-5=IV,9=1-10=IX,40=10-50=XL,90=10-100=XC,400=100-500=CD,900=100-1000=CM。
2.5流程图
3.程序详细设计
3.1关键代码分析
cout<
<
"
罗马数据--->
10进制数(按1)"
endl;
cout<
10进制数--->
罗马数据(按2)"
cin>
>
select;
//选择模式
以上步骤为选择是否将罗马数字转换成十进制数,即选择模式。
引用if条件选择模式,如图1
图1
3.11罗马数据转换成十进制数
请输入罗马数据:
;
rome;
d=0;
inti=0;
for(i=0;
rome[i]!
='
\0'
i++)
{
if(rome[i]=='
M'
)d=d+1000;
D'
)d=d+500;
C'
)d=d+100;
L'
)d=d+50;
if(rome[i+1]=='
X'
&
rome[i]=='
I'
){
d=d+9;
i=i+2;
}else{
if(rome[i]=='
)d=d+10;
}
V'
d=d+4;
}else{
)d=d+5;
)d=d+1;
}
'
\n'
转化成十进制数为:
d<
选择通道1,将罗马数字转换为十进制数,如图2
图2
3.12将十进制数转换为罗马数据
if(select==2)
{charM,D,C,L,X,I;
intn;
请输入十进制数据:
n;
转化成罗马数据为:
covert2Roman(n);
与上述情况一致,选择通道2输入十进制数将之转换为罗马数据,如图3
图3
需要指出,程序中多次使用选择结构,可见掌握好基本结构的重要性,
3.2疑难问题解决
输入代码时不注意细节问题,比如大小写问题,代码源问题,造成代码错误,进而程序运行失败,
4.使用情况
4.1展示各种的功能运行情况
选择是否将罗马数字转换成十进制数
图4
罗马数据转换成十进制数
图5
将十进制数转换为罗马数据
图6
5.总结
5.1程序的优点和缺点
该程序可准确迅速实现罗马数据与十进制数据间的转换,但相比于c语言及java相比稍微复杂。
但c++可以制作很多c语言及java实现不了的东西。
本程序可以任意结束,应用方便。
5.2遇到的困难及解决的问题
输入代码时粗心的忘记某些符号,导致程序错误很多,之后又费劲改回来,运行程序时不知道如何操作,最终翻开课本,与同学交流得知方法。
5.3收获总结
C++语言课程设计和现代计算机技术的实际应用相结合,在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。
使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。
使我们体会到自身知识和能力能在实际中的应用和发挥。
不但可以激发创新意识,还可以开发创造能力、培养沟通能力。
这次学习时间虽然仅有一个星期,但确实使我受益非浅。
通过实习我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了对c++的使用技巧。
另外,学习中冯老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。
原来是我认为可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。
虽说捧着自己的成果很高兴,但成果背后总是付出很大的努力。
一个多礼拜中,我们有过山穷水尽的困惑;
有过柳暗花明的惊喜;
有过唇枪舌剑的辩论;
有过相互鼓励的安慰。
一个多礼拜的时间我们经历了很多,也收获了很多。
与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。
经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题.
一个多礼拜的挣扎,绞尽脑汁终于带着麻木的手指和大脑脱出那堆“泥潭”。
现在的心情是如鱼得水,干涩的眼睛前方是万里晴空。
终于,所有的努力即将化成了一个个铅字,打印机“滋滋”的声音仿佛已经宛如天籁般悦耳地在耳畔响起。
此时此刻,真想把一切抛上天空。
高呼:
“出来了!
我的成果即将出来了!
”,心里也在默默的感慨着:
“有志者,事竟成,破釜沉舟,百二秦关终归楚。
苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
”
做出了人生第一个程序,展示了镐京学子的优良作风,感谢学院给我们这次机会,感谢自己及其团队能坚持到底。
6.参考文献
《c++程序语言设计》