数数制转换程序.docx
- 文档编号:9691105
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:17
- 大小:18.51KB
数数制转换程序.docx
《数数制转换程序.docx》由会员分享,可在线阅读,更多相关《数数制转换程序.docx(17页珍藏版)》请在冰豆网上搜索。
数数制转换程序
程序代码:
此数数制转换程序包括1个源文件(.cpp)、2个头文件(.h)。
******************************************Transform类********************************************
源代码包含一个Transform类:
#include
#include
#include"Stack.h"//利用到栈,把头文件Stack包含进来
usingnamespacestd;
classTransform
{
public:
Transform(){};//构造函数
~Transform(){};//析构函数
voidTr10(charc[],doublem);//10进制数据转换成其他进制
doubleTrn_10(charc[],intn);//其他进制数据转换成10进制数据
voidUseStack(intten,intbase);//应用栈原理把10进制数据转换成其他进制数据
voidStack_10();//调用UseStack函数的函数
voidBegin();//主界面函数
voidEnd();//界面结束函数
voidUsetranstion();//调用一般函数进行各进制间的转换
voidInformation();//课程设计信息函数
intBehead();//调用其他函数应用函数
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< else//如果要转换成的进制数据大于等于10,即为16进制,则10到15相应转换为A到F再输出. m%n>=10? cout< cout< } } voidTransform: : Trdig(doublem,intn)//转换数据的小数部分 { while(m) { if(n<10)//如果要转换成的进制数据小于10,则直接输出那个数据. cout< else//如果要转换成的进制数据大于等于10,即为16进制,则10到15相应转换为A到F再输出. m*n>=10? cout< cout< m=m*n-int(m*n); } } voidTransform: : Intdig(doublem,intn)//合并转换成的整数和小数部分 { Trint(m,n);//转换整数部分并输出 if(int(m)==m) return; cout<<'.';//输出小数点 m-=int(m); Trdig(m,n);//转换小数部分,并接在小数点后面 } voidTransform: : Tr10(charc[],doublem)//10进制数据转换成其他进制数据 { cout<<"-----"< cout<<"-----"< cout<<"-----"< } doubleTransform: : Trn_10(charc[],intn)//其他进制数据转换成10进制数据 { charz[100]; inti=0,j; doubleb=0; cout<<"-----"< while(*c! ='.'&&*c! ='\0')z[i++]=*c++;i--; if(*c=='\0')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! ='\0';c++,j--) if(*c<65)b+=(*c-48)*pow(n,j); else b+=(*c-55)*pow(n,j); cout< returnb; } voidTransform: : UseStack(intten,intbase)//应用栈原理把10进制数据转换成其他进制数据 { intm=ten; intval; cout< cout<<"-----所输入的进制数是: "< Stack while(m! =0)//如果要转换的数据不为0,则进入循环 { val=m%base;//需要转换的10进制数值除以要转换成的进制,并取余数 astack.Push(val);//将余数进栈 m=m/base;//m等于商,取整 } cout<<"-----转换成"< "; while(! astack.IsEmpty())//如果栈不为空,则进入循环 { val=astack.Pop();//将数据出栈 if(val>9)//如果出栈数大于9,则将10到15的数转换成A到F. { switch(val) { case10: cout<<"A"; break; case11: cout<<"B"; break; case12: cout<<"C"; break; case13: cout<<"D"; break; case14: cout<<"E"; break; case15: cout<<"F"; break; } } else cout< } cout< cout< cout<<"////////////////////////*End*////////////////////////\n"; cout<<"////////////////////////////////////////////////////////////////////"< cout<<"按1返回主界面,按2结束程序: "; inth; do { cin>>h;//课程设计信息界面给出选择,用户输入选项 switch(h) { case1: //课程设计信息界面,选1返回主界面。 system("cls");//调用系统函数进行清屏 Behead(); break; case2: //课程设计信息界面,选2结束程序。 End(); break; default: cout<<"请重新正确选择! ";//如果输入1,2以外的选项,则进入循环并重新输入选项。 break; } }while(h<1||h>2); } voidTransform: : Stack_10()//调用UseStack函数的函数 { inta(0),b(0); cout<<"////////////////////////////////////////////////////////////////////"< cout<<"/////////////////利用栈进行10进制的转换/////////////////"< cout<<"//////此处只进行10进制正整数转换成2或8或16进制//////"< cout< cout<<"-----请输入你所要转换的10进制数: "; cin>>a; cout< 请输入: "; do { cin>>b; if(b! =2&&b! =8&&b! =16)//如果要转换成的进制不符合,则提示错误 { cout< cout<<"-----进制数输入错误! 请重新输入: "; } }while(b! =2&&b! =8&&b! =16); UseStack(a,b); } voidTransform: : Begin()//主界面函数 { cout<<"///////////////////////////////////////////////////////"< cout< cout<<"//////////////欢迎进入数制转换系统//////////////"< cout< cout<<"★按1进行各种数制的转换"< cout< cout<<"★按2利用栈进行10进制的转换"< cout< cout<<"★按3了解课程设计信息"< cout< cout<<"★按4退出本程序"< cout< cout<<"///////////////////////////////////////////////////////"; } voidTransform: : End()//界面结束函数 { system("cls");//调用系统函数进行清屏 cout<<"谢谢使用本程序,再见! "< } voidTransform: : ToUpper(char*c)////将小写字母a-z转换为A-Z { intlen=strlen(c); intoffset='A'-'a'; for(inti=0;i { if(c[i]>='a'&&c[i]<='z') { c[i]+=offset; } } } voidTransform: : Usetranstion()//进行转换 { cout<<"///////////////////////////////////////////////////////"< cout<<"////////////////欢迎使用数制转换////////////////"< cout< charc[100]; intn; cout<<"\n-----请输入该数值的进制(2或8或10或16进制): "; cin>>n; cout<<"\n-----请输入要你所要转换的数据值(0-9,A-F,a-f): "; cin>>c; if(n==16)//16进制 { ToUpper(c);//将小写字母a-z转换为A-Z } cout< Tr10(c,Trn_10(c,n)); cout< cout< cout<<"//////////////////////*End*//////////////////////\n"; cout<<"///////////////////////////////////////////////////////"< cout< cout<<"按1返回主界面,按2结束程序: "; } voidTransform: : Information()//课程设计信息 { cout<<"///////////////////////////////////////////////////////"< cout<<"////////////////课程设计信息////////////////"< cout<<"★功能: 进行数制转换"< cout<<"★原理: 1.一般函数及系统函数"< cout<<"2.栈"< cout<<"3.分步求取"< cout<<"★课程: 数据结构"< cout<<"★指导老师: 吴**"< cout<<"★制作人: 陈**,彭**"< cout<<"★时间: 2008年1月1日"< cout<<"///////////////////////////////////////////////////////"< cout< } intTransform: : Behead()//应用函数,递归调用其他函数。 { Begin();//调用Begin函数,显示主界面。 inta; do { cin>>a;//主界面给出选择,用户输入选项 switch(a) { case1: //主界面,选1进入数制转换界面。 system("cls");//调用系统函数进行清屏 Usetranstion(); intd; do { cin>>d;//数制转换界面给出选择,用户输入选项 switch(d) { case1: //数制转换界面,选1返回主界面。 system("cls");//调用系统函数进行清屏 Behead(); break; case2: //数制转换界面,选2结束程序 End(); break; default: cout<<"请重新正确选择! ";//如果输入1,2以外的选项,则进入循环并重新输入选项。 break; } }while(d<1||d>2); break; case3: //主界面,选2进入课程设计信息界面。 system("cls");//调用系统函数进行清屏 Information(); cout<<"按1返回主界面,按2结束程序: "; intb; do { cin>>b;//课程设计信息界面给出选择,用户输入选项 switch(b) { case1: //课程设计信息界面,选1返回主界面。 system("cls");//调用系统函数进行清屏 Behead(); break; case2: //课程设计信息界面,选2结束程序。 End(); break; default: cout<<"请重新正确选择! ";//如果输入1,2以外的选项,则进入循环并重新输入选项。 break; } }while(b<1||b>2); break; case4: //主界面,选3结束程序。 End(); break; case2: system("cls");//调用系统函数进行清屏 Stack_10(); break; default: cout<<"请重新正确选择! ";//如果输入1,2,3以外的选项,则进入循环并重新输入选项。 break; } }while(a<1||a>4); return0; } ******************************************Transform类******************************************** ========================stack=========================== 源程序利用了栈,栈的头文件的代码和解释如下: #pragmaonce #include #include usingnamespacestd; template classStack//顺序栈的类定义 { public: 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) private: inttop;//在顺序存储分配下是栈顶指针 Type*elements;//在顺序存储分配下是存放栈中元素的栈数组 intmaxSize;//栈最大可容纳元素个数 }; template Stack : Stack(ints): top(-1),maxSize(s) //建立一个最大尺寸为s的空栈,若分配不成功则错误处理 { elements=newType[maxSize];//创建栈空间 assert(elements! =0);//断言: 动态存储分配成功与否 } template voidStack : Push(constType&item) //若栈不满,则将元素item插入到该栈的栈顶,否则出错处理 { assert(! IsFull());//断言: 栈不满则继续执行 elements[++top]=item;//栈顶指针先加1,然后按此地址进栈 } template TypeStack : Pop() { assert(! IsEmpty());//断言: 判栈空否,若断言成立则继续执行 returnelements[top--];//返回栈顶元素的值,同时栈顶指针退1 } template TypeStack : GetTop() { assert(! IsEmpty());//断言: 判栈空否,若断言成立则继续执行 returnelements[top];//返回栈顶元素的值 } ========================stack=========================== --------------------------------main函数---------------------------------------- 该程序的main函数如下: voidmain() { Transforma;//声明一个对象 a.Behead();//对象调用函数 } --------------------------------main函数----------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数制 转换 程序