一.运行截图

注释:二进制转化为八进制,十进制,十六进制

注释:八进制转化为二进制,十进制,十六进制

注释:十进制转换为二进制,八进制,十六进制

注释:十六进制转换为二进制,八进制,十进制

注释:错误示范
二.函数介绍
1.
int step_1(char m[],int n){ int a,b=0,c,i; c=n+48; a=strlen(m); for(i=0;i<a;i++){ if(n<=10){ if(m[i]<0||m[i]>=c){ b=1; break; } }else{ if(m[i]<'0'||m[i]>'9'&&m[i]<'A'||m[i]>'F'){ b=1; break; } } } return b;}
2.
void step_2(int m,int n){
int a,b;
if(n==2){
printf("八进制:");
unchange10(m,8);
printf("十进制:");
printf("%d\n",m);
printf("十六进制:");
unchange10(m,16);
}else if(n==8){
printf("二进制:");
unchange10(m,2);
printf("十进制:");
printf("%d\n",m);
printf("十六进制:");
unchange10(m,16);
}else if(n==10){
printf("二进制:");
unchange10(m,2);
printf("八进制:");
unchange10(m,8);
printf("十六进制:");
unchange10(m,16);
}else if(n==16){
printf("二进制:");
unchange10(m,2);
printf("八进制:");
unchange10(m,8);
printf("十进制:");
printf("%d\n",m);
}
}
3.
int change10(char m[],int n){
int a,i,b=0;
a=strlen(m);
if(n!=16){
for(i=a-1;i>=0;i--){
b += (m[i]-'0')*pow(n,i);
}
}else if(n==16){
for(i=a-1;i>=0;i--){
if(m[i]<10){
b += m[i]*pow(n,i);
}else{
m[i]=m[i]-'A'+10;
b += m[i]*pow(n,i);
}
}
}
return b;
}
void unchange10(int m,int n){
int b=100;
int a[b],sum=0,i;
for(i=0;m>0;m/=n){
a[i]=m%n;
i++;
}
i--;
for(;i>=0;i--){
if(a[i]<10){
printf("%d",a[i]);
}else{
printf("%c",a[i]+55);
}
}
printf("\n");
}
三.main函数
#include<stdio.h>
#include<math.h>
#include<string.h>
int step_1(char m[],int n);
void step_2(int m,int n);
int change10(char m[],int n);
void unchange10(int m,int n);
int main(){
int n=100;
char a[n];
int b,c,d;
printf("请输入所转换数的进制数:\n");
printf("二进制 八进制 十进制 十六进制\n");
scanf("%d",&b);
printf("请输入所要转换的数:\n");
scanf("%s",&a);
if(step_1(a,b)==1){
printf("输入了错误的数\n");
}else{
printf("数经过转换后为:\n");
c=change10(a,b);
step_2(c,b);
}
return 0;
}
(自己很菜,在别人的帮助下完成的)
四.思维导图

五.问题和解决
1.问题:对于进制的理解还很吃力 解决方法:借助网络和书本尽快掌握
2.问题:代码的编写总会出现一些缺缺漏漏 解决方法:仔细
3.问题:进度落后,自己编写代码比较吃力 解决方法:疯狂肝就对了
六.代码互评
网络1914安省龙
int main()
{
int first, sum;
printf("请选择当前要被转换的进制\n");
printf("二进制【1】\n");
printf("八进制【2】\n");
printf("十进制【3】\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;
}
}
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;
}
int number_8()//输入一个八进制函数
{
int result;
printf("请输入八进制数:");
scanf_s("%d", &result);
return result;
}
int number_10()//输入一个十进制函数
{
int result;
printf("请输入十进制数:");
scanf_s("%d", &result);
return result;
}
int choose()//选择要二进制被转换的进制
{
int result;
printf("请选择当前要转换的进制\n");
printf("二进制【1】\n");
printf("八进制【2】\n");
printf("十进制【3】\n");
printf("你的选择: ");
scanf_s("%d", &result);
return result;
}
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;
}
}
评论:
1.该同学代码解释比我的清楚,并且能够单独的转换代码,而我的是一次性把一个代码转为三个
2.他的代码感觉能让别人更容易看懂
七.自我总结
1.写代码对全局能力要求还是高,需要思维足够清晰,前后思路一致
2.自己的能力还是比较欠缺,然后进度有点跟不上进度,需要在好好学习