函数+进制转换器v1.0beta
1,运行截图:
(1)输入错误进制数:
(2)输入错误转换进制数:
(3)十进制转二进制演示:
(4)十六进制转十进制演示:(加入了十六进制的计算)
2,代码演示:
(1)将输入数转化为10进制:
int Numberchange10(char a[], int N) { int l, i, num,sum=0; l = strlen(a);//验证字符串长度 for (i = 0; i < l; 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 * N + num; } return sum;//返回10进制值 }
(2)将10进制数转换为所求进制数:
void Numberchange(int m, int N) { int n; if (m) { Numberchange(m / N, N);//函数循环 n = m % N; if (n < 10) printf("%d", n);//小于10直接输出 else printf("%c", n + 55);//大于10转换成字符输出 } }
(3)main函数:
int main() { int N, b; char a[20]; //定义数组(用来以字符串的形式存放转化数 ) printf("请输入待转换数字的进制:"); scanf("%d", &N); if(N!=2&&N!=8&&N!=10&&N!=16)//判断 { printf("错误!该进制无法转换。"); return 0; } printf("请输入待转换数字:"); getchar();//将转化数存入数组 gets(a); //将输入的n进制数存放在数组a中 int m = Numberchange10(a, N); //将输入数转换为10进制 printf("请输入需转化的进制数:"); scanf("%d", &b); if(b!=2&&b!=8&&b!=10&&b!=16)//判断 { printf("错误!该进制无法转换。"); return 0; } printf("转换的结果为:"); Numberchange(m, b);//执行函数输出10进制转换结果 printf("\n"); system("pause");//暂停等待用户信号 return 0; }
3,思维导图:
4,遇到的问题:
(1):不清楚如何编写一个函数一次性将任意进制数转化为10进制。
解决办法:百度,翻书,发现可以利用数组,将任意数的单个项分配到数组中,然后判断类型进行10进制化。
(2):不明白void与int的区别。
解决办法:百度,翻书。void类型的函数不会返回值,而int类型的函数会返回值。
(3):不知道如何将10进制数在转换成任意进制。(对进制转换还是了解甚少)
解决办法:请教度娘,运用函数内循环直接计算。(对函数内调用函数也不太了解,日后会加强理解)
5,代码互评
int main() { int system1,system2,x; printf("输入待转换值为何进制数\n"); printf("二进制输入2;八进制输入8;十进制输入10\n"); printf("输入进制数:"); scanf("%d",&system1); if(system1!=2&&system1!=8&&system1!=10){ printf("ERROR!"); return 0; } printf("输入转换后的数为何进制数\n"); printf("二进制输入2;八进制输入8;十进制输入10\n"); printf("输入进制数:"); scanf("%d",&system2); if(system2!=2&&system2!=8&&system2!=10){ printf("ERROR!"); return 0; } printf("输入待转换数:"); scanf("%d",&x); if(system1==2&&system2==8){ twoTOeight(x); } if(system1==2&&system2==10){ twoTOten(x); } if(system1==8&&system2==2){ eightTOtwo(x); } if(system1==8&&system2==10){ eightTOten(x); } if(system1==10&&system2==2){ tenTOtwo(x); } if(system1==10&&system2==8){ tenTOeight(x); } if(system1==system2){ printf("你想这么玩吗,那答案就是%d",x); } return 0; }
该代码是列举了所有进制转换的情况,写起来比较复杂。
而我的是使用两个函数直接进行进制转换,较为简便。(当然是问过度娘的,我承认。)
但是他的代码相对与我的更为规整。在代码的格式上以及对进制转换的深度理解我还要加强
总结来说就是还是不够熟练,还是要依靠度娘。一定还要持续练习。