函数+进制转换器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;
}
该代码是列举了所有进制转换的情况,写起来比较复杂。
而我的是使用两个函数直接进行进制转换,较为简便。(当然是问过度娘的,我承认。)
但是他的代码相对与我的更为规整。在代码的格式上以及对进制转换的深度理解我还要加强
总结来说就是还是不够熟练,还是要依靠度娘。一定还要持续练习。