数据结构数制转换课设报告_第1页
数据结构数制转换课设报告_第2页
数据结构数制转换课设报告_第3页
数据结构数制转换课设报告_第4页
数据结构数制转换课设报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构课程设计报告设计题目:数制转换 学 院 经济与管理学院 专 业 信息管理与信息系统 班 级 学 号 姓 名 2012秋季学期一、问题描述3二、基本要求3三、算法思想3四、数据结构4五、模块划分4六、源程序4七、测试数据9八、运行及测试情况10一、问题描述 任意给定一个M进制的数x,转换为其它任意进制的数据。二、基本要求 1) 对给定一个M进制的数据x,求出此数x的10进制值; 2) 实现对x向任意的一个非M进制的数的转换。=三、算法思想(1)void convertion(int n)和void convert (int n)函数是实现该问题的主要函数。void convertion(

2、int n)函数是实现对给定一个M进制的数据x,求出此数x的10进制值,并将其转换为非m进制的数。二进制和十八进制转十进制是从该M进制的最后一位开始算,依次列为第0、2、3.n位并分别乘以M的0、1、2n次方,将得到的次方相加便得到对应的十进制数,在调用void convert (int n)函数时在void convert (int n)函数中调用void BA(int n)和void ER(int n)和void SHILIU(int n) 三个函数实现十进制向其他进制的转换,在这三个函数中,将其转换为非M进制的数,十六进制转十进制则是用数组实现上述转换。void convert (int

3、 n)函数,它是将输入的十进制数x取首先分别对需要转换的M进制取余,然后再对其取整,接着通过while循环一次将得到的整数部分依次先取余后取整。然后逆向取出即得到转换后的结果。在void convert (int n)函数中调用void BA(int n)和void ER(int n)和void SHILIU(int n) 三个函数实现十进制向其他进制的转换。(2)用栈实现该问题:void Push (stacknode *head,int x)和int Pop (stacknode *head)两个函数用栈的后进先出的性质,故用Pop()逆向取数方便四、数据结构带头结点的链表结点结构定义如下

4、typedef struct stacknode int data;struct stacknode *next;stacknode;stacknode *head;五、模块划分void Push (stacknode *head,int x)功能是: 入栈操作int Pop (stacknode *head) 功能是: 出栈操作void BA(int n) 功能是:栈的应用:十八进制转换void SHILIU(int n) 功能是:栈的应用:十十六进制转换void ER(int n) 功能是:栈的应用:十二进制转换void convert (int n) 功能是:将十进制转换为其他进制voi

5、d convertion(int n) 功能是:将m进制转换为非m进制: void main() 主函数 功能是: 六、源程序#include#include#include math.h#define N 100typedef struct stacknode /*定义栈结点的存储结构*/int data;struct stacknode *next;stacknode;stacknode *head;void Push (stacknode *head,int x) /*进栈操作*/stacknode *p;p=(stacknode*)malloc(sizeof(stacknode); p

6、-data=x;p-next=head-next; /*新结点链入栈顶*/head-next=p; /*新结点成为新的栈顶*/int Pop (stacknode *head) /*出栈操作*/int x;stacknode *p=head-next;if (p=NULL) printf (tt栈为空。n); elsex=p-data;head-next=p-next;free(p);return x;void BA(int n) /*栈的应用:十八进制转换*/int x; stacknode *p;if (head=NULL) printf(tt堆栈下溢!n);return;head-nex

7、t=NULL; /*置栈空*/while(n!=0) Push(head,n%8); /*余数入栈*/n=n/8; /*取新的商*/printf (ntt转换后的八进制数值为: );while (head-next!=NULL) /*出栈处理*/x=Pop(head);printf (%d,x); void SHILIU(int n) /*栈的应用:十十六进制转换*/int x; stacknode *p;if (head=NULL) printf(tt堆栈下溢!n);return;head-next=NULL; /*置栈空*/while(n!=0) Push(head,n%16); /*余数

8、入栈*/n=n/16; /*取新的商*/printf (ntt转换后的十六进制数值为:);while (head-next!=NULL) /*出栈处理*/x=Pop(head); if(xnext=NULL; /*置栈空*/while(n!=0) Push(head,n%2); /*余数入栈*/n=n/2; /*取新的商*/printf (ntt转换后的二进制数值为: );while (head-next!=NULL) /*出栈处理*/x=Pop(head);printf (%d,x); void convert (int n) /*将十进制转换为其他进制*/ ER( n); BA( n);

9、SHILIU(n);void convertion(int n) /*将m进制转换为十进制,并转换为非m进制*/ int a,i,k=-1,y=0,m, bN; printf(n 请输入是m进制: ); scanf(%d,&m); if(m=2|m=10|m=8) printf(n 请输入一个正确的m进制数: ); scanf(%d,&a); printf(n 请输出所得的十进制结果:); while(a!=0) i=a%10; k+; y+=i*(int)pow(m,k); a=a/10; printf(%dn,y); convert(y); else if(m=16) int n; pri

10、ntf( 请输入%d进制位数:,m);scanf(%d,&n); printf(n 请输入一个正确的m进制数:n ); for(i=0;in;i+) printf( 请输入第%d个数字或字母:,i+1);scanf(%x,&bi); for(i=0;inext=NULL;while (i!=0)printf (nnnn);printf (ntt 数值转换系统n);printf (ntt*);printf (ntt* 1-将十进制转换为其他进制 *);printf (ntt* 2-将m进制转换为非m进制 *); printf (ntt* 0-返 回 *);printf (ntt*);printf

11、 (ntt请选择菜单号(0-2):);scanf(%d, &choice);getchar (); if(choice=1)printf (ntt请输入一个十进制正整数:);scanf (%d,&n);convert(n);else if (choice=2) printf (ntt将m进制转换为非m进制:);convertion(n);else if(choice=0)i=0;else printf (ntt输入错误,请重新输入!);七、测试数据A(菜单1:29(O) 菜单2:100(B) 20 (O) 1F(H) B(1:55(O) 2:10011(B) 42 (O) 112(H))八、运

12、行及测试情况运行界面程序输出:A: 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):1 请输入一个十进制正整数:29 转换后的二进制数值为: 11101 转换后的八进制数值为: 35 转换后的十六进制数值为:1D 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):2 将m进制转换为非m进制: 请输入是m进制:2 请输入一个正确的m进制数:100 请输出所得的十进制结果:4 转换后的二进制数值为: 100 转换后的八进制

13、数值为: 4 转换后的十六进制数值为:4 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):2 将m进制转换为非m进制: 请输入是m进制:8 请输入一个正确的m进制数:20 请输出所得的十进制结果:16 转换后的二进制数值为: 10000 转换后的八进制数值为: 20 转换后的十六进制数值为:10 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):2 将m进制转换为非m进制: 请输入是m进制:16 请输入16进制位数:2

14、 请输入一个正确的m进制数: 请输入第1个数字或字母:1 请输入第2个数字或字母:F 请输出所得的十进制结果:31 转换后的二进制数值为: 11111 转换后的八进制数值为: 37 转换后的十六进制数值为:1FB: 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):1 请输入一个十进制正整数:55 转换后的二进制数值为: 110111 转换后的八进制数值为: 67 转换后的十六进制数值为:37 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):2 将m进制转换为非m进制: 请输入是m进制:2 请输入一个正确的m进制数:10011 请输出所得的十进制结果:19 转换后的二进制数值为: 10011 转换后的八进制数值为: 23 转换后的十六进制数值为:13 数值转换系统 * * 1-将十进制转换为其他进制 * * 2-将m进制转换为非m进制 * * 0-返 回 * * 请选择菜单号(0-2):2 将m进制转换为非m进制: 请输入是m进制:8 请输入一个正确的m进制数:42 请输出所得的十进制结果:34 转换后的二进制数值为: 100010 转换后的八进制数值为: 42 转换后的十六进制数值为:22 数值

温馨提示

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

评论

0/150

提交评论