第二次博客园作业:函数+进制转换器v1.0beta
一.程序运运行截图。
二.函数介绍。
1.
1 void twotoeightandten(int x) { 2 int c,y,s10=0,s8=0,i,l; 3 y=x; 4 i=0; 5 l=0; 6 //二进制转为十进制 7 while(y!=0){ 8 c=y%10; 9 //判断输入是否为二进制 10 if(c>=2) 11 l++; 12 y/=10; 13 s10=s10+c*pow(2,i); 14 i++; 15 } 16 y=s10; 17 i=0; 18 //十进制转为八进制 19 while(y!=0){ 20 c=y%8; 21 y/=8; 22 s8=s8+c*pow(10,i); 23 i++; 24 } 25 if(l==0){ 26 printf("二进制转为\n"); 27 printf("八进制:%d\n十进制:%d\n",s8,s10); 28 } 29 else 30 //若输入数不为二进制 31 printf("这个输入是错的鸭"); 32 }
将二进制转化为十进制,再将十进制转化为二进制达到效果。
2.
void eighttotwoandten(int x) { //将八进制转化为二进制和十进制 int c,y,s10=0,s2=0,i,l; y=x; i=0; l=0; //将八进制转化为十进制 while(y!=0){ c=y%10; if(c>=8) l++; y/=10; s10=s10+c*pow(8,i); i++; } y=s10; i=0; //将十进制转化为二进制 while(y!=0){ c=y%2; y/=2; s2=s2+c*pow(10,i); i++; } if(l==0){ printf("八进制转为\n"); printf("二进制:%d\n十进制:%d\n",s2,s10); } else //若输入数不为八进制 printf("这个是错的鸭"); }
将八进制转化为十进制,再将十进制转化为二进制达到效果。
3.
void tentotwoandeight(int x) { //将十进制转化为二进制和八进制 int c,y,s2=0,s8=0,i; y=x; i=0; //将十进制转化为二进制 while(y!=0){ c=y%2; y/=2; s2=s2+c*pow(10,i); i++; } y=x; i=0; //将十进制转化为八进制 while(y!=0){ c=y%8; y/=8; s8=s8+c*pow(10,i); i++; } printf("十进制转为\n"); printf("二进制:%d\n八进制:%d\n",s2,s8); }
将十进制转化为二进制和八进制,此代码不需要判断是否为十进制
三.main函数
#include<stdio.h> #include<math.h> void twotoeightandten(int x) ;//二进制转化为八进制和十进制函数 void eighttotwoandten(int x) ;//八进制转化为二进制和十进制函数 void tentotwoandeight(int x) ;//十进制转化为二进制和八进制函数 int main() { int jzs, x; printf("输入'2'为二进制;输入'8'为八进制;输入'10'为十进制\n输入进制数;"); //输入进制数 scanf("%d", &jzs); printf("输入一个数:"); //输入被转化的数 scanf("%d", &x); //判断进制数 if (jzs == 2) { twotoeightandten(x); } else if (jzs == 8) { eighttotwoandten(x); } else if (jzs == 10) { tentotwoandeight(x); } return 0; }
四.思维导图
五.碰到的问题:
如何判断二进制,八进制,十进制;
解决方案:
通过取余判断每一位数是否小于进制数。是,则输出;出现一位以上不符合条件,则提示输入错误。
进制如何转换
解决方案:
思路:先将二进制或八进制转化为十进制,再将十进制转化为二进制和八进制。
六.代码互评。
void change(int n,char a[],int m,int count)//将用户输入的数先转化成十进制数,在转化成想要转化成的进制数 { int i,j,k=0,num,sum=0,c; char b[1001]; for(i=0;a[i]!='\0';i++) { if(a[i]>='0'&&a[i]<='9')num=a[i]-'0'; else num=a[i]-'a'+10; sum=sum*n+num; } while(sum) { c=sum%m; b[k++]="0123456789abcdef"[c]; sum=sum/m; } i=0; for(i=k-1;i>=0;i--) { if(b[i]>='0'&&b[i]<='9')printf("%d",b[i]-'0'); else printf("%c",b[i]); } printf("\n");
将十进制转化为十六进制非常巧妙,利用取余,判断取余数并将相应的十六进制数字及字母存入存入数组中,最后利用数组表示出十六进制,非常巧妙。
七.总结
1.对于进制转换及其含义有了更深刻的了解,各进制转为十进制都有规律,可以举一反三,而十进制转为其他进制也有规律且较为容易。
2.学到了很多,代码的简洁,清晰易懂,以及运行过程更能被理解,让使用者了然也是非常重要的。