十进制数转换为二进制数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十进制数转换为二进制数
设计题目:十进制数转换为二进制数,顾名思义是利用程序将十进制数转换为二进制数。
需求分析:众所周知,计算机是以二进制数的形式进行存储和运算的。本程序就是实现将十进制转化为二进制的功能。在本程序中用到了结构体、栈、指针等相关知识。
概要设计:本程序采用结构体定义,利用栈的相关操作,如:栈的创建,入栈,出栈等,为了克服顺序存储结构的栈可能存在上溢的不足,此程序用链式存储结构实现栈中元素的存储,总体上是由主函数对子函数进行调用来实现功能。当从键盘输入一个数时,首先对其进行判断是否满足大于0而小于32767,若满足,则将其对2求余并将余数入栈,对除2所得的商继续求余入栈,如此循环直至商为0,再将栈中的元素顺序输出既可。
详细设计:首先定义链栈的表结点,其中data为结点数据,*next 为结点指针,再定义了栈顶指针为*top,栈中的元素个数用length 表示,对栈进行初始化s->top=null栈顶指针为空,s->length=0元素个数为0,编写子程序:
一,元素e入栈。开辟结点P,并将其赋值P->data=e,修改
指针P->next=s->top;P->top=P;长度增1,s->length++; 二,出栈。判断栈是否为空,空返回ERROR,非空,将栈顶指针赋给P,数值赋给e(*e=p->data)修改指针S->top=P->next;s->length――元素个数减1,删除栈顶结点。三,判栈空即看栈顶元素指针S->top是否为NULL若为则空。
主函数模块为:首先数据初始化,定义栈S
main()
{
int n,k;
//定义整形变量
STACK S;
//定义栈S
Do{ 输入数据n;
}while(对n判断是否满足条件)
initstack(&S);//创建一个空栈
for() {
//将n循环对2求余直至n为零
}
while(pop(&S,&k)!=ERROR)
//对栈判断并循环输出
//函数结束
}
系统运行说明:本程序经TC编译后,可在wondiows环境下运行。经测试可将输入满足条件的十进制数转换为二进制数。
总结分析:本程序可将0到32767之间的十进制数迅速转化为对应的二进制数,即节省了人力又节约了霎时间,给运算带来了方便。但本程序在功能方面还存在缺欠,第一,运算数值范围较小,只能对范围内的十进制整数,不能满足运算需求。第二,运算类型单一,只能对整数进行转换,无法对小数或其它类型进行转换。
附:程序清单:
#include
#include
#define OK 0
#define ERROR -1
#define TRUE 1
#define FALSE 0
typedef struct Snode{
int data;
struct Snode *next;
}Snode;
typedef struct{
int length;
Snode *top;
}STACK;
void InitStack(STACK *s){
s->top=NULL;
s->length=0;
}
int push(STACK *s,int e){
Snode *p;
p=(Snode*)malloc(sizeof(Snode));
if(!p)return ERROR;
p->data=e;p->next=s->top;
s->top=p;s->length++;
return OK;
}
int Pop(STACK *s,int *e){
Snode *p;
if(s->top==NULL)return ERROR;
p=s->top;
*e=p->data;
s->top=p->next;
s->length--;
free(p);
return OK;
}
int Empty(STACK s){
if(s.top==NULL)return TRUE;
return FALSE;
}
void main()
{
int n,k;
STACK s;
do{
printf("put into data:\n");
scanf("%d",&n);
}while(!(n>0&&n<=32767));
InitStack(&s);
for(k=n;k>0;k=k/2)
if(push(&s,k%2)==ERROR){
printf("push stack error!");
return;
}
while(Pop(&s,&k)!=ERROR)printf("%d",k);
printf("\n");
}
数据结构设计报告
十进制与二进制的转换
计算机信息与工程学院
计02-1班
刘君09号