c语言中进制转换数据结构实训报告.docx
《c语言中进制转换数据结构实训报告.docx》由会员分享,可在线阅读,更多相关《c语言中进制转换数据结构实训报告.docx(13页珍藏版)》请在冰豆网上搜索。
c语言中进制转换数据结构实训报告
《进制之间转换》
数据结构程序设计报告
专业:
计算机网络技术
班级:
姓名:
学号:
二○一二年四月三十日
目录
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
#include
#include
intHten()
{inti=0,j=0,m=0;
charx[10];charf=0;
printf("Pleaseenternomorethan4digithexadecimalnumbersixteen\n");
while(f!
='\n')
{
scanf("%c",&x[i]);
f=x[i];
m++;
i++;
}
for(i=0;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("Pleaseinputthecorrectform\n");
return0;
}
}
for(i=0;ij=j+x[i]*pow(16,m-1-i-1);
returnj;
}
typedefintdatatype;
#definemaxsize64
typedefstruct
{
datatypedata[maxsize];
inttop;
}seqstack;
setnull(seqstack*s)
{s->top=-1;}
intEmpty(seqstack*s)
{
if(s->top>=0)
return0;/*false*/
else
return1;/*ture*/
}
intFull(seqstack*s)
{
if(s->top==maxsize-1)
return1;
else
return0;
}
seqstack*push(seqstack*s,intx,intN)
{
intn;
if(Full(s))
{
printf("overfull\n");
returnNULL;
}
else
{
while(x!
=0)
{n=x%N;
x=x/N;
s->top++;
s->data[s->top]=n;
}
returns;
}
}
intpop(seqstack*s)
{
intx;
if(Empty(s))
{printf("empty\n");return0;}
else
{
x=s->data[s->top];
s->top--;
returnx;
}
}
Htwo()
{
seqstack*s;
intk;
s=(seqstack*)malloc(sizeof(seqstack));
setnull(s);
k=Hten();
if(k!
=0)
{push(s,k,2);}
elsereturn;
printf("Convertedtoabinaryoutcomefor\n");
while(!
Empty(s))
{
printf("%d",pop(s));
}
printf("B\n");
}
Height()
{
intk;
seqstack*s;
s=(seqstack*)malloc(sizeof(seqstack));
setnull(s);
k=Hten();
if(k!
=0)
push(s,k,8);
elsereturn;
printf("Convertedtooctalresults\n");
while(!
Empty(s))
{
printf("%d",pop(s));
}
printf("Q\n");
}
Tentwo()
{seqstack*s;
intk;
s=(seqstack*)malloc(sizeof(seqstack));
setnull(s);
printf("Pleaseenteradecimalnumber\n");
scanf("%d",&k);
push(s,k,2);
printf("Convertedtoabinaryoutcomefor\n");
while(!
Empty(s))
{
printf("%d",pop(s));
}
printf("B\n");
}
Teneight()
{seqstack*s;
intk;
s=(seqstack*)malloc(sizeof(seqstack));
setnull(s);
printf("Pleaseenteradecimalnumber\n");
scanf("%d",&k);
push(s,k,8);
printf("Convertedtooctalresults\n");
while(!
Empty(s))
{
printf("%d",pop(s));
}
printf("Q\n");
}
intTwoten()
{
inti=0,j=0,m=0;
charx[10];charf=0;
printf("Pleaseenternomorethan16bitsofthebinarynumber\n");
while(f!
='\n')
{
scanf("%c",&x[i]);
f=x[i];
m++;
i++;
}
for(i=0;i{
if(x[i]=='0'||x[i]=='1')
x[i]=x[i]-48;
else
{printf("Pleaseinputthecorrectform!
\n");
return0;
}
}
for(i=0;ij=j+x[i]*pow(2,m-1-i-1);
returnj;
}
Twoh()
{intk,y;
seqstack*s;
s=(seqstack*)malloc(sizeof(seqstack));
setnull(s);
k=Twoten();
if(k!
=0)
{push(s,k,16);}
elsereturn;
printf("Intosixteendecimalresults\n");
while(!
Empty(s))
{y=pop(s);
if(y<10)
printf("%d",y);
else
printf("%c",y+55);
}
printf("H\n");
}
main()
{
inta,k;
INDEX:
printf("**************************************\n");
printf("0:
\texit\n");
printf("1:
\tSixteenhexadecimalconversiontodecimal\n");
printf("2:
\tSixteenhexadecimalintobinary\n");
printf("3:
\tSixteenhexadecimalconvertedtooctal\n");
printf("4:
\tDecimaltobinary\n");
printf("5:
\tDecimaltooctal\n");
printf("6:
\tBinarytodecimalconversion\n");
printf("7:
\tBinaryconversionofsixteenhexadecimal\n");
printf("\t\tcopyright2008-2018\n");
printf("**************************************\n");
SCANI:
printf("Whatareyougoingtodo?
Pleaseselectamenu\n");
scanf("%d",&a);
getchar();
switch(a)
{
case0:
gotoEXT;
case1:
gotoSET1;
case2:
gotoSET2;
case3:
gotoSET3;
case4:
gotoSET4;
case5:
gotoSET5;
case6:
gotoSET6;
case7:
gotoSET7;
default:
gotoINDEX;
}
SET1:
k=Hten();
if(k!
=0)
{
printf("Theresultisconvertedtodecimal\n");
printf("%d\n",k);
}
gotoSCANI;
SET2:
Htwo();gotoSCANI;
SET3:
Height();gotoSCANI;
SET4:
Tentwo();gotoSCANI;
SET5:
Teneight();gotoSCANI;
SET6:
k=Twoten();
if(k!
=0)
{
printf("Theresultisconvertedtodecimal\n");
printf("%d\n",k);}
gotoSCANI;
SET7:
Twoh();gotoSCANI;
EXT:
printf("goodbye!
\n");
getch();
}