码迷,mamicode.com
首页 > 其他好文 > 详细

进制转换器beta 1

时间:2019-11-06 21:20:00      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:har   void   count   scan   amp   ash   检测   倒序   break   

一.运行截图

技术图片

技术图片

 

 

 二.拓展功能

技术图片

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

三.函数&功能

1.menu函数

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

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

void zio()           //10->2
{
    int n,m, c = 1, i = 0;
    int a[100];
    printf("您的选择是十进制转二进制\n");
    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("\n");  
}

 

 

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

void zeroone()      //10->8
{
    int n,m, c = 1, i = 0;
    int a[100];
    printf("您的选择是十进制转八进制\n");
    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("\n");
}

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("您的选择是十进制转十六进制\n");
        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("\n");
}      

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

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

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

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

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

void decade()       //16—>10
{
    char s[50];
    char a[50];
    printf("您的选择是十六进制转十进制\n");
    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\n",sum);
    }
    else {
        printf("请检查输入的十六进制数=(");
        return decade();
    }
    printf("\n");
}

四.main函数

int main()
{
    int x = 0;
    while(1)
    {
        menu();
        printf("      ————————————————————————————————————\n");
        printf("       请选择 [1] [2] [3] [4] [5] [6] [0]\n");
        printf("      ————————————————————————————————————\n");
        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("正在退出...\n");
                return 0;
                break;
            default:
                printf("请检查你的选项:(\n");
                break;
        }
    }
    return 0;
}

五.函数关系

技术图片

 

 六.问题解决

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

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

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

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

七.总结

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

善用数组来满足需求。

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

 

 

 

进制转换器beta 1

标签:har   void   count   scan   amp   ash   检测   倒序   break   

原文地址:https://www.cnblogs.com/bob3000/p/11808704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!