交通部试验员证招聘:课程设计:编程实现自然数的十进制、二进制、八进制、十六进制转换

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/09 14:01:55
我是一名大一学生,这是我的课程设计题目。由于刚学C++,不是太会做,恳请各位高手指教。

1. 基本要求:
(1)要求用C++语言编程,在Visual C++环境下调试完成;
(2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成。

2. 课题功能描述
本程序的功能,就是根据用户选择的进制和输入的数据,转换得到该数所对应的十进制、二进制、八进制和十六进制数。
3. 问题详细描述
程序运行时,首先由用户选择输入数据所使用的进制,如:
欢迎使用进制转换程序!
1. 十进制
2. 二进制
3. 八进制
4. 十六进制
0. 退出
请选择输入数据的进制:
用户选择后,再输入数据,如选择3(八进制),则显示:
请输入八进制数据:
输入数据后,程序进行转换,最后输出该数所对应的十进制、二进制、八进制和十六进制数。如输出:
转换结果:
十进制 21809
二进制 101010100110001
八进制 52461
十六进制 5531

我给你解决,呵呵,见下(已经调试成功):
#include<iostream.h>
#include<stdlib.h>

#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;

typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;

SqStack S;

void InitStack(SqStack &S1)
{
S1.base=(int *)malloc(100*sizeof(int));
S1.top=S1.base;
S1.stacksize=STACK_INIT_SIZE;
}

void Push(SqStack &S2,int e)
{
*S2.top++=e;
}

void Pop(SqStack &S3,int &e)
{
e=* --S3.top;
}

void tentotwo(int n)
{

while(n)
{
Push(S,n%2);
n=n/2;
}

cout<<"转成的二进制数是:"<<endl;

while(S.top!=S.base)
{
int e;
Pop(S,e);
cout<<e;
}
cout<<endl;
}

void tentoeight(int n)
{

while(n)
{
Push(S,n%8);
n=n/8;
}

cout<<"转成的八进制数是:"<<endl;

while(S.top!=S.base)
{
int e;
Pop(S,e);
cout<<e;
}
cout<<endl;
}

void tentosixteen(int n)
{

while(n)
{
Push(S,n%16);
n=n/16;
}

cout<<"转成的十六进制数是:"<<endl;

while(S.top!=S.base)
{
int e;
Pop(S,e);
switch(e)
{
case 10: cout<<'A';
break;
case 11: cout<<'B';
break;
case 12: cout<<'C';
break;
case 13: cout<<'D';
break;
case 14: cout<<'E';
break;
case 15: cout<<'F';
break;
}
cout<<e;

}
cout<<endl;
}

void main()
{

InitStack(S);
f:
cout<<"请选择您想进行的操作:1.十进制转换成二进制 2.十进制转换成八进制 3.十进制转换成十六进制"<<endl;
int a,m;
cin>>a;
switch (a)
{
case 1:
{
cout<<"请输入一个十进制数"<<endl;
cin>>m;
tentotwo(m);
break;
}
case 2:
{
cout<<"请输入一个十进制数"<<endl;
cin>>m;
tentoeight(m);
break;
}
case 3:
{
cout<<"请输入一个十进制数"<<endl;
cin>>m;
tentosixteen(m);
break;
}
}
goto f;

}