(完整word版)c语言中进制转换数据结构实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《进制之间转换》数据结构程序设计报告
专业:计算机网络技术
班级:
姓名:
学号:
二○一二年四月三十日
目录
1.需求分析 (1)
2.概要设计 (2)
3.采用的算法(流程图) (2)
4.详细设计 (2)
5. 调试分析 (3)
6.用户使用说明 (3)
7.测试结果 (3)
8.附录 (13)
1、需求分析
(1)输入的形式和输入值的范围:
◆不大于4位的十六进制数
◆不大于16位的二进制数
◆十进制数
(2)输出的形式:同上
(3)程序的功能:
十六进制转化为十进制
十六进制转化为二进制
十六进制转化为八进制
十进制转化为二进制
十进制转化为八进制
二进制转化为十进制
二进制转化为十六进制
(4)测试数据
十六进制转化为十进制、十六进制转化为二进制:
十六进制转化为八进制、十进制转化为二进制、十进制转化为八进制、二进制转化为十进制:
二进制转化为十六进制、输入输入出错:
2、概要设计:
一,进制之间的转换用到头文件包match.h、stdio.h、stdlib.h。
问题要求根据输入的不同字符,执行不同的功能。
转换过程中需要各个函数之间进行调用
二,输入合适的数据得出转换的数据,其重要考虑到输入数据的范围。
3.采用的算法(流程图)
4.详细设计:
5.调试分析:
(1)首先是乱码问题。
由于使用中文所以出现了乱码,把中文改成英文就好了。
(2)如果选择0直接退出根本看不到goodbye所以加getch()可以停留在执行屏幕
(3)在这次设计中,首先,我发现了很多问题,由于自己基本的语句掌握的不是十分熟练,所以在一开始不知道怎样把松散的函数调用紧
凑地联系起来,经过仔细的看书以及向同学请教,终于将基本框架
搭好,在调整细节时就相对轻松一些了,所以经过这次课程设计,
我总结出了自己在学习数据结构中的不足,并且为其他类似语言打
下了良好的基础,十分感谢老师以及同学的帮助,在此过程中还锻
炼了我们与别人沟通的能力,使我们受益匪浅。
6、用户使用说明:
(1)运行程序选择自己要转换的形式
(2)输入对应数据
(3)输入0退出
7、测试结果:
输入1———>输入1A1——>输出417
输入2——>输入1A1——>输出110100001B
输入3——>输入1A1——>输出641Q
输入4——>输入12——>输出1100B
输入5——>输入 12——>输出 14K
输入6——>输入11011010——>输出218
输入7——>输入101——>输出5H
输入0——>退出
8、附录(源代码):
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int Hten()
{ int i=0,j=0,m=0;
char x[10];char f=0;
printf("Please enter no more than 4digit hexadecimal number sixteen\n");
while(f!='\n')
{
scanf("%c",&x[i]);
f=x[i];
m++;
i++;
}
for(i=0;i<m-1;i++)
{ if(x[i]>='A'&&x[i]<='F')
x[i]=x[i]-55;
else
if(x[i]>='0'&&x[i]<='9')
x[i]=x[i]-48;
else
{ printf("Please input the correct form\n");
return 0;
}
}
for(i=0;i<m-1;i++)
j=j+x[i]*pow(16,m-1-i-1);
return j;
}
typedef int datatype;
#define maxsize 64
typedef struct
{
datatype data[maxsize];
int top;
}seqstack;
setnull(seqstack *s)
{s->top=-1;}
int Empty(seqstack *s)
{
if(s->top>=0)
return 0;/*false*/
else
return 1;/*ture*/
}
int Full(seqstack *s)
{
if(s->top==maxsize-1)
return 1;
else
return 0;
}
seqstack *push(seqstack *s,int x,int N) {
int n;
if(Full(s))
{
printf("overfull\n");
return NULL;
}
else
{
while(x!=0)
{ n=x%N;
x=x/N;
s->top++;
s->data[s->top]=n;
}
return s;
}
}
int pop(seqstack *s)
{
int x;
if(Empty(s))
{printf("empty\n");return 0;} else
{
x=s->data[s->top];
s->top--;
return x;
}
}
Htwo()
{
seqstack *s;
int k;
s=(seqstack *)malloc(sizeof(seqstack));
setnull(s);
k=Hten();
if(k!=0)
{push(s,k,2);}
else return ;
printf("Converted to a binary outcome for\n"); while(!Empty(s))
{
printf("%d",pop(s));
}
printf("B\n");
}
Height()
{
int k;
seqstack *s;
s=(seqstack *)malloc(sizeof(seqstack));
setnull(s);
k=Hten();
if(k!=0)
push(s,k,8);
else return;
printf("Converted to octal results\n");
while(!Empty(s))
{
printf("%d",pop(s));
}
printf("Q\n");
}
Tentwo()
{ seqstack *s;
int k;
s=(seqstack *)malloc(sizeof(seqstack));
setnull(s);
printf("Please enter a decimal number\n");
scanf("%d",&k);
push(s,k,2);
printf("Converted to a binary outcome for\n"); while(!Empty(s))
{
printf("%d",pop(s));
}
printf("B\n");
}
Teneight()
{ seqstack *s;
int k;
s=(seqstack *)malloc(sizeof(seqstack));
setnull(s);
printf("Please enter a decimal number\n");
scanf("%d",&k);
push(s,k,8);
printf("Converted to octal results\n");
while(!Empty(s))
{
printf("%d",pop(s));
}
printf("Q\n");
}
int Twoten()
{
int i=0,j=0,m=0;
char x[10];char f=0;
printf("Please enter no more than 16 bits of the binary number\n"); while(f!='\n')
{
scanf("%c",&x[i]);
f=x[i];
m++;
i++;
}
for(i=0;i<m-1;i++)
if(x[i]=='0'||x[i]=='1')
x[i]=x[i]-48;
else
{ printf("Please input the correct form!\n");
return 0;
}
}
for(i=0;i<m-1;i++)
j=j+x[i]*pow(2,m-1-i-1);
return j;
}
Twoh()
{ int k,y;
seqstack *s;
s=(seqstack *)malloc(sizeof(seqstack));
setnull(s);
k=Twoten();
if(k!=0)
{push(s,k,16);}
else return ;
printf("Into sixteen decimal results\n");
while(!Empty(s))
{ y=pop(s);
if(y<10)
printf("%d",y);
else
printf("%c",y+55);
printf("H\n");
}
main()
{
int a,k;
INDEX:
printf("**************************************\n");
printf("0:\t exit \n");
printf("1:\tSixteen hexadecimal conversion to decimal\n");
printf("2:\tSixteen hexadecimal into binary\n");
printf("3:\tSixteen hexadecimal converted to octal\n");
printf("4:\tDecimal to binary\n");
printf("5:\tDecimal to octal\n");
printf("6:\tBinary to decimal conversion\n");
printf("7:\tBinary conversion of sixteen hexadecimal\n");
printf(" \t\tcopyright 2008-2018 \n");
printf("**************************************\n"); SCANI: printf("What are you going to do?Please select a menu\n");
scanf("%d",&a);
getchar();
switch(a)
{
case 0: goto EXT;
case 1: goto SET1;
case 2: goto SET2;
case 3: goto SET3;
case 4: goto SET4;
case 5: goto SET5;
case 6: goto SET6;
case 7:goto SET7;
default: goto INDEX;
}
SET1:k=Hten();
if(k!=0)
{
printf("The result is converted to decimal\n");
printf("%d\n",k);
}
goto SCANI;
SET2: Htwo(); goto SCANI;
SET3: Height(); goto SCANI;
SET4: Tentwo();goto SCANI;
SET5: Teneight();goto SCANI;
SET6:k=Twoten();
if(k!=0)
{
printf("The result is converted to decimal\n");
printf("%d\n",k);}
goto SCANI;
SET7:Twoh();goto SCANI;
EXT: printf(" goodbye!\n");
getch();
}。