天天看點

C語言數制互相轉化

#includestdio.h>

#includestring.h>

#includestdlib.h>

void D_B(int);

void D_O(int);

void D_X(int);

void B_D(int);

void B_O(int);

void B_X(int);

void O_B(int);

void O_D(int);

void O_X(int);

void X_B(char r[],int k);

void X_D(char r[],int k);

void X_O(char r[],int k);

void main()

{

 int i,j,k=0;

 int q;

 char r[10];

 printf("+=============================================================+/n");

 printf("| 歡 迎 使 用 進 制 轉 換 程 序 |/n");

 printf(" 注 : 本 版 本 隻 做 正 整 數 的 進 制 轉 換 ! !");

 do

 {

  q=0;

  //fflush(stdin);

  printf("/n請選擇需要被轉換的進制:/n0、退出/n1、二進制/n2、八進制/n3、十進制/n4、十六進制/n");

  scanf("%d",&i);

  switch (i)

  {

   case 1: printf("/n請選擇轉換後的進制:/n0、退出/n1、二進制/n2、八進制/n3、十進制/n4、十六進制/n");

     scanf("%d",&j);

     switch(j)

     {

     case 1: printf("/n同進制之間不用轉化!/n");

       q=1;

       break;

     case 2: printf("/n請輸入您想要轉化的數:");

       scanf("%d",&k);

       B_O(k);

     case 3: printf("/n請輸入您想要轉化的數:");

       B_D(k);

     case 4: printf("/n請輸入您想要轉化的數:");

       B_X(k);

     case 0:

       printf("謝謝使用!!");

     }

     break;

   case 2: printf("/n請選擇轉換後的進制:/n0、退出/n1、二進制/n2、八進制/n3、十進制/n4、十六進制/n");

     case 2: printf("/n同進制之間不用轉化!/n");

        q=1;

     case 1: printf("/n請輸入您想要轉化的數:");

       O_B(k);

       O_D(k);

       O_X(k);

   case 3: printf("/n請選擇轉換後的進制:/n0、退出/n1、二進制/n2、八進制/n3、十進制/n4、十六進制/n");

     case 3: printf("/n同進制之間不用轉化!/n");

       D_B(k);

       D_O(k);

       D_X(k);

   case 4: printf("/n請選擇轉換後的進制:/n0、退出/n1、二進制/n2、八進制/n3、十進制/n4、十六進制/n");

     case 4: printf("/n同進制之間不用轉化!/n");

     case 1: printf("/n請輸入您想要轉化的數:");

        fflush(stdin);

        gets(r);

        for(k=0;;k++)

        {

         if(r[k]=='/0')

         break;

        }

       X_B(r,k);

     case 2: printf("/n請輸入您想要轉化的數:");

       fflush(stdin);

       X_O(r,k);

     case 3: printf("/n請輸入您想要轉化的數:");

       X_D(r,k);

      printf("謝謝使用!!");

   case 0: printf("/n謝謝使用!/n");

  }

 }while(q==1);

}

 ///////以下為: 二進制轉換為十進制,八進制,十六進制.

void B_D(int a)

 int i,s=0;

 int result=0;

 for(i=1;a!=0;i*=2)

  if(a%10>1)

   s=1;

   break;

  else

   result+=(a%10)*i;

   a=a/10;

 }

 if(s==1)

  printf("您的輸入有誤!請重新輸入/n");

 else

 printf("/n轉換後的數為:%d/n",result);

void B_O(int a)

 int i,j,k,s=0;

 int p[30];

 for(j=0;result!=0;j++)

  p[j]=result%8;

  result=result/8;

  printf("/n轉換後的數為:");

  for(k=j-1;k>=0;k--)

   printf("%d",p[k]);

  printf("/n");

void B_X(int a)

 char p[30];

  p[j]=result%16;

  result=result/16;

  if (p[j]>10)

   switch(p[j])

   {

   case 10: p[j]='A';

      break;

   case 11: p[j]='B';

   case 12: p[j]='C';

   case 13: p[j]='D';

   case 14: p[j]='E';

   case 15: p[j]='F';

   }

  else p[j]+=48;

   printf("%c",p[k]);

 ///////以下為: 八進制轉換為二進制,十進制,十六進制.

void O_B(int a)

 for(i=1;a!=0;i*=8)

 {if(a%10>7)

  p[j]=result%2;

  result=result/2;

void O_D(int a)

  if(a%10>7)

  printf("/n轉換後的數為:%d/n",result);

void O_X(int a)

  if(p[j]10)

   p[j]+=48;

 ///////以下為: 十六進制轉換為十進制,二進制,八進制.

void X_D(char a[],int k)

 int i,j,s=0;

 int b[50];

 for(i=0;ik;i++)

  if(a[i]='9'&&a[i]>='1')

  { b[i]=a[i]-48;

   switch(a[i])

   case 'A': b[i]=10;

   case 'B': b[i]=11;

   case 'C': b[i]=12;

   case 'D': b[i]=13;

   case 'E': b[i]=14;

   case 'F': b[i]=15;

   case 'a': b[i]=10;

   case 'b': b[i]=11;

   case 'c': b[i]=12;

   case 'd': b[i]=13;

   case 'e': b[i]=14;

   case 'f': b[i]=15;

   default: s=1;

 for(i=1,j=k-1;j>=0;j--,i*=16)

  result+=b[j]*i;

  printf("/n轉換後的數為:%d",result);

void X_B(char a[],int k)

   b[i]=a[i]-48;

 for(j=k-1,i=1;j>=0;j--,i*=16)

  for(j=0;result!=0;j++)

void X_O(char a[],int k)

 int b[30];

///////以下為: 十進制轉換為二進制,八進制,十六進制.

void D_B(int a)

 int j,k;

 for(j=0;a!=0;j++)

  p[j]=a%2;

  a=a/2;

 printf("/n轉換後的數為:");

 for(k=j-1;k>=0;k--)

  printf("%d",p[k]);

 printf("/n");

void D_O(int a)

  p[j]=a%8;

  a=a/8;

void D_X(int a)

  p[j]=a%16;

  a=a/16;

  printf("%c",p[k]);

繼續閱讀