一.运行截图函数
1.启动界面
2.输入运行
3.输入无效
4.退出
3d
二.code
三.函数介绍blog
int translate(int number, int system);//在2转8进制或8转2进制时先转为十进制数 int _2to8(int number, int system);//将二进制转为八进制 int _2to10(int number, int system);//将二进制转为八进制 int _8to2(int number, int system);//将八进制转为二进制 int _8to10(int number, int system);//将八进制转为十进制 int _10to2(int number, int system);//将十进制转为二进制 int _10to8(int number, int system);//将十进制转为八进制 int pow(int num, int n);//调用指数函数 int judge(int number, int system);//判断输入数字与进制是否对应
函数translate字符串
int translate(int number, int system) { if (system == 2) { return _2to10( number, system);//将二进制数转为十进制 } if (system == 8) { return _8to10(number,system);//将八进制数转为十进制 } }
函数 _2to8(int number, int system)变量
int _2to8(int number, int system) { number = translate(number, system);//先转为十进制数 return _10to8(number, system);//将转换后的数转为八进制 }
函数 _2to10(int number, int system)循环
int _2to10(int number, int system) { int num[20] = {}; int sum = 0; int i = 0, count = 0; do { //将每一位数储存 num[i] = number % 10; number = number / 10; i++; count++; } while (number != 0); for (i = 0; i < count; i++) { sum = sum + num[i] * pow(2, i);//调用pow函数计算 } return sum; }
函数 _8to2(int number, int system)二进制
int _8to2(int number, int system) { number = translate(number, system);//先转为十进制数 return _10to2(number, system);将转换后的数转为二进制 }
函数 _8to10(int number, int system)方法
int _8to10(int number, int system) { int num[20] = {}; int sum = 0; int i = 0, count = 0; do { num[i] = number % 10; number = number / 10; i++; count++; } while (number != 0); for (i = 0; i < count; i++) { sum = sum + num[i] * pow(8, i); } return sum; }
函数 _10to2(int number, int system)im
int _10to2(int number, int system) { int a = 1, b = 0, r; while (1) { r = number % 2; number = number/2; b += r * a; a = a * 10; if (number < 2) { b = b+number * a; break; } } return b; }
函数_10to8(int number, int system)
int _10to8(int number, int system) { int a = 1, b = 0, r; while (1) { r = number % 2; number = number/2; b =b + r * a; a = a * 10; if (number < 2) { b = b+number * a; break; } } return b; }
四.main函数
int main() { int number, system; int i = 1;//记录输入次数 printf(" 进制转换器\n欢迎您的使用\n"); while (1) {//死循环进行连续输入 printf("%d.请输入数字及其对应进制(中间以空格间隔,输入进制为0时退出):", i); scanf("%d %d", &number, &system); if (system == 0) break;//输入0时退出 if (judge(number, system) == 0) {//判断是否输入数字与进制匹配 if (system == 2) { printf("八进制:%d\n", _2to8(number, system)); printf("十进制:%d\n", _2to10(number, system)); } else if (system == 8) { printf("二进制:%d\n", _8to2(number, system)); printf("十进制:%d\n", _8to10(number, system)); } else if (system == 10) { printf("二进制:%d\n", _10to2(number, system)); printf("八进制:%d\n", _10to8(number, system)); } else printf("输入进制错误,请从新输入!\n");//输入2,8,10,0之外的进制 } else printf("您的数字与进制不匹配,请从新输入!\n"); i++; printf("\n\n"); } printf("谢谢使用!\n"); }
五.
六.遇到的问题
1.在调用函数时将主函数变量名用于函数里
解决:经过翻看vs错误列表找到缘由
2.在八进制转二进制和二进制转八进制时想着八进制1位对二进制三位的规则,但发现有些繁琐
解决:在纸上举例计算,想起通常先转为十进制后再转换位目标进制
3.在二进制转十进制函数中将用于记录二进制数位数的count变量在循环中赋值
解决:在函数中用printf逐个变量逐个位置进行输出来寻找问题
七.代码互评
李永福
void sixteen(int n)//输入十六进制数 { char str[1000]; printf("请输入您的数字:"); scanf("%s", str); for (int i = 0; i < strlen(str); i++) if (islower(str[i]))str[i] = toupper(str[i]); if (!judge(n, str))printf("ERROR\n"); else { sixteen_to_two(str); sixteen_to_eight(str); sixteen_to_ten(str); } }
我以前字符串不熟想不出如何输入十六进制数,而永福用字符串输入十六进制让我对字符串有了更好理解。他还使用<ctype.h> 头文件,将小写改成大写是对不久前课上内容学以至用。
八.总结
1.收获:对函数里再调用函数有了更深体会;体会到函数的便捷性;锻炼了对函数的总体思考,函数间的关联。
2.理解:函数是一种能够简化主函数的好方法,使主函数思路能够更好理解。并且函数间互相调用能够大大简化代码。