_____________________________________
课 程 设 计
学生姓名:罗纳 学 号: 11301540106
专业班级: 网络工程1101
课题名称: 数制转换问题
实习时间: 2013年6月
指导教师: 戴成秋
2 0 13年 6月
目 录
一.需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
………………………………………………………
二.概要设计………………………………………………………
三.详细设计………………………………………………………
四.调试分析………………………………………………………
用户使用说明…………………………………………………
测试结果………………………………………………………
附录……………………………………………………………
一.需求分析
计算机中常用几种不同的进位数制,包括二(八、十六)进制和十进制。二进制数据更容易用逻辑线路处理,更接近计算机硬件能直接识别和处理的电子化信息的使用要求,而使用计算机的人更容易接受十进制的数据类型。二者之间的进制转换是经常遇到的问题,
输入方式:首先输入将转换的进制数,回车确认;然后输入确定的数据,回车确认;接着选择要转换为的进制数,回车确认。
输出方式:界面直接输出,启动程序后,按照界面提示,输入数据,直接回车确认,显示屏即输出我们的数据结果。
程序功能:将十进制整数转换为二,八,十六进制。
二.概要设计
通过栈的入栈和出栈来完成十进制成二、八、十六进制的转换。
用除2取余数办法完成十→二的进制转换,其规则是:
用2除十进制数的整数部分,取其余数为转换后的二进制数整数部分的低位数字;
再用2去除所得的商,取其余数为转换后的二进制数高一位的数字;
重复执行第二步的操作,直到商为0,结束转换过程。
例如, 将10进制的37转换成二进制整数的过程如下:
1.程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图
三.详细设计
(1)数据类型定义如下:
typedef struct SqStack{
SElemType *base;
SElemType *top;
int stacksize;
}sqStack;
SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;
(2)用e表示栈元素、插入元素、删除元素。
(3) SqStack S是指定义栈S;
Status InitStack(sqStack *S)构造一个个空栈
Status Push(sqStack *S,SElemType e) 插入元素e为新的栈顶元素
Status Pop(sqStack *S,SElemType *e)若栈不空,则删除S的栈顶元素,用e返回其值。
(4)conversion(sqStack *S)的功能是将十进制数转换成M进制的函数;
(5)void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并调用conversion(sqStack *S)函数,实现十进制数向二、八、十六进制数的转换。
调试分析
在此次课程课程设计中,由于语言基础比较差,所以在很多方面都存在问题。
1.在写main,不知道怎么写一个简单的循环来显示菜单,最后通过向同学请教,用while(1==1)将程序死循环。
2.此次将十进制整数转换成二、八、十六进制,而没有将负数,小数转换的功能。
本次做这个数制转换的题目。总体来说不是很难,而且课堂上也有做过。在实现代码与功能的连接出现许多小问题。通过向别人请教,最终都解决了。遗憾的是没有实现十进制小数的转换。此次,人数和以往也不同,以前都是几个同学一起完成设计,而这次却是每个人单独完成自己的题目,所以也就没有了以前的依赖性;
这次课程设计锻炼了我的思维,以及强化了课堂所学的知识,掌握了如何用栈来存储转发数据以及栈先进后出的问题。把课本上的知识运用到实际中。
用户使用说明
首先输入需要转换的数据,回车确认;接着选择要转换为的进制数,回车确认。
测试结果
1.十进制数88转换成二、八、十六进制数测试结果如下:
附录
程序源代码
#include"stdio.h"
#include"stdlib.h"
#define OK 1
#define OVERFLOW -2
#define FALSE 0
#define ERROR 0
typedef int SElemType;
typedef int Status;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef struct SqStack{
SElemType *base;
SElemType *top;
int stacksize;
}sqStack;
Status InitStack(sqStack *S){
//构造一个空栈S
S->base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S->base) exit(OVERFLOW);//存储分配失败
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return OK;
}
//入栈
Status Push(sqStack *S,SElemType e){
//插入元素e为新的栈顶元素
if(S->top - S->base >= S->stacksize){//栈满,追加存储空间
S->base = (SElemType * )realloc( S->base,
(S->stacksize+STACKINCREMENT) * sizeof(SElemType));
if(!S->base) exit(OVERFLOW); //存储分配失败
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top)++ = e;
return OK;
}
//出栈
Status Pop(sqStack *S,SElemType *e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S->top == S->base) return ERROR;
*e = * --(S->top);
return OK;
}
void conversion(sqStack *S){
int n,num,e;
InitStack(S); //构造空栈
printf("请给定一个需要转换的10进制数:");
scanf("%d",&num);
printf("请输入需要转换成的进制数(2、8、16):");
scanf("%d",&n);
while(num){
Push(S,num % n);
num = num/n;
}
while(!(S->top==S->base)){
Pop(S,&e);
printf( "%d" ,e );
}
}
void main(){
int n,x,num;
SElemType e;
sqStack S;
InitStack(&S); //构造空栈
conversion(&S);printf("\n");
while(1==1){
printf("\n请选择:\n");
printf("1.继续转换\n");
printf("2.退出\n");
scanf("%d",&x);
switch(x){
case 1:conversion(&S);break;
case 2:exit(0);break;
default:printf("you are wrong!");
printf("\n");
}}
}
参考文献:数据结构(c语言版) 严蔚敏 清华大学出版社。