第二次博客作业
一、程序运行截图
2------>8
2----->10
2------->16
8-------->2
8------>10
8--->16
10---->2
10------>8
10------->16
输入无效,重新输入
二、拓展功能
1.可以实现十六进制的转换。(其他的转十六进制可以转,但十六进制转成其他的还没写好)
2.输入无效时可以重新输入。
三、函数介绍
1.
int number_2()//输入一个二进制函数 { int result; part1:printf("请输入二进制数:"); scanf_s("%d", &result); for (int i = result;i > 0;i=i / 10) { if (i % 10 > 1) { printf("这是无效的二进制,请重新输入\n"); goto part1; } } return result; }
输入一个二进制数,返回一个二进制数。
2.
int choose()//选择要二进制转换的进制 { int result; printf("请选择当前要转换的进制\n"); printf("二进制【1】\n"); printf("八进制【2】\n"); printf("十进制【3】\n"); printf("十六进制【4】\n"); printf("你的选择: "); scanf_s("%d", &result); return result; }
3.
int two_to_others(int number_2, int choose)//二进制!!!!!! { int sum = 0, t = 0; if (choose == 1) //二进制:输入1(二进制),则仍然是二进制输出; { if (number_2 == 0) printf("%04d", number_2); return number_2; } if (choose == 2)//二进制:输入2(八进制),则取三合一,每三位按权相加,如:110=0*1+1*2+1*4=6,按权相加的方式可以将那三位转为十进制, { //可以理解为那三位二进制转为十进制 if (number_2 == 0) printf("%d", number_2); while (number_2 > 0) { sum = sum + two_to_others((number_2 % 1000), 3) * pow(10, t); number_2 = number_2 / 1000; t++; } return sum; } if (choose == 3)//二进制转十进制,按权相加。 { if (number_2 == 0) printf("%d", number_2); while (number_2 > 0) { sum += (number_2 % 10) * pow(2, t); number_2 /= 10; t++; } return sum; } if (choose == 4)//二进制转十六进制,取四合一法:每四位转成十进制数,再转成十六进制数 { char str[80]; int i = 0; while (number_2 > 0) { char a = two_to_others((number_2 % 10000), 3); if (a >= 10 && a <= 15) a = a+55; if (a >= 0 && a <= 9) a = a + 48; str[i] = a; number_2 = number_2 / 10000; i++; } str[i] = '\0'; for (int j = i - 1;j >= 0;j--) printf("%c", str[j]); return 0; } }
第一个形参是输入的二进制数,第二个形参是选择转换的进制数。
每一种转换都有相应的方法。
4.
int main() { int first,sum; printf("欢迎使用进制转换器\n"); printf("请选择当前要被转换的进制\n"); printf("二进制【1】\n"); printf("八进制【2】\n"); printf("十进制【3】\n"); printf("十六进制【4】\n"); printf("你的选择:"); scanf_s("%d", &first); switch (first) { case 1: { sum = two_to_others(number_2(), choose()); if (sum != 0) printf("%d", sum); } break; case 2: { sum=eight_to_others(number_8(), choose()); if (sum != 0) printf("%d", sum); } break; case 3: { sum = ten_to_others(number_10(), choose()); if(sum!=0) printf("%d", sum); } break; case 4:printf("对不起,还没有开通这项服务");break; }
该函数是让用户选择要被转的进制数(first),然后使用switch函数,按first的值选择case.
四、思维导图
五、遇到的问题
1、例如:switch中,我遇到了一个代号C2360的error,说明变量尽量不要在switch内定义,尽量在switch外部定义变量
2.在八进制转二进制时,取三位,不足三位则补零。于是采用%03d来写,但是第一项不需要补0;
解决:第一项单独输出,其余按%03d输出。
3.定义 char a=一个十进制数,此时a的值可以是asc2码的值,也可以是字符,如果要转换成十六进制数,则0~9,需a=a+48,使a=字符'a'(数字字符),10~15也类似。
六、
收获:1.觉得自己之前只顾着刷pta没有实战经验。现在实战,代码多,前后联系大,不免觉得有点吃力,因此以后觉得可以多实践多逛博客园看看其他人的经验
2. 觉得自己会的太少了
对函数的理解:1.函数可以是有返回的(有数组,int,double 等类型),负责输入n个数进去,然后返回你想要的结果
2.无返回值可以用于打印输出等