# 进制转化

#include<stdio.h>
#include<math.h>
int erzhuanshi(char m);
int bazhuanshi(int m);
void PrintN1( int m );
void PrintN2( int m);
int iserjinzhi(int m);
int isbajinzhi(int m);
 int erzhuanshi(char m)
{
int s=0,i=0,a;
while(n!=0)
{
a=m%10;
s+=a*pow(2,i);
m=m/10;
i++;
}
return s;
}

 int bazhuanshi(int n)
{
int s=0,i=0,a;
while(n!=0)
{
a=n%10;
s+=a*pow(8,i);
i++;
n=n/10;
}
return s;
}

 void PrintN1( int m )
{
int a[100],i=0,c,count=0,t;
while(m!=0)
{
c=m%2;
a[i]=c;
m=m/2;
i++;
count++;
}
for(i=0;i<=count/2;i++)
{t=a[i];a[i]=a[count-i-1];a[count-i-1]=t;
}
printf("经转化后的数字为:");
for(i=0;i<count;i++)
printf("%d",a[i]);
}

 void PrintN2(int m)
{
int a[100],i=0,c,count=0,t;
while(m!=0)
{
c=m%8;
a[i]=c;
m=m/8;
i++;
count++;
}
for(i=0;i<=count/2;i++)
{
t=a[i];a[i]=a[count-i-1];a[count-1-i]=t;
}
printf("转化后的数字为:");
for(i=0;i<count;i++)
printf("%d",a[i]);
}

 int iserjinzhi(int m)
{
char a[100];
int i=0,k;
while(a[i]=getchar()!='\n')
i++;
a[i]=0;
for(k=0;k<i;k++)
{
if(a[k]>'1'||a[k]<'0')
{
return 0;
break;
}
}
return 1;
}

 int isbajinzhi(int m)
{
char a[100];
int i=0,k;
while(a[i]=getchar()!='\n')
i++;
a[i]=0;
for(k=0;k<i;k++)
{
if(a[k]>'7'||a[k]<'0')
{
return 0;
break;
}
}
return 1;
}

{
int x,y;
printf("输入二进制输入1\n输入八进制输入2\n输入十进制输入3\n");
scanf("%d",&x);
printf("输入需要转化的数字:");
if(x==1)
{
scanf("%d",&y);
if(iserjinzhi(y))
{
y=erzhuanshi(y);
printf("转为八进制为:");
PrintN2( y);
printf("\n转为十进制为:%d",y);
}
else printf("INPUT ERROR");
}
if(x==2)
{
scanf("%d",&y);
if(isbajinzhi(y))
{
y=bazhuanshi(y);
printf("转为二进制为:");
PrintN1(y);
printf("\n转为十进制为:%d",y);
}
else printf("INPUT ERROR");
}
if(x==3)
{
scanf("%d",&y);
printf("转为二进制为:");
PrintN1(y);
printf("\n转为八进制为:");
PrintN2(y);
}
return 0;
} 

四、思维导图

int main()
{
int option1, option2;
printf("输入的进制类型为：\n");
A:
printf("[1]二进制  [2]八进制  [3]十进制  [4]十六进制\n");
scanf("%d", &option1);
switch (option1)
{
case 1:
printf("想要转换成？\n");
A1:
printf("[1]八进制  [2]十进制  [3]十六进制\n");
scanf("%d", &option2);
if (option2 != 1 && option2 != 2 && option2 != 3)
{
printf("输入错误！重新输入想转换成什么类型：\n");
goto A1;
}
printf("输入：");
tr2(option2);
break;
case 2:
printf("想要转换成？\n");
A2:
printf("[1]二进制  [2]十进制  [3]十六进制\n");
scanf("%d", &option2);
if (option2 != 1 && option2 != 2 && option2 != 3)
{
printf("输入错误！重新输入想转换成什么类型：\n");
goto A2;
}
printf("输入：");
tr8(option2);
break;
case 3:
printf("想要转换成？\n");
A3:
printf("[1]二进制  [2]八进制  [3]十六进制\n");
scanf("%d", &option2);
if (option2 != 1 && option2 != 2 && option2 != 3)
{
printf("输入错误！重新输入想转换成什么类型：\n");
goto A3;
}
printf("输入：");
tr10(option2);
break;
case 4:
printf("想要转换成？\n");
A4:
printf("[1]二进制  [2]八进制  [3]十进制\n");
scanf("%d", &option2);
if (option2 != 1 && option2 != 2 && option2 != 3)
{
printf("输入错误！重新输入想转换成什么类型：\n");
goto A4;
}
printf("输入：");
tr16(option2);
break;
default:
printf("输入错误！重新输入的进制类型为：\n");
goto A;
}
return 0;
}

(1)收获:我觉得收获了许多，在编写程序的过程中复习巩固了各个进制之间的转化知识，又强化了自己c语言的应用熟练度，很有用。而且在不断修改修改的过程中不断思考出很多思路，最后根据当前情况选择一条最好的思路，真的让人学到很多。

(2)函数我觉得是个很好用的东西，它可以简化主函数，而且有了它查错的时候更好找错，虽然有时候会增加运行时间，但是利大于弊。

posted @ 2019-11-10 21:07  揍你没商量  阅读(198)  评论(0编辑  收藏  举报