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