《数据结构数制转换课设报告.》由会员分享,可在线阅读,更多相关《数据结构数制转换课设报告.(15页珍藏版)》请在金锄头文库上搜索。
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; printf( 请输入%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 (n