一.运行截图
注释:二进制转化为八进制,十进制,十六进制
注释:八进制转化为二进制,十进制,十六进制
注释:十进制转换为二进制,八进制,十六进制
注释:十六进制转换为二进制,八进制,十进制
注释:错误示范
二.函数介绍
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.自己的能力还是比较欠缺,然后进度有点跟不上进度,需要在好好学习
原文:https://www.cnblogs.com/zengdaxia/p/11829500.html