一.运行截图
一.二进制
二.八进制
三.十进制
四.十六进制
五.运行失败
二.函数介绍
一.
void Change2(long long int a,char b[],int n)//十进制转其他进制 ,n表示哪个进制转换成十进制 { int i=0; int c; while(a>0){ c=a%n; if(c>=10) b[i]=(c-10)+'a'; else b[i]=c+'0'; a=a/n; ++i; } b[i]='\0'; }
二.
long long int Change(char a[],int n)//十进制转其他进制 ,n表示哪个进制转换成十进制 { long long int sum=0; for(int i=0;i) { if(a[i]>='a') sum=sum*n+(a[i]-'a'+10); else sum=sum*n+(a[i]-'0'); } return sum; }
三.
void Main()//主菜单 { printf("请选择你要输入的进制数:\n"); printf("1.二进制\n"); printf("2.八进制\n"); printf("3.十进制\n"); printf("4.十六进制\n"); printf("请输入:"); }
四.
int Check(char a[],int n)//检查数据是否错误 { int flag=0; for(int i=0;i) { if(n==16) { if((a[i]<='9'&&a[i]>='0')||(a[i])>='a'&&a[i]<='f') flag=1; else return 0; } if(n==2) { if(a[i]<='1'&&a[i]>='0') flag=1; else return 0; } if(n==8) { if(a[i]<='7'&&a[i]>='0') flag=1; else return 0; } } return 1; }
三.main函数
int main() { int n; long long int a; char b[100]; char c[100]; Main(); scanf("%d",&n); switch(n) { case 1: printf("请输入数值:"); scanf("%s",b); if(!Check(b,2)) //判断数据是否符合要求 { printf("数据错误"); break; } a=Change(b,2); printf("十进制:%lld\n",a); Change2(a,c,8); printf("八进制:"); Print(c); Change2(a,c,16); printf("十六进制:"); Print(c); break; case 2: printf("请输入数值:"); scanf("%s",b); if(!Check(b,8)) //判断数据是否符合要求 { printf("数据错误"); break; } a=Change(b,8); printf("十进制:%lld\n",a); Change2(a,c,2); printf("二进制:"); Print(c); Change2(a,c,16); printf("十六进制:"); Print(c); break; case 3: printf("请输入数值:"); scanf("%lld",&a); Change2(a,c,2); printf("二进制:"); Print(c); printf("八进制:"); Change2(a,c,8); Print(c); Change2(a,c,16); printf("十六进制:"); Print(c); break; case 4: printf("请输入数值:"); scanf("%s",b); if(!Check(b,16)) //判断数据是否符合要求 { printf("数据错误"); break; } a=Change(b,16); printf("十进制:%lld\n",a); Change2(a,c,2); printf("二进制:"); Print(c); Change2(a,c,8); printf("八进制:"); Print(c); break; } return 0; }
四.思维导图
五.遇到的问题
1.制作主菜单函数,一开始没有思路,不知道void函数的意思
后向学长请教,制作出了主菜单。
2.本来想写各种进制互转,写没多久觉得各种进制互转的话太复杂也写的很乱。
后面百度了一下,改变了自己的思路,写成二八十六进制转换为十进制,再十进制转化为各种进制。
3.对数组的运用很不熟练,一开始基本上写不出来。后面自己看书上例题,向学长请教,才慢慢可以自己写出来。
六.代码互评
刘炜
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; }
代码的思路与我的差不多,我把判断错误给写成一个函数,他是直接在主函数里面进行判断,我比他多做了一个主菜单。
但他的代码看起来比我的更容易理解,能让使用者使用更方便。
六.总结
收获
1.进制转化一开始没有思路,靠看书上的例题才慢慢有思路。
2.对数组的运用变得有点熟练。
对函数的理解:
有些函数是可以不用返回值的,