函数+进制转换器

Posted tvoimvyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数+进制转换器相关的知识,希望对你有一定的参考价值。

一.运行截图

技术图片

 注释:正常操作由二进制数转换为八进制数。

技术图片

注释:如果输入输出前后进制类型相同,输出输入的值。

技术图片

注释:如果输入进制类型不是规则给定的,输出错误。

技术图片

注释:如果输入进制类型不是规则给定的,输出错误。

技术图片

注释:如果输入的数与该数进制类型不符,输出错误。

二.函数介绍

 ①二进制→八进制

void twoTOeight(int x){
    if(x%10>1){
        printf("ERROR!");
        return;
    }
    int  result1=0,result2=0,i=0,remainder;
    while(x!=0){
        remainder=x%10;
        result1+=remainder*pow(2,i);
        i++;
        x=x/10;
    }
    i=1;
    while(result1!=0){
        result2+=(result1%8)*i;
        result1=result1/8;
        i=i*10;
    }
    printf("转换成功!
结果为:%d",result2);
}

 思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为八进制。

②二进制→十进制

void twoTOten(int x){
    if(x%10>1){
        printf("ERROR!");
        return;
    }
    int result1=0,i=0,remainder;
    while(x!=0){
        remainder=x%10;
        result1+=remainder*pow(2,i);
        i++;
        x=x/10;
    }
    printf("转换成功!
结果为:%d",result1);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制。

③八进制→二进制

void eightTOtwo(int x){
    if(x%10>7){
        printf("ERROR!");
        return;
    }
    int result1=0,result2=0,i=0,remainder;
    while(x!=0){
        remainder=x%10;
        result1+=remainder*pow(8,i);
        i++;
        x=x/10;
    }
    i=1;
    while(result1!=0){
        result2+=(result1%2)*i;
        result1=result1/2;
        i=i*10;
    }
    printf("转换成功!
结果为:%d",result2);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为二进制。

④八进制→十进制

void eightTOten(int x){
    if(x%10>7){
        printf("ERROR!");
        return;
    }
    int result1=0,i=0;
    while(x!=0){
        result1+=(x%10)*pow(8,i);
        i++;
        x=x/10;
    }
    printf("转换成功!
结果为:%d",result1);
}

思路:首先判断输入的数是否合法,再将输入的数转为十进制。

⑤十进制→二进制

void tenTOtwo(int x){
    int result1=0,i=1;
    while(x!=0){
        result1+=(x%2)*i;
        x=x/2;
        i=i*10;
    }
    printf("转换成功!
结果为:%d",result1);
}

思路:直接由十进制转为二进制。

⑥十进制→八进制

void tenTOeight(int x){
    int result1=0,i=1;
    while(x!=0){
    result1+=(x%8)*i;
    x=x/8;
    i=i*10;
    }
    printf("转换成功!
结果为:%d",result1);
}

思路:直接由十进制转为八进制。

三.main函数

 

int main()
{
    int system1,system2,x;
    printf("输入待转换值为何进制数
");
    printf("二进制输入2;八进制输入8;十进制输入10
");
    printf("输入进制数:");
    scanf("%d",&system1);
    if(system1!=2&&system1!=8&&system1!=10){
        printf("ERROR!");
        return 0;
    }
    printf("输入转换后的数为何进制数
");
    printf("二进制输入2;八进制输入8;十进制输入10
");
    printf("输入进制数:");
    scanf("%d",&system2);
    if(system2!=2&&system2!=8&&system2!=10){
        printf("ERROR!");
        return 0;
    }
    printf("输入待转换数:");
    scanf("%d",&x);
    if(system1==2&&system2==8){
        twoTOeight(x);
    }
    if(system1==2&&system2==10){
        twoTOten(x);
    }
    if(system1==8&&system2==2){
        eightTOtwo(x);
    }
    if(system1==8&&system2==10){
        eightTOten(x);
    }
    if(system1==10&&system2==2){
        tenTOtwo(x);
    }
    if(system1==10&&system2==8){
        tenTOeight(x);
    }
    if(system1==system2){
        printf("你想这么玩吗,那答案就是%d",x);
    }
    return 0;
}

 四.思维导图

技术图片

 

 五.问题解答

      问题①:如何使输入不合本程序规则的进制类型输出错误。如,输入七进制,输出ERROR!

          解决方案:

 

scanf("%d",&system1);
    if(system1!=2&&system1!=8&&system1!=10){
        printf("ERROR!");
        return 0;
    }

若输入的值不是2或8或10,输出ERROR!

      问题②:如何输入不符进制类型的待转换数输出错误。如,输入二进制,输入19,输出ERROR!

         解决方案:

if(x%10>1){
        printf("ERROR!");
        return;
    }

在每个函数之前(除10进制,系统已默认十进制所以不需要)加入该代码,二进制余数大于1,八进制余数大于7,即可满足要求。

六.代码互评

void Numchange(int m, int b)//将10进制数转化为任意进制数
{
    
    int n = m;
    int count = 0;
    if (m == 0) printf("0");
    while (n != 0)
    {
        n = n / b;
        count++;
    }
    int number;
    for (int i = count; i >= 1; i--)
    {
        number = m / (int)pow(b, i - 1);
        if (number < 10) {
            printf("%d", number);
        }
        else {
            printf("%c", number + 55);
        }
        m = m % (int)pow(b, i - 1);
    }
}

可以看出他的代码的范畴更广,不像我局限于指定由何进制转换为何进制,他的代码可以让10进制转换为任意进制,而其他的进制又比较容易转为十进制,可以看出这个代码已经基本完成了任意进制转换为任意进制,灵活性非常高,而这种灵活性是学习代码,使用代码所必要的,是我非常需要学习和改进的地方。

 七.总结

 1.学会如何从二进制转换为其他进制,反之亦然。

 2.在代码互评中明白了代码不仅要对,还要活,这是我必然要学习的地方。

 3.函数的应用使得我打代码时的思路更加的清晰,使主函数部分的代码变得清晰明朗,函数部分的代码也能更好的编写和体现。

 

 

以上是关于函数+进制转换器的主要内容,如果未能解决你的问题,请参考以下文章

ZZNUOJ_C语言1112:进制转换(函数专题)(完整代码)

c语言16进制转换为10进制数的函数是啥?

web代码片段

求十进制转换二进制C语言代码

这个奇怪的函数将字符串转换为二进制吗?

十进制到十六进制转换c++内置函数