数数制转换程序Word格式.docx
《数数制转换程序Word格式.docx》由会员分享,可在线阅读,更多相关《数数制转换程序Word格式.docx(17页珍藏版)》请在冰点文库上搜索。
private:
voidToUpper(char*c);
//将小写字母a-z转换为A-Z
voidTrint(intm,intn);
//转换数据的整数部分
voidTrdig(doublem,intn);
//转换数据的小数部分
voidIntdig(doublem,intn);
//合并转换成的整数和小数部分
};
voidTransform:
:
Trint(intm,intn)//转换数据的整数部分
{
if(m)
{
Trint(m/n,n);
if(n<
10)//如果要转换成的进制数据小于10,则直接输出那个数据.
cout<
<
m%n;
else//如果要转换成的进制数据大于等于10,即为16进制,则10到15相应转换为A到F再输出.
m%n>
=10?
char(m%n-10+'
A'
):
}
}
Trdig(doublem,intn)//转换数据的小数部分
while(m)
if(n<
10)//如果要转换成的进制数据小于10,则直接输出那个数据.
int(m*n);
m*n>
char(int(m*n)-10+'
int(m*n);
m=m*n-int(m*n);
}
Intdig(doublem,intn)//合并转换成的整数和小数部分
Trint(m,n);
//转换整数部分并输出
if(int(m)==m)
return;
'
.'
;
//输出小数点
m-=int(m);
Trdig(m,n);
//转换小数部分,并接在小数点后面
Tr10(charc[],doublem)//10进制数据转换成其他进制数据
"
-----"
c<
转换成2进制="
Intdig(m,2);
endl;
转换成8进制="
Intdig(m,8);
转换成16进制="
Intdig(m,16);
doubleTransform:
Trn_10(charc[],intn)//其他进制数据转换成10进制数据
charz[100];
inti=0,j;
doubleb=0;
转换成10进制="
while(*c!
='
&
&
*c!
\0'
)z[i++]=*c++;
i--;
if(*c=='
)c--;
for(j=0;
j<
=i;
j++)
if(z[j]<
65)b+=(z[j]-48)*pow(n,i-j);
//调用系统的幂函数
elseb+=(z[j]-55)*pow(n,i-j);
for(c++,j=-1;
;
c++,j--)
if(*c<
65)b+=(*c-48)*pow(n,j);
else
b+=(*c-55)*pow(n,j);
b<
endl;
returnb;
UseStack(intten,intbase)//应用栈原理把10进制数据转换成其他进制数据
intm=ten;
intval;
"
-----所输入的进制数是:
<
ten<
endl<
Stack<
int>
astack(20);
//声明一个栈的对象
while(m!
=0)//如果要转换的数据不为0,则进入循环
val=m%base;
//需要转换的10进制数值除以要转换成的进制,并取余数
astack.Push(val);
//将余数进栈
m=m/base;
//m等于商,取整
}
-----转换成"
base<
进制数是:
while(!
astack.IsEmpty())//如果栈不为空,则进入循环
{
val=astack.Pop();
//将数据出栈
if(val>
9)//如果出栈数大于9,则将10到15的数转换成A到F.
switch(val)
case10:
A"
break;
case11:
B"
case12:
C"
case13:
D"
case14:
E"
case15:
F"
else
val;
////////////////////////*End*////////////////////////\n"
////////////////////////////////////////////////////////////////////"
endl<
按1返回主界面,按2结束程序:
inth;
do
cin>
>
h;
//课程设计信息界面给出选择,用户输入选项
switch(h)
case1:
//课程设计信息界面,选1返回主界面。
system("
cls"
);
//调用系统函数进行清屏
Behead();
case2:
//课程设计信息界面,选2结束程序。
End();
default:
请重新正确选择!
//如果输入1,2以外的选项,则进入循环并重新输入选项。
}while(h<
1||h>
2);
Stack_10()//调用UseStack函数的函数
inta(0),b(0);
/////////////////利用栈进行10进制的转换/////////////////"
//////此处只进行10进制正整数转换成2或8或16进制//////"
-----请输入你所要转换的10进制数:
a;
-----要转换成多少进制数?
请输入:
do
b;
if(b!
=2&
b!
=8&
=16)//如果要转换成的进制不符合,则提示错误
-----进制数输入错误!
请重新输入:
}while(b!
=16);
UseStack(a,b);
Begin()//主界面函数
///////////////////////////////////////////////////////"
//////////////欢迎进入数制转换系统//////////////"
★按1进行各种数制的转换"
★按2利用栈进行10进制的转换"
★按3了解课程设计信息"
★按4退出本程序"
///////////////////////////////////////////////////////"
End()//界面结束函数
谢谢使用本程序,再见!
ToUpper(char*c)////将小写字母a-z转换为A-Z
intlen=strlen(c);
intoffset='
-'
a'
for(inti=0;
i<
len;
i++)
if(c[i]>
c[i]<
z'
)
c[i]+=offset;
Usetranstion()//进行转换
////////////////欢迎使用数制转换////////////////"
charc[100];
intn;
\n-----请输入该数值的进制(2或8或10或16进制):
n;
\n-----请输入要你所要转换的数据值(0-9,A-F,a-f):
c;
if(n==16)//16进制
ToUpper(c);
//将小写字母a-z转换为A-Z
Tr10(c,Trn_10(c,n));
//////////////////////*End*//////////////////////\n"
按1返回主界面,按2结束程序:
Information()//课程设计信息
////////////////课程设计信息////////////////"
★功能:
进行数制转换"
★原理:
1.一般函数及系统函数"
2.栈"
3.分步求取"
★课程:
数据结构"
★指导老师:
吴**"
★制作人:
陈**,彭**"
★时间:
2008年1月1日"
intTransform:
Behead()//应用函数,递归调用其他函数。
Begin();
//调用Begin函数,显示主界面。
inta;
//主界面给出选择,用户输入选项
switch(a)
//主界面,选1进入数制转换界面。
Usetranstion();
intd;
d;
//数制转换界面给出选择,用户输入选项
switch(d)
//数制转换界面,选1返回主界面。
//数制转换界面,选2结束程序
}while(d<
1||d>
case3:
//主界面,选2进入课程设计信息界面。
Information();
intb;
switch(b)
}while(b<
1||b>
case4:
//主界面,选3结束程序。
Stack_10();
//如果输入1,2,3以外的选项,则进入循环并重新输入选项。
}while(a<
1||a>
4);
return0;
========================stack===========================
源程序利用了栈,栈的头文件的代码和解释如下:
#pragmaonce
assert.h>
template<
classType>
classStack//顺序栈的类定义
Stack(int=20);
//建立一个空栈,其最大体积maxSzie的缺省值为10
virtual~Stack(){delete[]elements;
voidPush(constType&
item);
//如果IsFull(),则执行StackFull();
否则把item插入到栈的栈顶
TypePop();
//如果IsEmpty(),则执行StackEmpty()并返回0;
否则退出并返回栈顶的值
TypeGetTop();
//如果IsEmpty(),则返回0;
否则返回栈顶元素的值
voidMakeEmpty(){top=-1;
}//置空栈
intIsEmpty()const{returntop==-1;
//如果栈中元素个数等于0,则返回True
(1),否则返回False(0)
intIsFull()const{returntop==maxSize-1;
//如果栈中元素个数等于maxSize,则返回True
(1),否则返回False(0)
inttop;
//在顺序存储分配下是栈顶指针
Type*elements;
//在顺序存储分配下是存放栈中元素的栈数组
intmaxSize;
//栈最大可容纳元素个数
template<
Stack<
Type>
Stack(ints):
top(-1),maxSize(s)
//建立一个最大尺寸为s的空栈,若分配不成功则错误处理
elements=newType[maxSize];
//创建栈空间
assert(elements!
=0);
//断言:
动态存储分配成功与否
voidStack<
Push(constType&
item)
//若栈不满,则将元素item插入到该栈的栈顶,否则出错处理
assert(!
IsFull());
栈不满则继续执行
elements[++top]=item;
//栈顶指针先加1,然后按此地址进栈
TypeStack<
Pop()
IsEmpty());
判栈空否,若断言成立则继续执行
returnelements[top--];
//返回栈顶元素的值,同时栈顶指针退1
TypeStack<
GetTop()
assert(!
returnelements[top];
//返回栈顶元素的值
--------------------------------main函数----------------------------------------
该程序的main函数如下:
voidmain()
Transforma;
//声明一个对象
a.Behead();
//对象调用函数
--------------------------------main函数----------------------------------------