当前位置:文档之家› 数制转换数据结构课程设计报告

数制转换数据结构课程设计报告

数制转换数据结构课程设计报告
数制转换数据结构课程设计报告

《数据结构》

课程设计报告书

题目:数制转换

系别:计算机科学与应用系学号:

学生姓名:

指导教师:

完成日期:2013—6—1

数制转换

1.需求分析

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

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

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

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

2.概要设计

程序流程可以用以下流程图来刻画:

A用数组实现 B用栈实现

3.详细设计

A.用数组实现该问题

D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其他进制的函数,它是将输入的十进制数x首先对需要转换的进制M取余,然后在对其取整,接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而M2D()函数是实现其他进制M转换为十进制,并将其转换为非M进制。M进制转十进制则是从该M 进制数的

最后一位开始运算,依次列为第0、1、2、……..N位并分别乘以M的0、1、2、…..N次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。

B.用栈实现

栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。

4.调试分析

(1)构造栈的方法通过查阅书籍知道了。

(2)数组的递归调用查阅相关书籍了解了。

(3)为了让界面表达更清晰,多次调试完善了界面。

5.测试结果

下面是我的测试函数及运行结果:

A.数组测试结果

B栈实现测试结果

6.总结

通过《数据结构》课程设计,我了解到数据结构是计算机科学中一门综合性的专业基础课。这次的课程设计使我对数组及栈有了初步的认识,虽然课程设计的不完善,但是在设计过程中我受益匪浅,通过查资料、网上搜索例子,让我学到了很多以前不知道的东西,提高我的分析和解决问题的能力,进一部掌握了应用系统设计的方法和不步骤,,也让我意识到自己所掌握的实在是太少了,只靠课本知识是不够的,应该多多上机调试,这样才能提高自己。

7.附源程序

A.数组实现

#include

#include

#define N 1000

int i,j,y,n,s;

int m,r,reminder;

int x; //全局变量默认初始化为0,不必再赋0了

D2M(int g,int h) //十进制数转换为其他进制数 {

int c[N];

i=0;

reminder=g%h;

g=g/h;

if(reminder>9)

{

c[i]=reminder+55;

i++;

}

else

{

c[i]=reminder;

i++;

}

if(g>0)

D2M(g,h);

for(j=i-1;j>=0;j--)

if(c[j]>=65)

printf("%c",c[j]);

else

printf("%d",c[j]);

return 0;

}

M2D(int e) //二进制和八进制数转换为十进制数,并这转换为其他进制数

{

int a[N];

printf("请输入%d进制位数:",m);

scanf("%d",&n);

printf("请输入%d进制的每位并使每位用空格隔开:",m); for(i=0;i

scanf("%d",&a[i]);

for(i=n-1;i>=0;i--)

{

y+=(int)pow(e,j)*a[i]; //强制类型转换,以免造成数据丢失

j++;

}

printf("请输出所得的10进制的结果: ");

printf("%d",y);

printf("\n需要转换的进制M:");

scanf("%d",&s);

printf("请输出转换成%d进制的结果:",s);

D2M(y,s);

return 0;

}

H2D(int f) //十六进制数转换为十进制数,并转换为其他进制数

{

int b[N];

printf("请输入%d进制位数:",m);

scanf("%d",&n);

printf("请输入%d进制的每位并使每位用空格隔开:",m); for(i=0;i

scanf("%x",&b[i]);

for(i=n-1;i>=0;i--)

{

y+=(int)pow(f,j)*b[i]; //强制类型转换,以免造成数据丢失

j++;

}

printf("请输出所得的10进制的结果: ");

printf("%d",y);

printf("\n需要转换的进制M:");

scanf("%d",&s);

printf("请输出转换成%d进制的结果:",s);

D2M(y,s);

return 0;

}

void main()

{

printf("请给定一个需转换的进制M(2or8or10or16):"); scanf("%d",&m);

if(m==2||m==8) //二进制和八进制转换成十进制 M2D(m);

else if(m==16) //十六进制转换成十进制

H2D(m);

else if(m==10) //十进制转换成其它进制

{

printf("请输入一个%d进制数:",m);

scanf("%d",&x);

printf("请输入需要转换成的进制M(2or8or16):");

scanf("%d",&r);

printf("请输出转换成%d进制的结果:",r);

D2M(x,r);

}

printf("\n");

}

B.栈实现

#include "stdio.h"

#include "string.h"

#include "math.h"

#include "limits.h"

#include "stdlib.h"

#include "malloc.h"

#define TRUE 1

#define OK 1

#define FALSE 0

#define ERROR 0

#define INFEASIBLE -1

typedef int Status;

typedef int SElement;

#define STACK_INIT_SIZE 10

#define STACKINCREMENT 2

typedef struct SqStack

{

SElement *base ; SElement *top ; int stacksize ;

}SqStack;

int InitStack (SqStack *S)

{

(*S).base = (SElement *)malloc(STACK_INIT_SIZE * sizeof (SElement)) ;

if (!(*S).base)

exit (OVERFLOW);

S->top=S->base;

S->stacksize= STACK_INIT_SIZE;

return OK;

}

int DestroyStack (SqStack *S)

{

free (S->base);

S->base = NULL;

S->top = NULL;

S->stacksize = 0;

return OK;

}

int ClearStack(SqStack *S)

{

S->top = S->base;

return OK;

}

int StackEmpty(SqStack S)//判断sqstack 是否为空

{

if (S.top == S.base )

return TRUE;

else

return FALSE;

}

int StackLength (SqStack S)//返回s的元素个数,即栈的长度{

return S.top-S.base ;

}

int GetTop(SqStack S,int *e)//若栈不为空,用e返回s的栈顶元素,返回ok

{

if (S.top > S.base )

{

*e=*(S.top-1);

return OK;

}

else return ERROR;

}

int Push(SqStack *S,int e)//插入元素e为新的栈顶元素{

if (S->top - S->base >= S->stacksize)

{

S->base = (SElement * )realloc ((*S).base,((*S).stacksize + STACKINCREMENT *

sizeof (SElement)));

if (!S->base )

exit (OVERFLOW);

S->top = S->base + S->stacksize;

S->stacksize += STACKINCREMENT;

}

*(S->top) = e;

S->top ++;

return OK;

}

int Pop(SqStack *S,int *e)

{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */

if((*S).top==(*S).base)

return ERROR;

*e=*--(*S).top;

return OK;

}

int StackTraverse (SqStack S ,int (*visit)(int ))// {

while (S.top > S.base )

visit (*S.base ++ );

printf ("\n");

return OK;

}

void conversion8(SqStack s)

{

unsigned n;

int e;

InitStack (&s);//初始化栈

printf ("n(>=0)=");

scanf ("%u",&n);

while (n)//当n不为0

{

Push (&s,n%8);

n=n/8;

}

while (!StackEmpty(s))//当栈不为空 {

Pop (&s,&e);

printf ("%d",e);

}

printf ("\n");

}

void conversion2(SqStack s)

{

unsigned n;

int e;

InitStack (&s);//初始化栈

printf ("n(>=0)=");

scanf ("%u",&n);

while (n)//当n不为0

{

Push (&s,n%2);

n=n/2;

}

while (!StackEmpty(s))//当栈不为空 {

Pop (&s,&e);

printf ("%d",e);

}

printf ("\n");

}

void conversion16(SqStack s)

{

unsigned n;

char d;

int e; InitStack (&s);//初始化栈

printf ("n(>=0)=");

scanf ("%u",&n);

while (n)//当n不为0

{

Push (&s,n%2);

n=n/2;

}

while (!StackEmpty(s))//当栈不为空

{

Pop (&s,&e);

switch(e)

{

case 0:e=0;printf("%d",e);break;

case 1:e=1;printf("%d",e);break;

case 2:e=2;printf("%d",e);break;

case 3:e=3;printf("%d",e);break;

case 4:e=4;printf("%d",e);break;

case 5:e=5;printf("%d",e);break;

case 6:e=6;printf("%d",e);break;

case 7:e=7;printf("%d",e);break;

case 8:e=8;printf("%d",e);break;

case 9:e=9;printf("%d",e);break;

case 10:d='a';printf("%c",d);break;

case 11:d='b';printf("%c",d);break;

case 12:d='c';printf("%c",d);break;

case 13:d='d';printf("%c",d);break;

case 14:d='e';printf("%c",d);break;

case 15:d='f';printf("%c",d);break; }

printf ("%d",e);

}

printf ("\n");

}

//选择

int choose()

{

int d;

printf("请选择你要进行的进制的转换:\n");

printf("如果是十进制转换为八进制请选择1\n"); printf("如果是十进制转换为二进制请选择2\n"); printf("如果是十进制转换为十六进制请选择3\n"); printf("如果您想全部转换请选择9\n");

printf("如果想退出请选择0\n");

printf("\n");

scanf("%d",&d);

return d;

}

void main()

{

int f=0;

SqStack s;

while(!f)

{

switch(choose())

{

case 1:conversion8(s);break;

case 2:conversion2(s);break;

二进制、十进制和十六进制及其相互转换的公式

计算机内部是以二进制形式表示数据和进行运算的;计算机内的地址等信号常用十六进制来表示,而人们日常又习惯用十进制来表示数据。这样要表示一个数据就要选择一个适当的数字符号来规定其组合规律,也就是要确定所选用的进位计数制。各种进位制都有一个基本特征数,称为进位制的“基数”。基数表示了进位制所具有的数字符号的个数及进位的规律。下面就以常用的十进制、二进制、八进制和十六进制为例,分别进行叙述。 一.常用的三种计数制 1.十进制(Decimal) 十进制的基数是10,它有10个不同的数字符号,即0、1、2、3、…、9。它的计数规律是“逢十进一”或“借一当十”。处在不同位置的数字符号具有不同的意义,或者说有着不同的“权”。所谓的“权”就是每一位对其基数具有不同的倍数。例如,一个十进制数为 123.45=1×102十2×101十3×100十4×10-1十5×10-2 等号左边为并列表示法.等号右边为多项式表示法,显然这两种表示法表示的数是等价的。 在右边多项式表示法中,1、2、3、4、5被称为系数项,而102、101、100、10-1、10-2等被称为该位的“权”。 一般来说,任何一个十进制数”都可以采用并列表不法表不如下: N10=dn-1d n-2…d1d 0. d-1d-2…d-m 其中,下标n表示整数部分的位数,下标m表示小数部分的位数,d是0~9中的某一个数,即di∈(0,1,…,9)。同样,任意一个十进制数N都可以用多项式表示法表示如下: N10=dn-1×10n-1十…十d1×101十d 0×100十d-1×10-1十…十 d-m×10-m 其中,m、n为正整数,di表示第i位的系数,10i称为该位的权。所以某一位数的大小是由各系数项和其权值的乘积所决定的。 2.二进制(Binary) 二进制的基数是2,它只有两个数字符号,即0和1。计算规律是“逢二进一”或“借一当二”。例如:(101.01)2=1×23十1×22十0×21十1×20十0×2-1十1×2-2 任何一个二进制数N都可以用其多项式来表示: N2=dn-1×2n-1十dn-2×2n-2十…十d1×21十d 0×20十d-1×2-1十d-2×2-2十…十d-m×2-m 式中任何一位数值的大小都可以用该位的系数项di和权值2i的积来确定。 3.十六进制(Hexadecimal) 十六进制的基数为16,它有16个数字符号、即0~9、A~F。其中A、B、C、D、E、F分别代表十进制数的10、11、12、13、14、15。各位之间“逢十六进一”或者“借一当十六”。各位的权值为16i。例如:(2C7.1F)16=2×162十12×161十7×160十1×16-1十15×16-2 二.3种计数制之间的相互转换 对于同一个数,可以采用不同的计数制来表示,其形式也不同。如: (11)10=(1011)2=(B)16 1.R进制转换成十进制的方法 具体的方法是先将其并列形式的数写成其多项式表示形式,然后,经计算后就可得到其十进制的结果。这种方法披称为按权展开法。对于一个任意的R进制数N都可以写成如下形式: N=dn-1 dn-2…d1 d0d -1d-2…d-m =dn-1×Rn-1十…十d1×R1十d 0×R0十d-1×R-1十…十d-m×R-m 其中,R为进位基数,Ri是对应位的权值,di为系数项,特此式求和计算之后,即可以完成R进制数对十进制数的转换。 例如,写出(1101.01)2、(10D)16的十进制数。 (1101.01)2=1×23十1×22十0×21十1×20十0×2-1十0×2-2,

三种不同方法解决数制转换问题

/////////////////方法一 #include #define S 10 void zh(int N,int r) { int L[S],top; int x; top=-1; while(N) { L[++top]=N%r; N=N/r; while(top!=-1) { x=L[top--]; printf("%d",x); } } printf("\n"); } main() { int w,z; scanf("%d%d",&w,&z); zh(w,z); } ///////////////////////////方法二 #include #include #define maxsize 50 void conversion(int n,int r) { int ss[maxsize]={0}; int i=0; int j; while(n) { ss[i]=(n%r); i++; n=n/r; } for(j=0;j

}//数制转换 void main() { int n=37; int r=4; printf("十进制数%2d转换为%d进制数。\n",n,r); conversion(n,r); } /////////////////方法三 #include #include #define maxsize 5 typedef struct { int data[maxsize]; int top; }seqstack; void init_seqstack(seqstack *s) { s->top=-1; }//栈的初始化 int empty_seqstack(seqstack *s) { if(s->top==-1) return 1; else return 0; }//空栈的判断 int push_seqstack(seqstack *s,int x) { if(s->top==maxsize-1) return 0; else { (s)->data[++(s)->top]=x; return (1); } }//进栈 int pop_seqstack(seqstack *s,int *x)

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

各种进制之间转换方法

各进制转换方法(转载) 一、计算机中数的表示: 首先,要搞清楚下面3个概念 ?数码:表示数的符号 ?基:数码的个数 ?权:每一位所具有的值 请看例子: 数制十进制二进制八进制十六进制 数码0~9 0~1 0~7 0~15 基10 2 8 16 权10o,101,102,…2o,21,22,…8o,81,82,…16o,161,162,…特点逢十进一逢二进一逢八进一逢十六进一 十进制4956= 4*103+9*102 +5*101+6*10o 二进制1011=1*23+0*22 +1*21+1*2o 八进制4275=4*83+2*82 +7*81+5*8o 十六进制81AE=8*163+1*162 +10*161+14*16o

二、各种进制的转换问题 1.二、八、十六进制转换成十进制 2.十进制转换成二、八、十六进制 3.二进制、八进制的互相转换 4.二进制、十六进制的互相转换 1、二、八、十六进制转换成十进制 方法:数码乘以相应权之和 2、十进制转换成二、八、十六进制 方法:连续除以基,直至商为0,从低到高记录余数

3、二进制、八进制的互相转换 方法: ?二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制 ?八进制转换成二进制:用3位二进制数代替每一位八进制数 例(1101001)2=(001,101,001)2=(151)8 例 (246)8=(010,100,110)2=(10100110)2 4、二进制、十六进制的互相转换 方法: ?二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 ?十六进制转换成二进制:用4位二进制数代替每一位十六进制数 例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 三、各种进制数的运算

数据结构课程设计数制转换

目录 1前言 (1) 1.1设计背景和意义 (1) 1.1.1数据结构简介 (2) 1.1.2选择算法的原因 (2) 1.2设计的原理和内容 (2) 2正文 (2) 2.1 设计的目的和意义 (2) 2.2 目标和总体方案 (2) 2.3 设计方法和内容 (3) 2.3.1模块划分 (3) 2.3.2主要程序模块 (3) 2.4 程序的设计思想和内容 (6) 2.4.1用数组实现该问题 (6) 2.4.2用栈实现该问题 (6) 2.5 设计创新和关键技术 (6) 2.6 程序调试 (6) 2.7程序流程图 (7) 2.8结论 (8) 参考文献 (9) 附录 (9)

1前言 1.1设计背景和意义 1.1.1数据结构简介 数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。 1.1.2选择算法的原因 在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。 1.2设计的原理和内容 设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。本软件采用C 语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。操作简单,界面清晰,易于为用户所接受。 2正文 2.1 设计的目的和意义 我们是计算机科学与技术专业的本科生,《数据结构》是我们重要的必修课程。当代社会学要大学培养出理论扎实,动手实践能力强的大学生。所以,本次课程设计的目的就在于通过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的认识。为后继课程的学习打下坚实的基础。通过本次数据结构课程设计,我们基本上掌握了课程设计流程,还掌握了一些知识和技能,这对于我们以后对于数据结构的学习有了很大的帮助和提高,加深了我们对数据结构的理解,,为今后的学习打下了坚实的基础。同时也提高了我们对于编程这方面的能力。 2.2 目标和总体方案 本次设计的目标在于设计出一个能够实现数制转换的程序,于是特制订了一个总体的方案:

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

计算机考试中各种进制转换的计算方法

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110 0100 换算成十进制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 = 0 第4位 0 * 24 = 0 第5位 1 * 25 = 32 第6位 1 * 26 = 64 第7位 0 * 27 = 0 + --------------------------- 100 用横式计算为: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 0乘以多少都是0,所以我们也可以直接跳过值为0的位: 1 * 2 2 + 1 * 2 3 + 1 * 25 + 1 * 26 = 100 2.2 八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 用竖式表示: 1507换算成十进制。 第0位 7 * 80 = 7 第1位 0 * 81 = 0 第2位 5 * 82 = 320 第3位 1 * 83 = 512 + -------------------------- 839 同样,我们也可以用横式直接计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 结果是,八进制数 1507 转换成十进制数为 839 2AF5换算成10进制: 第0位: 5 * 160 = 5 第1位: F * 161 = 240 第2位: A * 162 = 2560 第3位: 2 * 163 = 8192 +

西门子PLC的常用数制

西门子PLC的常用数制 西门子PLC的常用数制有:1.二进制数,二进制数的1位(bit)只能取0 和1这两个不同的值,可以用来表示开关量(数字量)的两种不同的状态。2. 十六进制数,多位二进制数的书写和阅读很不方便,为了解决这一问题,可以 用十六进制数来取代二进制数,每个十六进制数对应于4位二进制数。十六进 制数的16个数字是0~9和A~F(对应于十进制数10~15)。 STEP7的基本数据类型有:一、位(bit)的数据类型为BOOL布尔型,在编程软件中BOOL变量的值是1和0,用英语单词TRUE(真)和FALSE(假)表示。 位存储单元的地址由字节地址和位地址组成,如I1.2中区域标识符I表示输入 字节地址为3位地址为2.二、字节(Byte),8位二进制数组成1个字节,其中第0位为最低位(LSB),第7位为最高位(MSB)。三、字(Word)相邻的两个字节组成1个字,字用来表示无符号数。MW10是由MB10和MB11组成的1个字。用组成字的最小的字节MB10的编号作为字MW10的编号,最小字节MB10 为字的高位字节,最大的字节MB11为字的低位字节。四、双字(DoubleWord), 两个字大的和非常小的数。在编程软件中,一般并不直接使用二进制格式或十 六进制格式的浮点数,而是用十进制小数来输入或显示浮点数,例如在编程软 件中,10是整数,而10.0为浮点数。 PLC,字节的数据类型是用十六进制数表示,请问字节可以用二进制数或十 进制数表示吗?答:CPU以二进制数存储的,对于二进制、十进制、十六进制也是在内部自动进行转换的,请参考上传图片。字节可以用二进制数或十六进 制数表示。常数可以是字节,字,或双字,常数也可以用十进制、十六进制ASCII码或浮点数表示。B#16#,W#16#,DW#16#分别表示十六进制字节,字和双字常数。2#用来表示二进制常数,例如2#1111011010010001是16位二进

数制转换数据结构课程设计报告

《数据结构》 课程设计报告书 题目:数制转换 系别:计算机科学与应用系学号: 学生姓名: 指导教师: 完成日期:2013—6—1

数制转换 1.需求分析 任意给定一个M进制的数x ,实现如下要求 1)求出此数x的10进制值(用MD表示) 2)实现对x向任意的一个非M进制的数的转换。 3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 2.概要设计 程序流程可以用以下流程图来刻画: A用数组实现 B用栈实现 3.详细设计 A.用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其他进制的函数,它是将输入的十进制数x首先对需要转换的进制M取余,然后在对其取整,接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而M2D()函数是实现其他进制M转换为十进制,并将其转换为非M进制。M进制转十进制则是从该M 进制数的

最后一位开始运算,依次列为第0、1、2、……..N位并分别乘以M的0、1、2、…..N次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。 B.用栈实现 栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。 4.调试分析 (1)构造栈的方法通过查阅书籍知道了。 (2)数组的递归调用查阅相关书籍了解了。 (3)为了让界面表达更清晰,多次调试完善了界面。 5.测试结果 下面是我的测试函数及运行结果: A.数组测试结果

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

常用数制及其相互转换

一、常用数制及其相互转换 在我们的日常生活中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),……。在计算机中常用到十进制数、二进制数、八进制数、十六进制数等,下面就这几种在计算机中常用的数制来介绍一下。1.十进制数 我们平时数数采用的是十进制数,这种数据是由十个不同的数字0、1、2、3、4、5、6、7、8、9任意组合构成,其特点是逢十进一。 任何一个十进制数均可拆分成由各位数字与其对应的权的乘积的总和。例如: ? ? ? 这里的10为基数,各位数对应的权是以10为基数的整数次幂。为了和其它的数制区别开来,我们在十进制数的外面加括号,且在其右下方加注10。 2.二进制数 在计算机中,由于其物理特性(只有两种状态:有电、无电)的原因,所以在计算机的物理设备中获取、存储、传递、加工信息时只能采用二进制数。二进制数是由两个数字0、1任意组合构成的,其特点是逢二进一。例如:1001,这里不读一千零一,而是读作:一零零一或幺零零幺。为了与其它的数制的数区别开来,我们在二进制数的外面加括号,且在其右下方加注2,或者在其后标B。 任何一个二进制数亦可拆分成由各位数字与其对应的权的乘积的总和。其整数部分的权由低向高依次是:1、2、4、8、16、32、64、128、……,其小数部分的权由高向低依次是:0.5、0.25、0.125、0.0625、……。 二进制数也有其运算规则: 加法:0+0=0????0+1=1???1+0=1????1+1=10 乘法:0×0=0????0×1=0????1×0=0????1×1=1 二进制数与十进制数如何转换: (1)二进制数—→十进制数 对于较小的二进制数: 对于较大的二进制数: 方法1:各位上的数乘权求和??例如: (101101)2=1×25+0×24+1×23+1×22+0×21+1×20=45 (1100.1101)2=1×23+1×22+0×21+0×20+1×2-1+1×2-2+0×2-3+1×2-4=12.8125 方法2:任何一个二进制数可转化成若干个100…0?的数相加的总和??例如: (101101)2=(100000)2+(1000)2+(100)2+(1)2 而这种100…00形式的二进制数与十进制数有如下关联:1后有n个0,则这个二进数所对应的十进制数为2n。 所以:(101101)2=(100000)2+(1000)2+(100)2+(1)2=25+23+22+20=45

数据结构+数制转换实验报告

数据结构实验报告题目:数制转换 班级:*** 姓名:*** 学号:200707041 指导教师:** 完成日期:2009 年 4 月18 日

一、需求分析 1、程序所实现的功能; 程序通过对栈的应用,实现了将一个十进制整数向R进制数的转换。 2、程序的输入,包含输入的数据格式和说明; 程序运行时,输入任意十进制整数。对于转换进制R的值则应为:10、2、 8、16。 3、程序的输出,程序输出的形式; 输出为转换成的R进制整数。 二、设计内容 1、说明本程序中所有用到的数据及其数据结构的定义及其基本操作的定义; 1)定义栈的顺序存储结构 typedef struct { int *base; int *top; int stacksize; }SqStack;//栈的顺序存储表示 2)栈的初始化int InitStack(SqStack &S) 3)判断一个栈是否为空int StackEmpty(SqStack &S)

4)入栈操作int Push(SqStack &S,int e) 5)出栈操作int Pop(SqStack &S,int &e) 6)数制转换函数void conversion(SqStack &S,int R,int N,int &e) 7)判断是否输入正确int Ninputlegality() int Rinputlegality() 8)主函数void main() 2、给出注释详细的源程序,及其设计思想的描述; #include #include #include #define STACK_INIT_SIZE 1000 #define STACKINCREMENT 10 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef struct { int *base;

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

数制间的转换

一到500二进制转换十进制对照表0,0 1,1 2,10 3,11 4,100 5,101 6,110 7,111 8,1000 9,1001 10,1010 11,1011 12,1100 13,1101 14,1110 15,1111 16,10000 17,10001 18,10010 19,10011 20,10100 21,10101 22,10110 23,10111 24,11000 25,11001 26,11010 27,11011 28,11100 29,11101 30,11110 31,11111 32,100000 33,100001 34,100010 35,100011 36,100100 37,100101 38,100110 39,100111 40,101000 41,101001 42,101010

44,101100 45,101101 46,101110 47,101111 48,110000 49,110001 50,110010 51,110011 52,110100 53,110101 54,110110 55,110111 56,111000 57,111001 58,111010 59,111011 60,111100 61,111101 62,111110 63,111111 64,1000000 65,1000001 66,1000010 67,1000011 68,1000100 69,1000101 70,1000110 71,1000111 72,1001000 73,1001001 74,1001010 75,1001011 76,1001100 77,1001101 78,1001110 79,1001111 80,1010000 81,1010001 82,1010010 83,1010011 84,1010100 85,1010101 86,1010110

第二节 数制及数制的转换(师用)

第一节计算机中数据的分类和表示方法巩固练习 一、填空题 1.(09年)英文符号MIPS表示的中文含义是__百万条指令/秒_____。 2.根据汉字编码方法的不同,可将汉字的输入码分为音码、形码、数字码和形音编码,常用的汉字输入方法五笔字型就属于形码编码,目前常用的智能ABC输入方法是属于音码编码。 3.将汉字国标码的两个字节的最高位分别置 1 也会得到该汉字的机内码。 4.(09年)汉字“啊”的机内码是B0A1H,对应的区位码是_1001H/1601______。 5.(12年)计算机内部传送的信息分为控制信息和数据信息两大类。 二、选择题 ( C )1.加工处理汉字信息时,使用汉字的。 A)外码 B)字型码 C)机内码 D)国标码 ( D )2.800个24×24点阵汉字字型码占存储器的字节数为。 A)72KB B)256KB C)57KB D)56.25KB ( A )3.计算机中存储数据的最小单位是。 A)字节 B)位 C)字 D)KB ( C)4.汉字国标码共有个汉字。 A)7445 B)3755 C)6763 D)3008 三、判断题 ( T )1.ASCII码是一种字符编码,而汉字的各种输入方法也是一种字符编码。 ( F )2.(09年)在微型计算机中ASCII码用7位表示,所以在计算机中也用7位存储。 ( F )3.(10年)计算机的运算速度MIPS是指每秒钟能执行几百万条高级语言的语句。 ( T )4.计算机中最小的编址单位是字节。 ( F )5.8个二进制位可以表示128种不同的状态。 第二节数制及数制的转换 本节要求 掌握各种数制及其转换方法 知识精讲 计算机处理各种信息时,首先需要将信息表示成为具体的数据形式,选择什么样的数制表示数,对机器的结构、性能和效率有很大的影响。二进制是计算机中数制的基础。二进制形式是指每位数码只取二个值,要么是“0”要么是“1”,超过1则要向上进位。计算机中采用二进制是因为二进制简单,仅有两个数字符号。 一、数制的组成 数制是指计数的方法,任何一种数制都有两个要素:即基数和权。 基数:我们称某进制数所使用的数字符号的个数为基数。 位权:数制中某一位上的1所表示数值的大小(所处位置的价值)。例如,十进制的123,1的位权是100,2的位权是10,3的位权是1。

数据结构课程设计 数制转换 数组和栈

中北大学 数据结构与算法课程设计 说明书 学院、系:软件学院 专业:软件工程 学生姓名:xxx 学号:xxxx 设计题目:数制转换问题 起迄日期: 2013年12月9日- 2013年12月20日指导教师:xxx 2013 年12月 20 日

1、需求分析 任意给定一个M进制的数x ,请实现如下要求 1) 求出此数x的10进制值(用MD表示) 2) 实现对x向任意的一个非M进制的数的转换。 3) 用两种方法实现上述要求(用栈解决和用数组解决)。 2、概要设计 流程图 数组的流程图:

栈的流程图:

算法思想 1、用数组实现该问题: DtoM()函数和MtoD()函数是实现该问题的主要函数。DtoM()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DtoM()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MtoD()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用DtoM()函数将其转换为非M进制的数。 2、用栈实现该问题: 同样是利用DtoM()和MtoD()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。 模块划分 1、用数组实现该问题: ⑴i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0; ⑵DtoM(int g,int h)是实现十进制数转换为M进制数的函数; ⑶MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并 在其中调用D2M(int g,int h)实现向非M进制数的转换; ⑷HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换; ⑸void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

PLC常用数制的解析及相互转换的方法

PLC常用数制的解析及相互转换的方法 一、什么是进位计数制数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。按进位的原则进行计数的方法,称为进位计数制。比如,在十进位计数制中,是按照“逢十进一”的原则进行计数的。 常用进位计数制: 1、十进制(Decimal notation),有10个基数:0 ~~ 9 ,逢十进一; 2、二进制(Binary notation),有2 个基数:0 ~~ 1 ,逢二进一; 3、八进制(Octal notation),有8个基数:0 ~~ 7 ,逢八进一; 4、十六进制数(Hexdecimal notation),有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一。 二、进位计数制的基数与位权 "基数"和"位权"是进位计数制的两个要素。 1、基数: 所谓基数,就是进位计数制的每位数上可能有的数码的个数。例如,十进制数每位上的数码,有"0"、"1"、"3",…,"9"十个数码,所以基数为10。 2、位权: 所谓位权,是指一个数值的每一位上的数字的权值的大小。例如十进制数4567从低位到高位的位权分别为100、101、102、103。因为: 4567=4x103+5x 102+6x 101 +7x100 3、数的位权表示: 任何一种数制的数都可以表示成按位权展开的多项式之和。 比如:十进制数的435.05可表示为: 435.05=4x102+3x 101+5x100+0x10-1 +5x 10-2 位权表示法的特点是:每一项=某位上的数字X基数的若干幂次;而幂次的大小由该数字所在的位置决定。

数制转换问题(完整)

数据结构课程设计 题目名称:数制转换问题 课程名称:数据结构 学生姓名: 学号: 学院名称: 指导教师:

目录 一.需求分析………………………………………………………二.概要设计………………………………………………………三.详细设计………………………………………………………四.调试测试………………………………………………………五.总结……………………………………………………………

一.需求分析 应用环境设定:生活中我们需要将M进制的数转换为我们所需要 的进制,从键盘任意输入一个M进制的数,对其 进行转换成其他三种进制的数,然后再从电脑中 显示出来,最终得到我们的结果。 用户界面:命令行界面,根据自己的要求,对界面的提示进行操作,正确输入我们需要的数据。 输入方式:首先输入将转换的进制数,回车确认;然后输入确定的数据,回车确认;接着选择要转换为的进制数,回车确 认。 输出方式:界面直接输出,启动程序后,按照界面提示,输入数据,直接回车确认,显示屏即输出我们的数据结果。 数据储存方式:全部在内存存放,不使用硬盘上的文件或其他数据 源,程序执行过程中和结束后不保存数据。 程序功能:1.根据界面提示输入M进制数据。 2.对任意M进制数据实行非M进制的转换。 二.概要设计 在此说明数据结构设计和关键的算法设计思想 1.用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余

数据结构课程设计报告-学生成绩管理系统[]

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构课程设计 题目:用C语言实现成绩统计程序的设计系名:信息工程系 专业班级:计算机1121 姓名:吴涛 学号:10210412104 指导教师:司晓梅 2016年3 月20日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:数据结构课程设计指导教师:司晓梅班级名称:计算机1121 开课系、教研室:信息系计算机 一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。 任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。 二、课程设计的内容与基本要求 设计题目:用C语言实现成绩统计程序的设计 〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法: (1)输入每个人的各门课程的成绩,计算每人的平均成绩; (2)按平均成绩的高低次序,打印出个人的名次,平均成绩相同的为同一名次; (3)按名次列出每个学生的姓名和各科成绩; 〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制; 〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解; 具体要完成的任务是: A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B. 写出规范的课程设计报告书; 三、课程设计步骤及时间进度和场地安排 时间:1周地点:现代教育中心 具体时间安排如下: 第一天:布置题目,确定任务、查找相关资料 第二天~第四天:功能分析,编写程序,调试程序、运行系统; 第五天上午:撰写设计报告; 第五天下午:程序验收、答辩。 四、课程设计考核及评分标准

相关主题
文本预览
相关文档 最新文档