admin 管理员组文章数量: 1087858
2024年12月23日发(作者:xml文件怎么打开成excel 格式)
#include
#include
#define MaxSize 50
#define FALSE 0
#define TRUE 1
typedef int BOOL;
typedef int T;
typedef struct stack{
int Top,MaxStack;
T Elements[MaxSize];
}Stack;
/*
typedef struct stacksixteen{
int Top,MaxStack;
char Elements[MaxSize];
}Stacksixteen;
*/
void CreateStack(Stack *s,int maxsize)
{
s->Top=-1;
s->MaxStack=maxsize;
}
BOOL IsEmpty(Stack s)
{
return <0;
}
BOOL IsFull(Stack s)
{
return >=ck-1;
}
void Push(Stack *s,T x)
{
if(IsFull(*s))
printf("数据过长,无法显示");
else
s->Elements[++s->Top]=x;
}
void getTopsixteen(Stack *s,char *X)
{
if(IsEmpty(*s))
printf("无数据");
}
void Pushsixteen(Stack *s,char x)//十六进制压栈
{
if(IsFull(*s))
printf("数据过长,无法显示");
else
s->Elements[++s->Top]=x;
}
void Pop(Stack * s)
{
if(IsEmpty(*s))
printf("无数据");
else
s->Top--;
}
void PrintStack(Stack s)
{
while(>=0)
{
printf("%d",ts[]);
--;
}
}
void PrintStacksixteen(Stack s)
{
while(>=0)
{
switch(ts[])
{
case 10 : printf("A"); break;
case 11 : printf("B"); break;
case 12 : printf("C"); break;
case 13 : printf("D"); break;
case 14 : printf("E"); break;
case 15 : printf("F"); break;
default : printf("%d",ts[]);break;
}
--;
}
}
else
* X=s->Elements[s->Top];
s->Top--;
{
if((*X>='0'&&*X<='9')||*X=='A'||*X=='B'||*X=='C'||*X=='D'||*X=='E'||*X=='F')
{
switch(*X)
{
case '0': *X=0; break;
case '1': *X=1; break;
case '2': *X=2; break;
case '3': *X=3; break;
case '4': *X=4; break;
case '5': *X=5; break;
case '6': *X=6; break;
case '7': *X=7; break;
case '8': *X=8; break;
case '9': *X=9; break;
case 'A': *X=10; break;
case 'B': *X=11; break;
case 'C': *X=12; break;
case 'D': *X=13; break;
case 'E': *X=14; break;
case 'F': *X=15; break;
default : break;
}
}
else
{
printf("你输入非法数据,请重新输入n");
printf("按任意键继续");
return FALSE;
}
return TRUE;
}
char Checkchar(char *p)
{
char a;
printf("str1检查中=%sn",p);/////
if(strcmp("000",p)==0)
a='0';
if(strcmp("100",p)==0)
a='1';
if(strcmp("010",p)==0)
a='2';
if(strcmp("110",p)==0)
a='3';
if(strcmp("001",p)==0)
a='4';
}
/*
char Checkchar(char str1[3])
{
char c;
int i;
printf("str1检查中=%sn",str1);/////
for(i=0;i<=2;i++)
{
if(str1[i]>='0'&&str1[i]<='1')
{
if(str1[0]=='0'&&str1[0]=='0'&&str1[2]=='0')
c='0';
if(str1[0]=='1'&&str1[1]=='0'&&str1[2]=='0')
c='1';
if(str1[0]=='0'&&str1[1]=='1'&&str1[2]=='0')
c='2';
if(str1[0]=='1'&&str1[1]=='1'&&str1[2]=='0')
c='3';
if(str1[0]=='0'&&str1[1]=='0'&&str1[2]=='1')
c='4';
if(str1[0]=='1'&&str1[1]=='0'&&str1[2]=='1')
c='5';
if(str1[0]=='0'&&str1[1]=='1'&&str1[2]=='1')
c='6';
if(str1[0]=='1'&&str1[1]=='1'&&str1[2]=='1')
c='7';
}
else
{
printf("你输入非法数据,请重新输入n");
break;
}
}
//if(str1[])
return c;
}
*/
void ten_to_two()
{
/*unsigned short a,b,c=0x8000,i;
if(strcmp("101",p)==0)
a='5';
if(strcmp("011",p)==0)
a='6';
if(strcmp("111",p)==0)
a='7';
return a;
scanf("%hd",&a);
for(i=1;i<=16;i++)
{
b=a&c?1:0;
printf("%d",b);
c>>=1;
}*/
unsigned short num;
T iZ=0,iy=0;
BOOL flag=FALSE;
Stack s;
CreateStack(&s,MaxSize);
printf("请输入一个十进制的整数:");
scanf("%hd",&num);
do
{
iZ=num/2;
iy=num%2;
Push(&s,iy);
num=iZ;
if(iZ!=0)
{
flag=TRUE;
}
else
{
flag=FALSE;
}
}while(flag);
printf("转换后的二进制数");
PrintStack(s);
printf("Bn");
}
void ten_to_eight()
{
unsigned short num;
T iZ=0,iy=0;
BOOL flag=FALSE;
Stack s1;
CreateStack(&s1,MaxSize);
printf("请输入一个十进制的整数:");
scanf("%hd",&num);
do
{
iZ=num/8;
iy=num%8;
Push(&s1,iy);
num=iZ;
if(iZ!=0)
{
flag=TRUE;
}
else
{
flag=FALSE;
}
}while(flag);
printf("转换后的八进制数");
PrintStack(s1);
printf("On");
}
void ten_to_sixteen()
{
unsigned short num;
T iZ=0,iy=0;
BOOL flag=FALSE;
Stack s2;
CreateStack(&s2,MaxSize);
printf("请输入一个十进制的整数:");
scanf("%hd",&num);
do
{
iZ=num/16;
iy=num%16;
Push(&s2,iy);
num=iZ;
if(iZ!=0)
{
flag=TRUE;
}
else
{
flag=FALSE;
}
}while(flag);
printf("转换后的十六进制数");
PrintStacksixteen(s2);
printf("Hn");
printf("按任意键继续");
}
void sixteen_to_ten()
{
int i,j,len,tennum=0,tenshuLst=0,tenshu=0,temp=1;
char str[100];
BOOL flagCheck;
Stack s3;
char x;
CreateStack(&s3,MaxSize);
printf("请输入一个十六进制的整数:");
getchar();
gets(str);//因为十六进制数可能带字符,所以用字符串接收
len=strlen(str);
// printf("str=%sn",str);///////
//printf("len=%dn",len);///////
for(i=0;i<=len-1;i++)
{
//printf("str[%d]=%cn",i,str[i]);///////
Pushsixteen(&s3,str[i]);// 挨个把数据圧栈
}
for(i=0;i<=len-1;i++)
{
getTopsixteen(&s3,&x);
// printf("x-出栈后=%dn",x);/////
flagCheck=Checknum(&x);
//printf("x-检查后=%dn",x);/////
if(flagCheck==FALSE)
{
return;
}
if(i==0)
{
tenshuLst+=x;
//printf("末位=%dn",tenshuLst);////
}
else
{
for(j=1;j<=i;j++)
{
temp*=16;
//printf("新十值=%dn",temp);////
}
tenshu+=x*temp;
// printf("十值=%dn",tenshu);/////
}
}
tennum=tenshuLst+tenshu;
printf("转换后的十进制数为");
printf("%d",tennum);
printf("Dn");
printf("按任意键继续");
}
void two_to_eight()
{
int i,j=0,k,t,len;
char a,b,c,str[100];
char str1[3]={'0','0','0'};//清空str1
Stack s4,s5;
CreateStack(&s4,MaxSize);
CreateStack(&s5,MaxSize);
printf("请输入一个二进制的整数:");
getchar();
gets(str);
len=strlen(str);
printf("str=%sn",str);///////
printf("len_str=%dn",len);///////
i=len/3;
j=len%3;
printf("i=%d,j=%dn",i,j);///////
for(k=0;k<=len-1;k++)
{
//printf("str[%d]=%cn",k,str[k]);///////
Pushsixteen(&s4,str[k]);
}
if(j!=0)
{
if(j==1)
{
str1[0]=str[len-i*3-1];
str1[1]='0';
str1[2]='0';
}
if(j==2)
{
str1[0]=str[len-i*3-1];
str1[1]=str[len-i*3-2];
str1[2]='0';
}
str1[3]='0';///////////////////////
printf("检查前str1=%sn",str1);///////
c=Checkchar(str1);
printf("c==%cn",c);/////
}
else
{
//不做任何事
}
//if(len>=3)
for(k=0;k<=i-1;k++)
{
for(t=0;t<=3-1;t++)
{
getTopsixteen(&s4,&a);
printf("a=出栈后=%cn",a);/////
str1[t]=a;
printf("检查前str1[%d]=%cn",t,str1[t]);///////
}
str1[3]='0';///////////////////////
printf("str1检查前=%sn",str1);/////
b=Checkchar(str1);//检验应转换的字符
printf("b=检查后=%cn",b);/////
Pushsixteen(&s5,b);
}
if(j!=0)
{
Pushsixteen(&s5,c);
}
printf("转换后的八进制数");
while(>=0)
{
printf("%c",ts[]);
--;
}
printf("On");
printf("按任意键继续");
}
int main()
{
int GongN=0,flagXH=0;
BOOL flagTc=FALSE;
char Isgo_on;
do
{
printf("请输入您想选择的功能序号");
printf("-=-----------------------------------n");
printf("-=-----1 十进制转二进制--------------n");
printf("-=-----2 十进制转八进制--------------n");
printf("-=-----3 十进制转十六进制------------n");
printf("-=-----4 十六进制转十进制------------n");
printf("-=-----5 二进制转八进制--------------n");
printf("-=-----6 退出------------------------n");
printf("-=-----------------------------------n");
GongN=0;
printf("请输入您想选择的功能序号(1~6)");
scanf("%d",&GongN);
switch(GongN)
{
case 1: ten_to_two(); break;
case 2: ten_to_eight(); break;
case 3: ten_to_sixteen(); break;
case 4: sixteen_to_ten(); break;
case 5: two_to_eight(); break;
case 6: flagTc=TRUE; break;
default : break;
}
if(flagTc)
{
break;
}
getchar();
printf("请问是否继续输入运算?y/nn");
scanf("%c",&Isgo_on);
if(Isgo_on=='y'||Isgo_on=='Y')
{
flagXH=0;
}
else if(Isgo_on=='n'||Isgo_on=='N')
flagXH=1;
system("cls");//清屏!!
getchar();
}while(flagXH==0);
return 0;
}
版权声明:本文标题:进制转化算法c语言版 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1735018111a1623038.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论