进制转换器++

一.博客内容

1.运行截图

十进制转二进制

 

十进制转八进制

 

 

 

 

 十进制转十六进制

 

 

 

 

 

 二进制转八进制

 

 

 二进制转十,十六进制

 

 

 输入错误提示:

 

 

 

 

 

 例子太多就不一个个列了。

二.函数介绍:

1.main 函数:

int main() {
int choice,i;
for(i=1;;i++){
printf("十进制转换二进制请输入1\n");
printf("十进制转换八进制请输入2\n");
printf("十进制转换十六进制请输入3\n");
printf("二进制转换八进制请输入4\n");
printf("二进制转换十进制请输入5\n");
printf("二进制转换十六进制请输入6\n");
printf("十六进制转换十进制请输入7\n");

printf("结束请输入0\n");
scanf("%d", &choice);
if (choice == 0)break;
switch (choice) {
case 1:ten_to_two(); break;
case 2:ten_to_eight(); break;
case 3:ten_to_sixteen(); break;
case 4:two_to_eight(); break;
case 5:two_to_ten(); break;
case 6:two_to_sixteen(); break;
case 7:sixteen_to_ten(); break;

default:printf("ERROR\n"); break;

}
}
return 0;
}

3.其他函数

1.十进制转二进制函数:

void ten_to_two() {
    int a[32];
    int n, s, i = 0;
    printf("请输入一个十进制数\n");
    scanf("%d", &n);
    while (n != 0) {
        s = n % 2;
        a[i] = s;
        n = n / 2;
        i++;
    }for (i--; i >= 0; i--)
        printf("%d", a[i]);
    printf("\n");
}

2.十进制转八进制函数,十进制转十六进制函数:

void ten_to_eight() {
    int a[32];
    int n, s, i = 0;
    printf("请输入一个十进制数\n");
    scanf("%d", &n);
    while (n != 0) {
        s = n % 8;
        a[i] = s;
        n = n / 8;
        i++;
    }for (i--; i >= 0; i--)
        printf("%d", a[i]);
    printf("\n");
}
void ten_to_sixteen() {
    char a[] = { "0123456789ABCDEF" };
    int n, s=0, i = 0;
    char b[100];
    printf("请输入一个十进制数\n");
    scanf("%d", &n);
    while (n > 0) {
        s = n % 16;
        b[i] =a[s];
        n = n / 16;
        i++;
        
    }for (i--; i >= 0; i--)
        printf("%c", b[i]);
    printf("\n");

}

3.二进制转八进制函数:

void two_to_eight() {
    int n, s,v=0, sum = 0,i=0;
    int k = 3,copy,m;
    int count = 0,a[32];
    a[0] = 0;
    printf("请输入一个二进制数\n");
    scanf("%d", &n);
    copy = n;
    while (copy) {
        m = copy % 10;
        if (m >= 2) {
            printf("ERROR");//不符合要求进行提示重新开始
            break;
        }
        copy = copy / 10;
    }
    

            while (copy==0&&n > 0) {
                s = n % 10;
                n = n / 10;
                sum = sum + s * (int)pow(2, i);
                i++;
                count++;
                v = count / 3;
                if (count < 3 && n == 0) //判断二进制位数有没有小于3
                    printf("%d", sum);
                if (count % 3 == 0) { //当二进制位数等于3的倍数
                    if (count % 3 == 0) {
                        a[v] = sum;
                        sum = 0;//每到3的倍数进行重置
                        i = 0;
                    }
                }
                if ((count - (k * v)) > 0 && n == 0 && v != 0) {//二进制位数不等于3倍数且大于3

                    a[0] = sum;
                }if (a[0] != 0)//通过判断a[0]来判断是否输出sum
                    printf("%d", a[0]);
            }
        for (; v >= 1; v--) {
            printf("%d", a[v]);
        }
        printf("\n");
}

6.二进制转十进制函数:

void two_to_ten() {
    int n, s, i = 0,copy,m ,sum = 0;
    printf("请输入一个二进制数\n");
    scanf("%d", &n);
    copy = n;
    while (copy) {
        m = copy % 10;
        if (m >= 2) {
            printf("ERROR");//不符合要求进行提示重新开始
            break;
        }
        copy = copy / 10;
    }
    while (copy==0&&n > 0) {
        s = n % 10;
        n = n / 10;
        sum = sum + s * (int)pow(2, i);
        i++;
    }
    printf("%d\n", sum);
}

7.二进制转十六进制函数:

void two_to_sixteen() {
    int n, s, i = 0, copy, m, sum = 0;
    printf("请输入一个二进制数\n");
    scanf("%d", &n);
    copy = n;//先将二进制转为十进制
    while (copy) {
        m = copy % 10;
        if (m >= 2) {
            printf("ERROR");//不符合要求进行提示重新开始
            break;
        }
        copy = copy / 10;
    }
    while (copy == 0 && n > 0) {
        s = n % 10;
        n = n / 10;
        sum = sum + s * (int)pow(2, i);
        i++;
    }
    char a[] = { "0123456789ABCDEF" };//再将十进制转换成十六进制
    char b[100 ];
    i = 0;
    while (sum > 0) {
        s = sum % 16;
        b[i] = a[s];
        sum = sum / 16;
        i++;

    }for (i--; i >= 0; i--)
        printf("%c", b[i]);
    printf("\n");
}


7.十六进制转十进制

void sixteen_to_ten()
{
    int num = 0;
    printf("请输入一个十六进制数:");
    scanf("%x", &num);
    printf(" %d\n", num);
}

 

4.思维导图

 

 五.遇到问题及解决方案

1.刚开始对二进制转十六进制真的是毫无头绪;

后来看别人写的才想到将二进制转换成十进制,再转换成十六进制。

2.习惯用%d输出,忘记字符输出用%c。

六.总结 :

1.代码要尽量简洁,不能太繁琐,要容易看明白,这样在寻找错误的时候不容易乱。

2.对代码还是有很多问题没完全熟悉的,例如输出格式和最近刚学的字符数组还是需要再看看。

 

7.代码互评:

 

if(j%5==0){            //**智能防沉迷系统**//
        printf("\n");
        printf("您已使用进制转换器%d次,请注意适度独立自主的计算哦~\n",j);
        printf("(1)继续使用  (0)自主尝试\n");
    }else{
        printf("\n");
    printf("继续转换请按1,结束转换请按0 \n");
    } 
    scanf("%d",&p);
    if(p==1)continue;
    else break;
    }
    
    printf("感谢您的使用!请对我们的程序作出评价:\n");//**星级评价系统**//
    printf("    (1)* * * * * \n");
    printf("    (2)* * * *  \n");
    printf("    (3)* * *  \n");
    printf("    (4)* *  \n");
    printf("    (5)* \n");
    
    for(j=0;;j++)
    {
        scanf("%d",&z);
        if(z>5||z<1){
        printf("无效的选项\n"); 
        continue;
    }else break;
    }
    
    switch(z){
        case 1:printf("感谢您的肯定与支持!\n");break;case 2:case 3:case 4:printf("感谢您的评价!\n");break;
        case 5:printf("感谢您的批评,我们会继续优化程序!\n");break;
    }
    printf("******************************\n感谢您的使用,祝您生活愉快!\n");
    return 0;
 } 

 

以上是居政同学的代码,

智能防沉迷系统系统有点强啊,很有创意。

 

 

 

 

 

 

posted @ 2019-11-10 15:09  茅志雄  阅读(405)  评论(0编辑  收藏  举报