进制转换器++
一.博客内容
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; }
以上是居政同学的代码,
智能防沉迷系统系统有点强啊,很有创意。