关于用 C 程序设计进位制数换算
最近在做进位制数换算功能要求:
(1)编写选择式菜单程序,实现从十进制数到二进制、八进制、十六进制数的转换。
(2)二进制到十进制数、八进制、十六进制数的转换。
(3)八进制到十进制数、二进制、十六进制数的转换。
(4)十六进制数到十进制数、二进制、八进制数的转换。
但是我只会很零散的做各个部分。所以,可有人会这个程序?帮我设计一份完整的参考。不胜感激!
以下是我的编程
#include<iostream.h>
#include<malloc.h>
#define MaxSize 16
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void ClearStack(SqStack *&s)
{
free(s);
}
//进栈
int Push(SqStack *&s,ElemType e)
{
if(s->top==MaxSize-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
//出栈
int Pop(SqStack *&s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}
//取栈顶元素
int GetTop(SqStack *s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
return 1;
}
//显示栈中元素
void DispStack(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
cout<<s->data[i];
}
//十六进制判断
void Judge(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
{
if(s->data[i]==10) cout<<"A";
else if(s->data[i]==11) cout<<"B";
else if(s->data[i]==12) cout<<"C";
else if(s->data[i]==13) cout<<"D";
else if(s->data[i]==14) cout<<"E";
else if(s->data[i]==15) cout<<"F";
else cout<<s->data[i];
}
}
void main()
{
SqStack *s;
InitStack(s);
int i,t,j,m;//要转换的进制,j要被转换的数
cout<<"请输入要转换的数(注意:j的范围):";
cin>>j;
cout<<"请输入要转换成的进制(二进制,八进制,十六进制):";
cin>>i;
if(i==2||i==8)
{
if(j<0)
{ m=-j;
while(m!=0)
{
t=m%i;
Push(s,t);
m=m/i;
}
Push(s,1);
}
else if(j>0)
{
while(j!=0)
{
t=j%i;
Push(s,t);
j=j/i;
}
Push(s,0);
}
cout<<"转换成"<<i<<"进制后的代码(首位为符号位):";
DispStack(s);
ClearStack(s);
}
if(i==16)
{
if(j<0)
{ m=-j;
while(m!=0)
{
t=m%i;
Push(s,t);
m=m/i;
}
Push(s,1);
}
else if(j>0)
{
while(j!=0)
{
t=j%i;
Push(s,t);
j=j/i;
}
Push(s,0);
}
cout<<"转换成"<<i<<"进制后的代码(首位为符号位):";
Judge(s);
ClearStack(s);
}
cout<<endl;
}
#include "stdio.h"
#include "math.h"
void main(){
int q,m,k,p,s[50];
double n;
m=0;
printf("\n 请输入八进制数n:");
scanf("%lf",&n);
printf("\n 请输入转换进制数p(2-16):");
scanf("%d",&p);
printf(" (%f)10=(",n);
while(n!=0){
q=fmod(n,p);
n=floor(n/p);
m++;
s[m]=q;
}
for(k=m;k>=1;k--){
if(s[k]>9){
printf("%c",s[k]+55);
}
else{
printf("%d",s[k]);
}
}
printf(")%d\n",p);
}
#include<iostream.h>
#include<malloc.h>
#define MaxSize 16
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void ClearStack(SqStack *&s)
{
free(s);
}
//进栈
int Push(SqStack *&s,ElemType e)
{
if(s->top==MaxSize-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
//出栈
int Pop(SqStack *&s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}
//取栈顶元素
int GetTop(SqStack *s,ElemType &e)
{
if(s->top==-1)
return 0;
e=s->data[s->top];
return 1;
}
//显示栈中元素
void DispStack(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
cout<<s->data[i];
}
//十六进制判断
void Judge(SqStack *s)
{
int i;
for(i=s->top;i>=0;i--)
{
if(s->data[i]==10) cout<<"A";
else if(s->data[i]==11) cout<<"B";
else if(s->data[i]==12) cout<<"C";
else if(s->data[i]==13) cout<<"D";
else if(s->data[i]==14) cout<<"E";
else if(s->data[i]==15) cout<<"F";
else cout<<s->data[i];
}
}
void main()
{
SqStack *s;
InitStack(s);
int i,t,j,m;//要转换的进制,j要被转换的数
cout<<"请输入要转换的数(注意:j的范围):";
cin>>j;
cout<<"请输入要转换成的进制(二进制,八进制,十六进制):";
cin>>i;
if(i==2||i==8)
{
if(j<0)
{ m=-j;
while(m!=0)
{
t=m%i;
Push(s,t);
m=m/i;
}
Push(s,1);
}
else if(j>0)
{
while(j!=0)
{
t=j%i;
Push(s,t);
j=j/i;
}
Push(s,0);
}
cout<<"转换成"<<i<<"进制后的代码(首位为符号位):";
DispStack(s);
ClearStack(s);
}
if(i==16)
{
if(j<0)
{ m=-j;
while(m!=0)
{
t=m%i;
Push(s,t);
m=m/i;
}
Push(s,1);
}
else if(j>0)
{
while(j!=0)
{
t=j%i;
Push(s,t);
j=j/i;
}
Push(s,0);
}
cout<<"转换成"<<i<<"进制后的代码(首位为符号位):";
Judge(s);
ClearStack(s);
}
cout<<endl;
}