一.程序运行截图
二.扩展功能
十六进制只能转成二,八,十进制任意三个中的两个(不知道算不算是)
三.函数及对应功能
1 int Tenchange(char a[], int k);//将k进制转成十进制数 2 void numberchange(int m, int k);//将十进制数转成需要的进制数 3 int Tenchange(char a[], int k) 4 { 5 int len, i, num,sum = 0; 6 len = strlen(a);//字符串的长度 7 for (i = 0; i < len; i++){ 8 if (a[i] >= '0' && a[i] <= '9')//数组存放char类型的数据 9 { 10 num = a[i] - '0';//转成数字 11 } 12 else if (a[i] >= 'A' && a[i] <= 'F') 13 { 14 num = a[i]-'A'+10;//转成数字 15 } 16 sum = sum * k+ num; 17 } 18 19 return sum; 20 }
-
1 void numberchange(int m, int k) 2 { 3 int n; 4 if (m) 5 { 6 numberchange(m / k, k); 7 n = m % k; 8 if (n < 10) 9 printf("%d", n);//小于10的直接输出 10 else 11 printf("%c", n - 'A' + 10);//大于10的转换成字符输出 12 13 } 14
四.main函数
-
1 int main() 2 { 3 int k,p,b; 4 char a[100]; 5 printf("进制转换器 "); 6 printf("请输入待转换的进制: "); 7 do { 8 scanf("%d", &k); 9 } while (k< 2 || k>16); 10 printf("请输入待转换数: "); 11 getchar(); 12 gets_s(a);//将输入的任意进制存放在数组a中 13 int m = Tenchange(a, k); 14 printf("请输入需要转成几进制: "); 15 do { 16 scanf("%d", &b); 17 } while (b < 2 || b>16); 18 printf("%d进制数%s转换%d进制数的结果为: ", k, a, b); 19 numberchange(m, b); 20 printf(" "); 21 printf("请输入需要转成几进制: "); 22 do { 23 scanf("%d", &p); 24 } while (p < 2 || p>16); 25 printf("%d进制数%s转换%d进制数的结果为: ", k, a, p); 26 numberchange(m, p); 27 printf(" "); 28 return 0; 29 }
其中do{ 用了两次,不知道有没有更直接的方法
}while
五.思维导图
六.遇到的问题
1.刚开始写的时候用到的函数过于混乱且多,不知道怎么表示,通过问人和查资料发现运用字符串和数组可以简化进制之间的转换的情况
2.先将任意进制数转化为十进制数,再将十进制数与其他如二,八进制发生转换
3.主函数的判断条件写错多次
七.代码互评
网络1914林洁颖
她自定义了个判断输入的数是否非法的函数,非常明了
将非十六进制数转为十进制数,再用十进制数转为其他进制,考虑非常周到
八.总结
1.收获:熟悉字符串和数组的用法,使用数组使进制之间转换要用到的取余运算更方便
2.对于函数这一概念的理解:函数的定义,嵌套,互相调用,我还需多多运用和练习有关设计运用函数的案例,
函数可以多次使用,独立地完成相关功能,提高效率,使程序更明了