进制转换

半腔热情 提交于 2019-12-04 04:53:22

一. 程序运行截图:

(1)二进制转十进制,八进制,十六进制:

(2)八进制转二进制,十进制,十六进制:

(3)十六进制转十进制,二进制,八进制:

(4)十进制转二进制、八进制、十六进制:

二. 函数介绍:

(1)二进制转十进制,八进制,十六进制:

//2进制转10进制
void two_ten(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 /= 10;
        }
    }
    if (s == 1)
        printf("Error!\n");
    else
        printf("\n二进制转换十进制为:%d\n", result);
}
//2进制转8进制
void two_eight(int a)
{
    int i, j, k, s = 0;
    int p[30];
    int result = 0;
    for (i = 1; a != 0; i *= 2)
    {
        if (a % 10 > 1)
        {
            s = 1;break;
        }
        else
        {
            result += (a % 10) * i;
            a /= 10;
        }
    }
    for (j = 0; result != 0; j++)
    {
        p[j] = result % 8;
        result /= 8;
    }
    if (s == 1)
        printf("Error!\n");
    else
    {
        printf("\n二进制转换八进制为:");
        for (k = j - 1; k >= 0; k--)
            printf("%d", p[k]);

        printf("\n");
    }
}
//2进制转16进制
void two_sixteen(int a)
{
    int i, j, k, s = 0;
    char p[30];
    int result = 0;
    for (i = 1; a != 0; i *= 2)
    {
        if (a % 10 > 1)
        {
            s = 1;break;
        }
        else
        {
            result += (a % 10) * i;
            a /= 10;
        }
    }
    for (j = 0; result != 0; j++)
    {
        p[j] = result % 16;
        result /= 16;
        if (p[j] >= 10)
        {
            switch (p[j])
            {
            case 10: p[j] = 'A';break;
            case 11: p[j] = 'B';break;
            case 12: p[j] = 'C';break;
            case 13: p[j] = 'D';break;
            case 14: p[j] = 'E';break;
            case 15: p[j] = 'F';break;
            }
        }
        else
            p[j] += 48;
    }
    if (s == 1)
        printf("Error!\n");
    else
    {
        printf("\n二进制转换十六进制为:");
        for (k = j - 1; k >= 0; k--)
            printf("%c", p[k]);
        printf("\n");
    }
} 

(2)八进制转二进制,十进制,十六进制:

void eight_two(int a)
{
    int i, j, k, s = 0;
    int result = 0;
    int p[30];

    for (i = 1; a != 0; i *= 8)
    {
        if (a % 10 > 7)
        {
            s = 1;
            break;
        }
        else
        {
            result += (a % 10) * i;
            a /= 10;
        }
    }

    for (j = 0; result != 0; j++)
    {
        p[j] = result % 2;
        result /= 2;
    }

    if (s == 1)
        printf("Error!\n");
    else
    {
        printf("\n八进制转换二进制为:");
        for (k = j - 1; k >= 0; k--)
            printf("%d", p[k]);

        printf("\n");
    }
}

//8进制转10进制
void eight_ten(int a)
{
    int i, s = 0;
    int result = 0;
    for (i = 1; a != 0; i *= 8)
    {
        if (a % 10 > 7)
        {
            s = 1;
            break;
        }
        else
        {
            result += (a % 10) * i;
            a /= 10;
        }
    }

    if (s == 1)
        printf("Error!\n");
    else
    {
        printf("\n八进制转换十进制为:%d\n", result);
    }
}

//8进制转16进制
void eight_sixteen(int a)
{
    int i, j, k, s = 0;
    char p[30];
    int result = 0;

    for (i = 1; a != 0; i *= 8)
    {
        if (a % 10 > 7)
        {
            s = 1;
            break;
        }
        else
        {
            result += (a % 10) * i;
            a /= 10;
        }
    }

    for (j = 0; result != 0; j++)
    {
        p[j] = result % 16;
        result = result / 16;
        if (p[j] < 10)
            p[j] += 48;
        else
        {
            switch (p[j])
            {
            case 10: p[j] = 'A';
                break;
            case 11: p[j] = 'B';
                break;
            case 12: p[j] = 'C';
                break;
            case 13: p[j] = 'D';
                break;
            case 14: p[j] = 'E';
                break;
            case 15: p[j] = 'F';
                break;
            }
        }
    }

    if (s == 1)
        printf("Error!\n");
    else
    {
        printf("\n八进制转换十六进制为:");
        for (k = j - 1; k >= 0; k--)
            printf("%c", p[k]);

        printf("\n");
    }
}

(4)十进制转二进制、八进制、十六进制:

void ten_two(int a)//十进制转换为二进制
{
    int j, k;
    int p[30];
    for (j = 0; a != 0; j++)
    {
        p[j] = a % 2;
        a /= 2;
    }
    printf("\n十进制转换二进制为:");
    for (k = j - 1; k >= 0; k--)
        printf("%d", p[k]);
    printf("\n");
}
void ten_eight(int a)//十进制转换为八进制:
{
    int j, k;
    int p[30];
    for (j = 0; a != 0; j++)
    {
        p[j] = a % 8;
        a /= 8;
    }
    printf("\n十进制转换八进制为:");
    for (k = j - 1; k >= 0; k--)
        printf("%d", p[k]);
    printf("\n");
}
void ten_sixteen(int a)//十进制转换为十六进制:
{
    int j, k;
    int p[30];
    for (j = 0; a != 0; j++)
    {
        p[j] = a % 16;
        a /= 16;
        if (p[j] < 10)
            p[j] += 48;
        else
        {
            switch (p[j])
            {
            case 10: p[j] = 'A'; break;
            case 11: p[j] = 'B'; break;
            case 12: p[j] = 'C'; break;
            case 13: p[j] = 'D'; break;
            case 14: p[j] = 'E'; break;
            case 15: p[j] = 'F'; break;
            }
        }
    }
    printf("\n十进制转换十六进制为:");
    for (k = j - 1; k >= 0; k--)
        printf("%c", p[k]);
    printf("\n");
}

(5)main() 函数:

int main()
{
    int n = 0;
    int l = 1,a;
    while (l)
    {
        printf("请选择:");
        scanf_s("%d", &n);
        printf("请输入你的数:\n");
        scanf_s("%d", &a);
        switch (n)
        {
        case 1:two_ten(a);break; two_eight;
        case 2:two_eight(a);break;
        case 3:two_sixteen(a);break;
        case 4:eight_two(a);break;
        case 5:eight_ten(a);break;
        case 6:eight_sixteen(a);break;
        case 7:sixteen_ten(); break;
        case 8:sixteen_two(); break;
        case 9:sixteen_eight(); break;
        case 10:ten_two(a); break;
        case 11:ten_eight(a); break;
        case 12:ten_sixteen(a); break;
        default:
            printf("Error!!!\n");break;
        }
    }
    return 0;
}

三. 思维导图:

三.问题与解决方法:

我太难了我,经历了九九八十一难:

(1)问题:main 函数刚开始不知该怎么写去放自己的函数。

解决方法:看了一些其他已提交同学的放置方法,根据他们的来重新整理自己的逻辑解决的!

(2) 问题:不知到怎么用数组写代码。

解决方法:看视频和例题,重新认识数组余循环。

(3) 问题:不会敲十六进制的转换代码。

解决方法:找度娘,现在也不是很理解。

四. 总结:

(1)敲代码真的不容易,所以每次敲完的代码及的保存。

(2)敲代码是记得集中注意力,最好是一气呵成,防止思路断掉。

(2)敲代码是要注意每一个标点符号与数字,一步错,步步错。

六.代码互评:

int One(int choice, int number)
{
    int sum = 0, count = 0;
    int value, j;
    int b;
    value = number;
    do
    {
        value /= 10;
        count++;
    } while (value > 0);
    value = number;
    for (j = 0;j < count; j++)
    {
        b = value % 10;
        sum = sum + b * pow(choice, j);
        value /= 10;
    }
    return sum;
}

这是雷雯雯同学的代码,真的非常简洁明了,避免了又长又臭的代码,满眼的羡慕,羡慕。
而且写的代码也是独辟蹊径,很有自己的想法,崇拜,崇拜!很有技巧性的写法!
看来我要加加油了!!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!