进制转换器beta 1

Posted bob3000

tags:

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

一.运行截图

技术图片

技术图片

 

 

 二.拓展功能

技术图片

 检测进制数是否错,若输错后无需返回菜单重新进行选择进制转换选项,可直接重新输入所需要转换的进制数

三.函数&功能

1.menu函数

void menu()          //菜单
{
    printf("                  \\ 我是菜单 /   
");
    printf("                   (?ì _ í?)  
");
    printf("        ——————十进制转换二进制  [1]——————  
");
    printf("        \\     十进制转换八进制  [2]    /   
");
    printf("          \\   十进制转换十六进制[3]  /   
");
    printf("            \\ 二进制转换十进制  [4]/    
");
    printf("             /八进制转换十进制  [5]\\  
");
    printf("              十六进制转换十进制[6]     
");
    printf("                  退     出     [0]   
");
    printf("                     |  |    
");
    printf("                     |  |    
");
    printf("                    _|  |_   
");
    printf("
");
    printf("
");    
}

2.zio函数(十进制转二进制)

void zio()           //10->2
{
    int n,m, c = 1, i = 0;
    int a[100];
    printf("您的选择是十进制转二进制
");
    printf("输入一个整数:");
    scanf("%d", &n);
    while(n > 0){
      m = n;
      a[i] = (m % 2);// 求模放进数组
      n = n / 2;     //用2辗转相除直至结果为1
      i++;
      c = 1;
    }
    while(n < 0){
      m = -n;
      a[i] = (m % 2);// 求模放进数组
      n = n / 2;     //用2辗转相除直至结果为1
      i++;
      c = 0;
    }
    printf("它的二进制数为 ");
    if(c == 1){
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(c == 0){
      printf("-");
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(m == 0)
    printf("0");
    printf("
");  
}

 

 

 3.zeroone函数(十进制转八进制)

void zeroone()      //10->8
{
    int n,m, c = 1, i = 0;
    int a[100];
    printf("您的选择是十进制转八进制
");
    printf("输入一个整数:");
    scanf("%d", &n);
    while(n > 0){
      m = n;
      a[i] = (m % 8);// 求模放进数组
      n = n / 8;     //用8辗转相除直至结果为1
      i++;
      c = 1;
    }
    while(n < 0){
      m = -n;
      a[i] = (m % 8);// 求模放进数组
      n = n / 8;     //用8辗转相除直至结果为1
      i++;
      c = 0;
    }
    printf("它的八进制数为 ");
    if(c == 1){
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(c == 0){
      printf("-");
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(m == 0)
    printf("0");
    printf("
");
}

4.build函数(十进制转十六进制)

void build()        //10->16
{
        char arr[] = "0123456789ABCDEF";
        char hex[16];
        int i = 0;
        int j = 0;
        int n = 0,a = 0,b;
        printf("您的选择是十进制转十六进制
");
        printf("请输入一个整数:");
        scanf("%d", &n);
        b = n;
        if(n < 0)
        n = -n;
        a = n;
        while (n)
        {
            hex[i++] = arr[n % 16];  //将模放进hex数组中
            n = n / 16;
        }
        printf("它的十六进制数为:");
        if(b == 0)
        printf("0");
        if(b<0)
        printf("-");
        for (j = i - 1; j >= 0; --j)
            printf("%c", hex[j]);
        printf("
");
}      

5.geiz函数(二进制转十进制)

void geiz()         //2->10
{   
        int n,a;
        int sum = 0, i = 0, m;
        printf("您的选择是二进制转十进制
");
        printf("请输入一个二进制数: ");
        scanf("%d", &n);
        if(n%10 >= 2){         //判断输入的是否为二进制数
            printf("请检查输入的二进制数=(
");
            return geiz();         //返回该函数进行重新输入
        }
        a = n;
        while (n != 0)
        {
            m = n % 10;
            n /= 10;
            sum += m*pow(2, i);
            ++i;
        }
        printf("该二进制的十进制为 %d
",sum);
}

 6.woz函数(八进制转十进制)

void woz()          //8->10
{
    int n, a;
    int sum = 0, i = 0, m;
    printf("您的选择是八进制转十进制
");
    printf("请输入一个八进制数: ");
    scanf("%d", &n);
    if(n%10 >= 8){
    printf("请检查输入的八进制数=(
");
    return woz();
    }
    a = n;
    while (n != 0)
    {
        m = n % 10;
        n /= 10;
        sum += m*pow(8, i);
        ++i;
    }
    printf("该八进制数转换为十进制为 %d
",sum);
}

7.decade函数(十六进制转十进制)

void decade()       //16—>10
{
    char s[50];
    char a[50];
    printf("您的选择是十六进制转十进制
");
    printf("请输入一个十六进制数:");
    scanf("%s", s);
    int t, i, count = 0, j = 0;
    long sum = 0;
    if (s[0] == -) {
        for (i = 0;s[i];i++) {
            a[i] = s[i + 1];
        }
        for (i = 0;s[i];i++) {
            s[i] = a[i];
        }
        j = 1;
    }
    for (i = 0;s[i];i++) {
        if (s[i] > F)
            count++;
    }
    if (count == 0) {
        for (i = 0;s[i];i++) {
            if (s[i] <= 9)
                t = s[i] - 0;
            else
                t = s[i] - A + 10;
            sum = sum * 16 + t;
        }
        printf("该十六进制数转换为十进制为:");    
        if (j == 1) {
            printf("-");
        }
        printf("%ld
",sum);
    }
    else {
        printf("请检查输入的十六进制数=(");
        return decade();
    }
    printf("
");
}

四.main函数

int main()
{
    int x = 0;
    while(1)
    {
        menu();
        printf("      ————————————————————————————————————
");
        printf("       请选择 [1] [2] [3] [4] [5] [6] [0]
");
        printf("      ————————————————————————————————————
");
        scanf("%d", &x);
        switch(x)
        {
            case 1:zio(); //10—>2
                break;
            case 2:zeroone();//10->8
                break;
            case 3:build();//10->16
                break;
            case 4:geiz();//2->10
                break;
            case 5:woz();//8—>10
                break;
            case 6:decade();//16->10
                break;
            case 0:
                printf("正在退出...
");
                return 0;
                break;
            default:
                printf("请检查你的选项:(
");
                break;
        }
    }
    return 0;
}

五.函数关系

技术图片

 

 六.问题解决

1.10->2数组倒序输出问题,需从i-1输出才能得到正确答案

2.10->2正负数判断问题,引入一个标记数更容易在后面的输出判断正负数

3.main程序中做到输出结果后不会立即退出程序,用while(1)循环控制程序进行可保证不会立即退出

4.字符串应为%s而不是%d输入

七.总结

加深对函数的理解与循环语句的应用。

善用数组来满足需求。

分离的函数部分使主程序不会过于繁杂,更容易确定问题所在。

 

 

 

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

Silverlight 中的十进制转换器无法正确处理丢失焦点

python中的转换beta回归

php初步

go语言怎么将二进制转为字符串

在代码片段中包含类型转换

进制的转换 以及十进制转换成x进制的代码