数制转换问题_第1页
数制转换问题_第2页
数制转换问题_第3页
数制转换问题_第4页
数制转换问题_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计

设计题目:数制转换问题

学生姓名:

专业班级:10计算机科学与技术(1)班

指导教师:

完成时间:2012-6-2

信息工程学院院计算机科学院与技术系

课题名称数制转换

院系信息工程学院年级专业10计科⑴班

学号姓名成绩

1042151140严根

课题设计目的:

二.一.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和

设计能力;

三.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基

本方法和技能;

四.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

四.训练用系统的观点和软件开发一般规范正行软件开发,培养软件工作者所

课题设计

应具备的科学的工作方法和作风

目的与

设计意义

课题设计意义:

锻炼我们的编码能力,直正理解数据结构

的编码思想,并且锻炼我们的动手能力和成员间的配合,提高程序编写能力。

指导教师:姚丽莎

2012年06月02日

1引言4

1.1课程背景.....................................................................4

1.2课程设计目的.................................................................5

1.3课程设计内容.................................................................5

2系统设计方案.........................................................................6

2.I系统概述.....................................................

2.2系统结构设定..................................................................9

2.3系统功能描述................................................................10

3系统运行环境与结果测试............................................................12

3.1运行环境....................................................................12

3.2运行结果测试.................................................................13

6.总结...............................................................................17

5.参考文献...........................................................................18

6.附录源程序代码...................................................................19

图1.1数制转换程序运行图

1.2课程设计目的

不同数制之间的转换问题一直是计算机方面的一个重点,无人不知,无人不晓。

在计算机内部都是用二进制来表示各种信息的。之所以采用二进制数,首先是由于二

进制数用电子器件比较容易实现。例如,晶体管的导通或截止,电脉冲的有或无,开

关的通或断,电位的高或低等恰好都可以表示为二进制数1或。[1]。其次是由于二进

制数比较简单,这就简化了运算器等物理器件的结构设计。但在现实生活中都以十进

制数来进行计算,而且在使用程序语言对计算机进行操作时,还经常会用到十六进

制、八进制等。本软件就是为了使数制转换问题更加简便化,更利于操作而开发,开

发平台为最新的微软公司出版的市面最新系统Windows7,而且可以作为自身的运行

平台非常广泛,包括Windows98/2000/XP/Vista等等。

1.3课程设计内容

任意给定一个M进制的数x,请实现如下要求

1.求出此数x的10进制值(用MD表示)

2.实现对x向任意的一个非M进制的数的转换。

至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法

解决)。

由于不同数制的优缺点不同,比如二进制数的优点有简易性、可行性、逻辑性和

可靠性,但是缺点也显而易见,如位数长,读写困难等等,通常人们都是采用八、十

六进制作为二进制的缩写;然后八进制和十六进制也各有自己的优缺点,所以本程序

系统就是为了解决数制转换之间的问题而设计,本程序是基于数据结构中的数组和

栈以及String字符串[2],分别通过三种不同的方法来实现二到十六进制之间的任意

数的相互转换,以便使用计算机的人们更加方便和快捷的了解数制之间的转换关系

和分析其过程。常用计数制的表示法如表17所示:

表1-1常用计数制表示法

十进制二进制八进制十六进制

0000

1111

21022

31133

410044

510155

611066

711177

81000108

2系统设计方案

2.1系统概述

本程序用了三种不同的方法实现对数制的转换,每种转换方式都有自身的特点。

在用数组实现时分为两个部分,首先对整数部分进行转换,然后对小数部分进行转

化。

图2.1数组初始化

图2.1是数组的初始初始状态,对于二进制数111.111的转化,首先将其转化为十进

制数7.875,然后在将该数分解为整数部分和小数部分,向其他进制数进行转换[3],

如向三进制数转换。整数部分转化完时程序的图形为如图2.2所示:

图2.2整数转化数组形式

然后再进行小数部分转化,小数部分的值就是0.875与基数3不断相乘后整数部分的

数值,由于可能在进制的小数部分不能完全转化,我们可以规定最多转换的位数,

在本程序中就规定最多转化30位,小数部分转化示意图如图2.3所示:

图2.3小数部分转化图

基于戌的实现,,栈的初始状态如下图2.4所示:

图2.4栈的初始化

由于栈是先进后出[4],所以我先对小数本分进行转化对于十进制数8.875向二进制

转换时,小数部分转换完时栈的情况如图2.5所示:

图2.5小数部分转化图

整数部分转后的情况如图2.6所示:

图2.6整数部分转化后情况

字符串的转换类似于数组[5]的转换,具体道理就不一一道来了,主要转换函数如下:

voidDec2MStack(intM,doubledec,Stack<char>&result)

(

intiter=0;

intpolarity=l;

charTable□={‘O':'1','2','3','4','5','6,,'7',

'8',飞

result.Erase();

intk=0;

intresult1[100];

doubledecimal=0;

if(dec<0){

polarity=T;

dec*=T;〃转换为正数

)

decimal=dec-(longint)dec;〃小数部分处理

inttemp=0;

intloop=0;

if(decimal>le-6){

resultl[k++]='.';

while((decimal>le-6)&&loop<30){

temp=decimal*\!;

dccimal=dccinial*M-tcmp;

resultl[k++]=Table[temp];

loop++;

}

for(intm-k-l-)

result.Push(resultl[m]);

}

while(dec>0.5){//停止条件改为0.5是为了消除浮点数在计算机内存储的误

iter=(longint)dec%M;

dec二(longint)dec/M;

result.Push(Table[iter]);

}

if(polarity--1)result.Push;〃如果为负数则压入负号

)

2.2系统结构设定

本系统的数制转换分别由三种不同方法实现:

(1)用String实现数制转换。

(2)用数组实现数制转换。

(3)用栈实现数制转换。

系统功能结构流程图2.7如下所示:

图2.7系统功能结构流程图

2.3系统功能描述

本系统可以实现二进制到十六进制之间数的相互转换,且支持小数,具有一定

的容错能力和鲁棒性,可以在非法输入下有正确的处理,不至于程序崩溃,进制转

换分为三种方法,分别是用String.数组和栈来实现。通过测试,本程序能够正常

运行和处理正确和不正确的输入,且转换没有出现错误,达到了预期目标。不合法的

输入主要分为两类:一类是输入的数据等于或大于其基数;一类是输入的数据本身包

含不是数字的字符。对于这两类错误都提示转换失败,如图2.8所示:

一一任意进制互相转换系统

转换

方穿换

R:2

I•进5

kEQJA数

制56

^eAd孟

K鞋

吗23

JR.Y、y

、5

l嘉

¥Q字4

EJA甯

J败

A巴

不k;

T一YN

A:

图2.8测试图

3系统运行环境与结果测试

3.1运行环境

在本课程设计中,系统开发平台为Windows7,程序设计语言为VisualC++6.0,

程序的运行环境为VisualC++6.0oVisualC++一般分为三个版本:学习版、专业版

和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任

意一种,在本课程设计中,以VisualC++6.0为编程环境。

MicrosoftVisualC++6.f)是Microsoft公司的MicrcscftVisualStudio6.0

开发工具箱中的一个C++程序开发包。VisualC++包中除包括C++编译器外,还包括

所有的库、例子和为创建Windows应用程序所需要的文档。自1993年Microsoft公

司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员

进行软件开发的首选工具。VisualC++从最早期的1.0版本,发展到最新的7.0版

本,VisualC++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。

最新的7.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版

本做了较大改进。

虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局

限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。所以实际中,更多的

是以VisualC++6.0为平台。

VisualC++6.0是Microsoft公司推出的目前使用最广泛的基于Windows平台的

可视化编程环境。VisualC++6.0是在以往版本不断更新的基础上形成的,由于其功

能强大,灵活性好,完全课扩展以及具有强大的Internet支持,因而在各种C++语

言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。

VisualC++6.0秉承VisualC++以前版本的优异特性,为用户提供了一套良好

的可视化开发环境:主要包括文本编辑器、资源编辑器、工程创建工具、Debugger

调试器等等。用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文

件、编译、链接、运行、调试应用程序。

3.2运行结果测试

本系统进制转换分为三种方法:String,数组和栈。如图3.1所示:

图3.1系统运行图

故分三个部分对其进行测试。

1、String实现数制转换

正确输入下的转换

二进制数1H,转换为十进制数为7。输入3进制-2111,转换为8进制为-103。输入

16进制2771.1A,转换成2进制数为100111011100001.000110L分析测试如图3.2

所示,结果正确。

C:\Users\Adrrnisv凯。r\Desktop\毋啜设计\zhouwdngyuan\Debug\zhouwangyuan.exe

换任意进制互相转换系统-

4

st鬻

r组i

n3进

Tf行

月*

:1的

«*敌

1:2制

11进

:1的

4..的

*>5奂

5^7

»'1:

屿

AT了Yor

;'

n

、X-

xIT

y,

•吉M•4

期X

入X3

古S•21

•二

u1料1

・Ai8

口TUM

H4土03

m—

■丁

4吗

仃YN

灭5I

一or

松继续进行吗iorN:

待我换飘的进制:16

ifi.转:负的数字:2??1.1A

通输A转投到的数的进制:2

转换后的徽是।10011101110001

在擦缭第丁翁换吗,VorN:

图3.2String转换测:式图

非法输入下的测试

不合法的输入主要分为两类:一类是输入的数据等于或大于其基数;一类是:输入的

数据本身包含不是数字的字符的。对于这两类错误都提示转换失败。如图3.3所示:

转换后的数是:100mcm0001.0001101

还?桂续就行转换吗:VorN:

上继续进行吗।VorN:

清输入待转搏数的进制:5

请输入普噌的整字n523

你魁由画据看问题,转换失败?

还继续逆行吗:VorN:

y

遭翼人聋舅舞演进制修

廖歌蕊露靛「转赢飒

orN:

图3.3String非法输入测试图

2、数组实现进制转换

类似上述String转换的正常输入转换结果如图3.4所示:

C^UsersXAdministratOfXDesktopXi^^^gifXzhojv.'angyuanXDebugXzhouv.angyjan.exe

任意进制互相转换系统・

转换方式选择:_

行贪1:同String类进任转换

需懿翻般

先择

I・

入:2

苞s

I土

入:2

、{

I”0110

于01

星010101

电10

I数:

-后

I星.3S

*至.34Yt

爵3.7

、34

翳.

1费

丕.

进or

1加

4丕

V4.3344141

*奥.

、23.132N

T主,Y0•

•进or

制16

I加

4-还

51.

-赞.

>由1558Y

翳8

I、a

t

7包6

#续.•

;换

I、24Y

吗1

、N

%0VO:1

:Y

图3.4数组转换正常输入测试图

非法输入测试如图3.5所示:

■CiXUsersXAdministratorXDesktopXi^fS^HXzhou.,.'angyudnXDebug>houv.'angyuan.exe

任意进制互相转换系统―

转换方式选择:

II懒SF换

1进

:2

、t

1进.•1

本2

1一•

吉-

、(

1子2

X据

2间1

、I

^吗YorN•

c-4.进•y

M的

、6

1OH菖•

1I字0

B据

:.题•

吗1

进.Y•y

至•

换or

1、R•

图3.5数组转换非法输入测试图

3.栈实现进制转换

正常输入测试结果如图3.6所示

n.exe

请:3

一:5

04制

:1的

,i茁i0

转.4

95聂YN

还:

or制

出2

后LS0

翳1:0YN

^or制

花3

后,

・22

还-

u10吗

Yor进N

请•

入6

:A的

进0

续.

10吗

换Y

图3.6栈转换正常输入测试图

非法输入测试结果如图3.7所示:

,C:\Users\Administrator.Desktop\:-*=i5vt'7hou.-.'ang.uarDebug'^houv;ar.gyjan.

任意进制互相转换系统―

要换方式选择:

方式1:用011*:109类-

选择

—>

^13的

入r5

kTH

^灯

T字

r入

:5题

4问

—,

•吗

入YN

丕:y

的M

下3

€or迸

入e

尔.|0.

看:?

吗,

还-

工YN■y

主>

:的u

IBr-.>

ror进■

图3.7枝转换非法输入测试图

综合上述测试结果可知,本程序具有一定的鲁棒性,在非法输入下有正确的处理,

不至于程序崩溃。在正确输入下,能实现进制间的正确转换,达到预期目标。且在完

成数制转换的工作以后只要按照提示输入N(n)即可退出本程序系统,不在需要鼠标

点击右上角那个退出按钮,方便了程序使用者和泥高了工作效率。如图3.8所示:

任意进制互相转换系统---------二=——

1式盟

方1

式2

方3•

选择

4式

1

:2制5

^数

青:1

£子

45制

23进

:1的

数:10

后5

得•.

58吗

换1.1Y8N:

编N

仃Y

:or:n

图3.7程序退出输入示范图

输入之后接着按Enter键即可自动退出本程序的运行。

6.总结

通过本次数据结构的课程设计,我学习了很多在上课没懂的知识,并对数制转换问

题的算法有了更加深刻的了解,更巩固了课堂中学习有关于堆栈的知识,真正学会

一种算法了。当求解一个算法时,不是拿到问题就不加思索地做,而是首先要先对它

有个大概的了解,接着再详细地分析每一步怎么做,无论自己以前是否有史理过相

似的问题,只要按照以上的步骤,必定会顺利地做出来。

这次课程设计,我在编辑中犯了不应有的错误,设计统计字符和合并时忘记应该怎

样保存保存数据,在不断分析后明确并改正了错误和疏漏,使我的程序有了更高的

质量。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合

作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认

真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,

用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而

废。

三人行必有我师,遇到何题我们一起讨论,研究,错了再写,写了在改.经过多次的修改,

调试,运行,添力n,终于最后在大家的欢呼声中,完成了我们的任务.虽说是累了点,但

我们也从中找到了自己的快乐,每当完成一个新的函数时,那心情是激动啊,这毕竟

是自己弄出来的,同时也使我感受到了学习的快乐!

5.参考文献

[1]唐策善,李龙澎,黄刘生。数据结构——用C语言描述,高等教育出版社,

2011.2

..[2.王红梅,胡明,王涛.数据结构.C++版),2005年7月第一版,清华大学出

版社,2008..

[3]伍俊良VisualC++课程设”与系统开发案例2002年11月第1版,清华大

学出版社。20C3.1

[4.朱时银,马承志,杨飞,王华.C+.Builde..编程实例与技巧,2001年2月第

一版,北京:机械工业出版社.2001.2

[5.孙鑫,余安萍.VC++深入详解,2007年3月第I版.电子工业出版社,2007.3

[6.杨富国,王浩,唐巧奇,王健.Visua.C++程序设计开发案例解.,2006年3月第一版,北京:清

华大学出版社,北京交通大学出版社,2006.3

6.附录源程序代码

Functionl.h

#include<string>

ttinclude^Stack.h,z

usingnamespacestd;

intM2Dec(intM,string&Mdata,double&result);

voidDec2MString(intM,doubledec,string&result);

voidDec2MArray(intM,doabledec,charresult[]);

voidDec2MStack(intM,doubledec,Stack<char>&result);

Slack,h

#ifndefSTACK_H

#defineSTACKJI

#include<iostream>

usingnamespacestd;

SdefineMAX_S1ZEIOC

template<classT>

classStack

private:

intiter;〃游标

Tstack[MAX_SIZE];〃内存,存储数据

public:

Stack();

intGetTop(T&temp);

intPush(Ttemp);

intPop(T&temp);

intTsEmpty();

voidErase();

);

:f、X*■"

*j**J**J*1*J**p*J»*J**|**p*p*|**J**J**j**p*|**p

VZ«ZZ«X*

«、,「,I、,卜*T、*1、,1、,卜,卜«、*1、,*、,4、***4、/A、,,、V«、*1、*•,,卜«、*1、

函数功能:堆栈初始化函数

输入参数:无

返回值:无

备注:无

»!**1**1**1*»!**1**1**1**1**!**!**1**1^*!**1**1**1*»!«*1**1*»!**1**1**1*»!*»!**1**1**1*

*T**T**1**T**T**1*

template<classT>

Stack<T>::Stack()

iter="l;〃初始化栈为空

:、<^K^、"、X**f«、X*%w«J««f««)«、“■^*^*、<^、X*、1^«f«■1«w«J««f«

^r*^i*^r*^S^S*T*<^«**«»

*X^*1**1^*1**A*>i^

*T**Y**Y*,A、^J**T*,卜f*Y**Y*f*|**?**Y**Y*,.、*Y**¥•,54、*Y*

函数功能:取得栈顶元素

输入参数:无

返回值:栈顶元素的值及状态信息

备注:有错误为-1,没错为1

*J«■曲.^^■■>%t*■^*1>%1«■■■>■>、>«X#.>■>KWKW■>、>«X*—>^L#\>^V*

*T**7**TX*T**7**f**^**T**7**r*^7^*T**7**T**T**7**T^*T**T**T**j**7**7**T**T**T**»^*T**T**T**^*

»^*»J*4、^p*j*^p^p*J*^p

温馨提示

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

评论

0/150

提交评论