数制转换问题 课程设计.doc_第1页
数制转换问题 课程设计.doc_第2页
数制转换问题 课程设计.doc_第3页
数制转换问题 课程设计.doc_第4页
数制转换问题 课程设计.doc_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

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

文档简介

课 程 设 计课程设计名称: 算法分析与综合课程分析 专 业 班 级 : 计 科0604 学 生 姓 名 : 姚 晓 曼 学 号 : 20064140428 指 导 教 师 : 白 浩 课程设计时间: 2008年6月23日 计算机科学与技术专业课程设计任务书学生姓名姚晓曼专业班级计科0604学号20064140428题 目数制转换问题课题性质其它课题来源自拟课题指导教师白 浩同组姓名无主要内容实现二、八、十、十六进制之间的转换任务要求 任意给定一个M进制的数x,请实现如下要求: 1.求出此数的十进制数2.实现对x向非M进制的数的转换3.至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其他方法解决) 参考文献1、 数据结构(C语言版) 严蔚敏 吴伟民 编著 清华大学出版社 20082 、数据结构课程设计 苏仕华 编著 机械工程出版社 20073 、数字电路和数字逻辑 阎石 编著 高等教育出版社 2006审查意见指导教师签字:教研室主任签字: 2008年 6 月 27 日 一、 需求分析输入二、八、十、十六任一进制M,可计算出非M进制的数值,实现向非M进制的转换。用数组和栈两种方法实现。二、 概要设计 让用户输入要进行转换的进制,然后再选择向哪个进制转换,当输入一个M进制时候,会默认首先实现把该进制转换为十进制,一般情况下,利用按权展开法实现向十进制的转换。然后让用户选择向非十进制的其他进制转换,实现这一步时,先把该数转换为十进制,然后再向其他进制转换,例如:当想要实现把二进制转换为八进制时,先把二进制转换为十进制,然后再把十进制转换为八进制。 当用栈实现该功能时用到几个有关栈的函数,构造栈InitStack()、出栈函数Pop()、压栈函数Push(int e)、判断栈空函数StackEmpty(),当用户输入数据时,调用压栈函数,当想要得到栈的数据时,调用出栈函数,并且用到判断栈空函数来控制循环,在实现进制转换的功能时方法与用数组实现时的一样。三、 运行环境硬件环境: 基于X86的PC软件环境:Windows Vista/2003/XP四、开发工具和编程语言 开发工具: Microsoft Visual C+ 6.0 编程语言:Visual C四、 详细设计 首先让用户选择的是实现进制转换的方式,是用数组实现还是用栈实现然后是选择对哪一进制进行转换。具体实现如下:选择实现的方法用数组实现用栈实现关于二进制的转换关于八进制的转换关于十六进制的转换关于二进制的转换关于八进制的转换关于十六进制的转换 二进制转换为十进制二进制转换为八进制二进制转换为十六进制八进制转换为十进制八进制转换为二进制八进制转换为十六进制十六进制转换为十进制十六进制转换为二进制十六进制转换为八进制二进制转换为十进制二进制转换为八进制二进制转换为十六进制八进制转换为十进制八进制转换为二进制八进制转换为十六进制十六进制转换为十进制十六进制转换为二进制十六进制转换为八进制源程序:#include#include#include#include#define M 100#define L 20#define ERROR -1#define OVERFLOW -2#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef structint *base;int *top;int stacksize;SqStack;SqStack S;void InitStack() / 构造栈S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int);if(!S.base) exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE; void Push(int e) /入栈操作if(S.top-S.base=S.stacksize)S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int);if(!S.base) exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e; int Pop() /出栈操作,返回栈顶元素 int e; if(S.top=S.base) return ERROR; e=*-S.top; return e; int StackEmpty() / 判断栈是否为空if(S.top=S.base)return 1;elsereturn 0;void main()int i,j,n1,n2,N;int m=-1;int nn=0;int n,l;double sum;int k1M;char k2M;int fag;printf(*n);printf( n);printf(*n);printf(若选择用数组实现该功能,请输入 1n);printf(若选择用栈实现该功能,请输入 2n); scanf(%d,&fag);if(fag=1) / 用数组实现进制的转换 int i,sum1=0,sum2=0;int fag1;printf(*n); printf( 用数组实现进制转换n); printf(*n);printf(1 二进制的转换:n); / 关于二进制向其它进制转换的操作printf(2 八进制的转换:n); / 关于八进制向其它进制转换的操作printf(3 十六进制的转换:n); / 关于十六进制向其它进制转换的操作 printf(请选择想要的操作:);scanf(%d,&nn);if(nn=1)printf(二进制转换为十进制:n); / 默认首先向十进制转换 printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1); printf(请输入要进行数值转换的数的整数部分(从高位到底位依次输入): n); for(i=0;in1;i+) scanf(%d,&k1i); printf(请输入要进行数值转换的数的小数位数: );scanf(%d,&n2);printf(请输入要进行数值转换的数的小数部分(从高位到底位依次输入): n);for(i=0;in2;i+)scanf(%d,&k2i); for( i= 0; i n1; i+) / 把二进制转换为十进制 sum1= sum1 * 2 + k1i; for( i= 0; i n2; i+) sum2= sum2 * 2 + k2i; printf(十进制值:%d.%dn,sum1,sum2);printf(实现二进制转换到八进制,请输入1:n);printf(实现二进制转换到十六进制,请输入2:n);printf(退出,请输入0:n); scanf(%d,&fag1); / 选择向八进制转换还是向十六进制转换,或者退出while(fag1!=0)if(fag1=1)int bL;int ii=0;int l1;int sum11=0;printf(实现二进制转换到八进制n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1);printf(请输入要进行数值转换的数的整数部分(从高位到底位依次输入): n); for(i=0;in1;i+) scanf(%d,&k1i); for( i= 0; i =0;i-) printf(%d,bi);printf(n);else if(fag1=2)int sum2=0;int bL;int ii=0;int l1;printf(实现二进制转换到十六进制n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1);printf(请输入要进行数值转换的数的整数部分(从高位到底位依次输入): n); for(i=0;in1;i+) scanf(%d,&k1i); for( i= 0; i =0;i-)if(bi=15) printf(%c,F);else if(bi=14) printf(%c,E);else if(bi=13) printf(%c,D);else if(bi=12) printf(%c,C);else if(bi=11) printf(%c,B);else if(bi=10) printf(%c,A);else printf(%d,bi);printf(n);printf(实现二进制转换到八进制,请输入1:n);printf(实现二进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag1); else if(nn=2)int i;int i2=0,i4=0;int l2=0;int n3;int bb2L;int fag2=0;int sum11; double sum1=0; printf(八进制转换为十进制n); / 默认先把八进制转换成十进制printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in1;i+)scanf(%d,&k1i); for(i=0;in1;i+) / 把八进制转换为十进制 double r; r=pow(8,(n1-1-i);sum1+=k1i*r; printf(十进制值:%fn,sum1);printf(实现八进制转换到二进制,请输入1:n);printf(实现八进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);while(fag2!=0)if(fag2=1)int sum11; double sum1=0;int i2=0;int bb2L; printf(八进制转换到二进制: n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n3); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in3;i+) scanf(%d,&k1i); for(i=0;i=0;i4-) printf(%d,bb2i4);printf(n);if(fag2=2)int sum11=0; double sum1=0;int bb2L;int i4=0;printf(实现八进制转换到十六进制: n); printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n3); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in3;i+) scanf(%d,&k1i); for(i=0;i=0;i4-) printf(%d,bb2i4);printf(n);printf(实现八进制转换到二进制,请输入1:n);printf(实现八进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);elseint i,n2,k1M; char k2M,x; int i2=0,i4=0;int l2=0;int n3;int bb2L;int fag2=0;int sum11; double sum1=0; printf(十六进制转换为十进制n); / 默认先把十六进制转换成十进制 printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n2); x=getchar(); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in2;i+) scanf(%c,&k2i); x=getchar(); if(k2i=A) k1i=10; else if(k2i=B) k1i=11; else if(k2i=C) k1i=12; else if(k2i=D) k1i=13; else if(k2i=E) k1i=14; else if(k2i=F) k1i=15; else k1i=k2i-0; for(i=0;in2;i+) double r; r=pow(16,(n2-1-i); sum1+=k1i*r; printf(十进制值:%fn,sum1);printf(实现十六进制转换到二进制,请输入1:n);printf(实现十六进制转换到八进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);while(fag2!=0) if(fag2=1)int sum11; double sum1=0;int bb2L; printf(十六进制转换到二进制: n); printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n3); x=getchar(); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in3;i+) scanf(%c,&k2i); x=getchar(); if(k2i=A) k1i=10; else if(k2i=B) k1i=11; else if(k2i=C) k1i=12; else if(k2i=D) k1i=13; else if(k2i=E) k1i=14; else if(k2i=F) k1i=15; else k1i=k2i-0; for(i=0;i=0;i4-) printf(%d,bb2i4); printf(n);else if(fag2=2)int sum11; double sum1=0;int bb2L;int i2=0;int i4=0;int l2=0;printf(实现十六进制转换到八进制: n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n3); x=getchar(); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in3;i+) scanf(%c,&k2i); x=getchar(); if(k2i=A) k1i=10; else if(k2i=B) k1i=11; else if(k2i=C) k1i=12; else if(k2i=D) k1i=13; else if(k2i=E) k1i=14; else if(k2i=F) k1i=15; else k1i=k2i-0; for(i=0;i=0;i4-) printf(%d,bb2i4);printf(n);printf(实现十六进制转换到二进制,请输入1:n);printf(实现十六进制转换到八进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);else / 用栈实现进制的转换int sum3=0;int fag2; printf(*n); printf( 用栈实现进制转换n); printf(*n);printf(1 二进制的转换:n); / 关于二进制向其它进制转换的操作printf(2 八进制的转换:n); / 关于八进制向其它进制转换的操作printf(3 十六进制的转换:n); / 关于十六进制向其它进制转换的操作 printf(请选择想要的操作:);scanf(%d,&nn);if(nn=1)printf(二进制转换为十进制:n); / 默认首先向十进制转换 printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1); printf(请输入要进行数值转换的数的整数部分(从高位到底位依次输入): n); for(i=0;in1;i+) int data; scanf(%d,&data);Push(data); while(!StackEmpty() / 把二进制转换为十进制 int e; e=Pop(); sum3=sum3*2+e; printf(十进制值:%dn,sum3);printf(实现二进制转换到八进制,请输入1:n);printf(实现二进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);while(fag2!=0) if(fag2=1) int b2L;int i3=0;int l2;int sum3=0;printf(实现二进制转换到八进制n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1);printf(请输入要进行数值转换的数的整数部分(从高位到底位依次输入): n); for(i=0;i=0;i-)b2i=Pop(); printf(%d,b2i);printf(n);else if(fag2=2)int sum4=0;int b3L;int i3=0;int l2;printf(实现二进制转换到十六进制n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1);printf(请输入要进行数值转换的数的整数部分(从高位到底位依次输入): n); for(i=0;i=0;i-)int e=0;e=Pop();if(e=15) printf(%c,F);else if(e=14) printf(%c,E);else if(e=13) printf(%c,D);else if(e=12) printf(%c,C);else if(e=11) printf(%c,B);else if(e=10) printf(%c,A);else printf(%d,e);printf(n);printf(实现二进制转换到八进制,请输入1:n);printf(实现二进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2); else if(nn=2)int i;int i2;int l2;int n3;int bb2L;int fag2=0;int sum11; double sum1=0; printf(八进制转换为十进制n); / 默认首先向十进制转换printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n1); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in1;i+) scanf(%d,&k1i); Push(k1i); for(i=0;in1;i+) / 把八进制转换为十进制 double r; r=pow(8,(n1-1-i);sum1+=k1i*r; printf(十进制值:%fn,sum1); printf(实现八进制转换到二进制,请输入1:n);printf(实现八进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);while(fag2!=0)if(fag2=1)double sum2=0;int sum22=0;int bb3L=0;int i3=0;int i=0; printf(八进制转换到二进制: n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n3); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in3;i+) scanf(%d,&k1i); Push(k1i); for(i=0;i=0;i-) int e=0;e=Pop(); printf(%d,e);printf(n);else if(fag2=2)double sum2=0;int sum22=0;int bb3L=0;int i3=0;int i=0;printf(实现八进制转换到十六进制: n);printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n3); printf(请输入要进行数值转换的整数(从高位到底位依次输入): n); for(i=0;in3;i+)scanf(%d,&k1i);Push(k1i); for(i=0;i=0;i-)int e=0;e=Pop(); printf(%d,e);printf(n);printf(实现八进制转换到二进制,请输入1:n);printf(实现八进制转换到十六进制,请输入2:n);printf(退出,请输入0:n);scanf(%d,&fag2);elseint i,n2,k1M; char k2M,x; double sum1=0; printf(十六进制转换为十进制n); / 默认先把十六进制转换为十进制 printf(请输入要进行数值转换的数的整数位数: ); scanf(%d,&n2); x=getchar(); printf(请输入要进行数值转换的整

温馨提示

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

评论

0/150

提交评论