一.运行截图:
1.十进制数转二进制数:
2.十进制数转八进制数:
3.十进制数转十六进制数:
4.二进制数转十进制数:
5.八进制数转十进制数:
6.十六进制数转十进制数:
二.函数介绍:
1.函数声明
void two_ten();//二进制转十进制 void eight_ten();//八进制转十进制 void sixteen_ten();//十六进制转十进制 void ten_two();//十进制转二进制 void ten_eight();//十进制转八进制 void ten_sixteen();//十进制转十六进制
2.函数void ten_two();//十进制数转二进制数:
void ten_two() { int num, i; int a[20]; printf("\n请输入一个十进制数:"); scanf("%d", &num); for (i = 0; 1; i++) { a[i] = num % 2; num = num / 2; if (num == 0) { break; } } printf("转换为二进制:"); for (; i >= 0; i--) { printf("%d", a[i]); } printf("\n"); }
注:利用for循环使十进制数转为二进制数并存入数组当中。
3.函数void ten_eight();//十进制数转八进制数:
void ten_eight() { int number, i; int a[20]; printf("\n请输入一个十进制数:"); scanf("%d", &number); for (i = 0; 1; i++) {//将十进制转为八进制并存入数组 a[i] = number % 8; number = number / 8;//辗转相除 if (number == 0) { break; } } printf("转换为八进制:"); for (; i >= 0; i--) { printf("%d", a[i]); } printf("\n"); }
4.函数void ten_sixteen();//十进制数转十六进制数:
void ten_sixteen() { int number, i; int a[20]; printf("\n请输入十进制数:"); scanf("%d", &number); for (i = 0; 1; i++) {//将十进制转化为十六进制并存入数组 a[i] = number % 16; number = number / 16;//辗转相除 if (number == 0) { break; } } printf("转化为十六进制数:"); for (; i >= 0; i--) { switch (a[i]) {//利用switch输出各种情况下的答案 case 10:printf("A"); break; case 11:printf("B"); break; case 12:printf("C"); break; case 13:printf("D"); break; case 14:printf("E"); break; case 15:printf("F"); break; default:printf("%d", a[i]); } } printf("\n"); }
5.函数void two_ten();//将二进制转化为十进制:
void two_ten() { long number; int x, y = 0, total = 0; printf("\n请输入一个二进制数:");//只包含0或1 scanf("%ld", &number); while (number) { x = number - (int)(number / 10) * 10; y += x * pow(2, total);; total++; number = (int)(number / 10); } printf("转换为十进制:"); printf("%d", y); printf("\n"); }
注:(1).输入的二进制数只包含0或1;
(2).调用pow函数计算,将二进制数转换为十进制数。
6..函数void eight_ten();//将八进制转化为十进制:
void eight_ten() { int number, i; int a[20]; printf("\n请输入一个八进制数:"); scanf("%o", &number); printf("转换为十进制:"); printf("%d", number); printf("\n"); }
注:用%o输入八进制数,%d输出十进制数。输入的八进制数范围为[0,7].
7.函数void sixteen_ten();//将十六进制转化为十进制:
void sixteen_ten() { int number, i; int a[20]; printf("\n请输入一个十六进制数:"); scanf("%X", &number); printf("转换为十进制:"); printf("%d", number); printf("\n"); }
注:用%x输入十六进制数,%d输出十进制数。输入的十六进制数范围为[0,9]||[A,F].
三.main函数:
void main() { int select; printf("进制转换器\n"); printf("请输入您的选择:\n"); do { printf("0 - 退出,1 - 十进制转二进制,2 - 十进制转八进制,3 - 十进制转十六进制,4 - 二进制转十进制,5 - 八进制转十进制,6 - 十六进制转十进制"); scanf("%d", &select); switch (select) { case 1: ten_two(); break; //十进制转二进制 case 2: ten_eight(); break; //十进制转八进制 case 3: ten_sixteen(); break; //十进制转十六进制 case 4: two_ten(); break; //二进制转十进制 case 5: eight_ten(); break; //八进制转十进制 case 6: sixteen_ten(); break; //十六进制转十进制 default: printf("您的输入有误,请重新输入!"); break; } if (select == 0) { break; } } while (1); }
四.关系图:
五.问题以及解决方法。
问题:
1.在使用switch多分支结构时,每个选项间的','打成了';'导致无法进行选择,程序无法运行;
2.八进制以及十六进制的输入问题;
3.main函数中do-while循环中while的条件;
4.int的大小上限;
解决方法:
1.将选项间的';'改为',‘确保程序能继续运行。
2.通过翻阅课本查询八进制数用%o输入,十六进制数用%x输入。
3.使用while(1)循环控制程序进行可保证程序不退出;
4.改用其他数据类型确保转换后的数的大小不受限。
六.代码互评:
互评对象:1913杨涛:
int Tennum(char a[],int b)//将输入的数字转换为10进制数 { int len, i, num; int sum = 0; len = strlen(a);//求字符长度 for (i = 0; i < len; i++) { if (a[i] >= '0' && a[i] <= '9') { num = a[i] - '0'; } else if (a[i] >= 'A' && a[i] <= 'F') { num = a[i] - 'A' + 10; } sum = sum * b + num; } return sum; }
将输入的进制数都转化为十进制数,再通过特定pow函数配合循环,减少了许多转化的函数,直接有效。
七.总结
1. 通过这次博客作业我学会了各个进制数之间的转化关系,各种进制数的输入输出形式;
2. 加深了对函数的理解以及在使用函数上更加得心应手;学会了函数配合数组进行使用;明白了在函数使用中分离的函数更容易优化和修复bug;
以及加上必要的文字说明,可以提升整体代码的可读性。