进制转化

一、运行截图

二、函数介绍

#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;
 }

 

 

以上是判断输入的数是不是八进制。

三、main函数

{
    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;
 } 

 四、思维导图

五、遇到的问题

遇到很多问题,比如说用字符型来转化进制,尝试了许多次因为时间有点急,还是没能整出来,在之后有空的时间里再尝试尝试。还有些问题,比如转十六进制,和十六进制转其他进制,不知道要怎么让a表示10,很困惑,但是可以通过参考其他同学的函数来理解这个问题。

六、作业互评

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;
}

他这种写法如果输入错误可以重新输入,这样使用起来比较方便,也比较好用。用switch case语句可以使这个程序看起来明了易懂,而且比较简洁,比if else好。

而我直接没想出这些东西。

七、总结

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

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

 

 

 

 

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