一. 程序运行截图:
(1)二进制转十进制,八进制,十六进制:
(2)八进制转二进制,十进制,十六进制:
(3)十六进制转十进制,二进制,八进制:
(4)十进制转二进制、八进制、十六进制:
二. 函数介绍:
(1)二进制转十进制,八进制,十六进制:
//2进制转10进制 void two_ten(int a) { int i, s = 0; int result = 0; for (i = 1; a != 0; i *= 2) { if (a % 10 > 1) { s = 1;break; } else { result += (a % 10) * i; a /= 10; } } if (s == 1) printf("Error!\n"); else printf("\n二进制转换十进制为:%d\n", result); } //2进制转8进制 void two_eight(int a) { int i, j, k, s = 0; int p[30]; int result = 0; for (i = 1; a != 0; i *= 2) { if (a % 10 > 1) { s = 1;break; } else { result += (a % 10) * i; a /= 10; } } for (j = 0; result != 0; j++) { p[j] = result % 8; result /= 8; } if (s == 1) printf("Error!\n"); else { printf("\n二进制转换八进制为:"); for (k = j - 1; k >= 0; k--) printf("%d", p[k]); printf("\n"); } } //2进制转16进制 void two_sixteen(int a) { int i, j, k, s = 0; char p[30]; int result = 0; for (i = 1; a != 0; i *= 2) { if (a % 10 > 1) { s = 1;break; } else { result += (a % 10) * i; a /= 10; } } for (j = 0; result != 0; j++) { p[j] = result % 16; result /= 16; if (p[j] >= 10) { switch (p[j]) { case 10: p[j] = 'A';break; case 11: p[j] = 'B';break; case 12: p[j] = 'C';break; case 13: p[j] = 'D';break; case 14: p[j] = 'E';break; case 15: p[j] = 'F';break; } } else p[j] += 48; } if (s == 1) printf("Error!\n"); else { printf("\n二进制转换十六进制为:"); for (k = j - 1; k >= 0; k--) printf("%c", p[k]); printf("\n"); } }
(2)八进制转二进制,十进制,十六进制:
void eight_two(int a) { int i, j, k, s = 0; int result = 0; int p[30]; for (i = 1; a != 0; i *= 8) { if (a % 10 > 7) { s = 1; break; } else { result += (a % 10) * i; a /= 10; } } for (j = 0; result != 0; j++) { p[j] = result % 2; result /= 2; } if (s == 1) printf("Error!\n"); else { printf("\n八进制转换二进制为:"); for (k = j - 1; k >= 0; k--) printf("%d", p[k]); printf("\n"); } } //8进制转10进制 void eight_ten(int a) { int i, s = 0; int result = 0; for (i = 1; a != 0; i *= 8) { if (a % 10 > 7) { s = 1; break; } else { result += (a % 10) * i; a /= 10; } } if (s == 1) printf("Error!\n"); else { printf("\n八进制转换十进制为:%d\n", result); } } //8进制转16进制 void eight_sixteen(int a) { int i, j, k, s = 0; char p[30]; int result = 0; for (i = 1; a != 0; i *= 8) { if (a % 10 > 7) { s = 1; break; } else { result += (a % 10) * i; a /= 10; } } for (j = 0; result != 0; j++) { p[j] = result % 16; result = result / 16; if (p[j] < 10) p[j] += 48; else { switch (p[j]) { case 10: p[j] = 'A'; break; case 11: p[j] = 'B'; break; case 12: p[j] = 'C'; break; case 13: p[j] = 'D'; break; case 14: p[j] = 'E'; break; case 15: p[j] = 'F'; break; } } } if (s == 1) printf("Error!\n"); else { printf("\n八进制转换十六进制为:"); for (k = j - 1; k >= 0; k--) printf("%c", p[k]); printf("\n"); } }
(4)十进制转二进制、八进制、十六进制:
void ten_two(int a)//十进制转换为二进制 { int j, k; int p[30]; for (j = 0; a != 0; j++) { p[j] = a % 2; a /= 2; } printf("\n十进制转换二进制为:"); for (k = j - 1; k >= 0; k--) printf("%d", p[k]); printf("\n"); } void ten_eight(int a)//十进制转换为八进制: { int j, k; int p[30]; for (j = 0; a != 0; j++) { p[j] = a % 8; a /= 8; } printf("\n十进制转换八进制为:"); for (k = j - 1; k >= 0; k--) printf("%d", p[k]); printf("\n"); } void ten_sixteen(int a)//十进制转换为十六进制: { int j, k; int p[30]; for (j = 0; a != 0; j++) { p[j] = a % 16; a /= 16; if (p[j] < 10) p[j] += 48; else { switch (p[j]) { case 10: p[j] = 'A'; break; case 11: p[j] = 'B'; break; case 12: p[j] = 'C'; break; case 13: p[j] = 'D'; break; case 14: p[j] = 'E'; break; case 15: p[j] = 'F'; break; } } } printf("\n十进制转换十六进制为:"); for (k = j - 1; k >= 0; k--) printf("%c", p[k]); printf("\n"); }
(5)main() 函数:
int main() { int n = 0; int l = 1,a; while (l) { printf("请选择:"); scanf_s("%d", &n); printf("请输入你的数:\n"); scanf_s("%d", &a); switch (n) { case 1:two_ten(a);break; two_eight; case 2:two_eight(a);break; case 3:two_sixteen(a);break; case 4:eight_two(a);break; case 5:eight_ten(a);break; case 6:eight_sixteen(a);break; case 7:sixteen_ten(); break; case 8:sixteen_two(); break; case 9:sixteen_eight(); break; case 10:ten_two(a); break; case 11:ten_eight(a); break; case 12:ten_sixteen(a); break; default: printf("Error!!!\n");break; } } return 0; }
三. 思维导图:
三.问题与解决方法:
我太难了我,经历了九九八十一难:
(1)问题:main 函数刚开始不知该怎么写去放自己的函数。
解决方法:看了一些其他已提交同学的放置方法,根据他们的来重新整理自己的逻辑解决的!
(2) 问题:不知到怎么用数组写代码。
解决方法:看视频和例题,重新认识数组余循环。
(3) 问题:不会敲十六进制的转换代码。
解决方法:找度娘,现在也不是很理解。
四. 总结:
(1)敲代码真的不容易,所以每次敲完的代码及的保存。
(2)敲代码是记得集中注意力,最好是一气呵成,防止思路断掉。
(2)敲代码是要注意每一个标点符号与数字,一步错,步步错。
六.代码互评:
int One(int choice, int number) { int sum = 0, count = 0; int value, j; int b; value = number; do { value /= 10; count++; } while (value > 0); value = number; for (j = 0;j < count; j++) { b = value % 10; sum = sum + b * pow(choice, j); value /= 10; } return sum; }
这是雷雯雯同学的代码,真的非常简洁明了,避免了又长又臭的代码,满眼的羡慕,羡慕。
而且写的代码也是独辟蹊径,很有自己的想法,崇拜,崇拜!很有技巧性的写法!
看来我要加加油了!!!