1.程序运行截图。
2.函数介绍。
一。
int erzhuanshi(char m) { int s=0,i=0,a,n; while(n!=0) { a=m%10; s+=a*pow(2,i); m=m/10; i++; } return s; }
二。
int bazhuanshi(int n) { int s=0,i=0,a; while(n!=0) { a=n%10; s+=a*pow(8,i); i++; n=n/10; } return s; } void PrintN1( int m ) { int a[100],i=0,c,count=0,t; while(m!=0) { c=m%2; a[i]=c; m=m/2; i++; count++; } for(i=0;i<=count/2;i++) {t=a[i];a[i]=a[count-i-1];a[count-i-1]=t; } printf("经转化后的数字为:"); for(i=0;i<count;i++) printf("%d",a[i]); }
三。
void PrintN2(int m) { int a[100],i=0,c,count=0,t; while(m!=0) { c=m%8; a[i]=c; m=m/8; i++; count++; } for(i=0;i<=count/2;i++) { t=a[i];a[i]=a[count-i-1];a[count-1-i]=t; } printf("转化后的数字为:"); for(i=0;i<count;i++) printf("%d",a[i]); } int iserjinzhi(int m) { char a[100]; int i=0,k; while(a[i]=getchar()!='\n') i++; a[i]=0; for(k=0;k<i;k++) { if(a[k]>'1'||a[k]<'0') { return 0; break; } } return 1; }
四。
int isbajinzhi(int m) { char a[100]; int i=0,k; while(a[i]=getchar()!='\n') i++; a[i]=0; for(k=0;k<i;k++) { if(a[k]>'7'||a[k]<'0') { return 0; break; } } return 1; } int isshijinzhi(int m) { char a[100]; int i=0,k; while(a[i]=getchar()!='\n') i++; a[i]=0; for(k=0;k<i;k++) { if(a[k]>'9'||a[k]<'0') { return 0; break; } } return 1; }
3.main函数。
#include<stdio.h> #include<math.h> int erzhuanshi(char m); int bazhuanshi(int m); void PrintN1( int m ); void PrintN2( int m); int iserjinzhi(int m); int isbajinzhi(int m); int isshijinzhi(int m); 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;
}if(x==2) { scanf("%c",&y); if(iserjinzhi(y)) { y=erzhuanshi(y); printf("经转化后的数字为:%d",y); } else printf("ERROR"); } if(x==3) { scanf("%c",&y); if(isbajinzhi(y)) { y=erzhuanshi(y); printf("经转化后的数字为:"); PrintN1(y); } else printf("ERROR"); }
if(x==4) { scanf("%c",&y); if(isbajinzhi(y)) { y=bazhuanshi(y); printf("经转化后的数字为:%d",y); } else printf("ERROR"); } if(x==5) { scanf("%c",&y); if(isshijinzhi(y)) { printf("经转化后的数字为:"); PrintN1(y); } else printf("ERROR"); } if(x==6) { scanf("%c",&y); if(isshijinzhi(y)) { printf("经转化后的数字为:"); PrintN2(y); } else printf("ERROR"); } return 0; }
4.思维导图。
5.过程中遇到的问题。
一。怎么样判断二进制,八进制和十进制;解决:通过取余来判断每一位数是否小于进制数。如果是,就输出;如果出现一位以上不符合条件,就提示输入错误。
二。若何让使用者更舒服,适当添加一些提示语句。
6.代码评论。
void ten2any(int n,int key) { int i, len = 0; char a[10000]; while (n) { a[len] = num2char(n % key); n /= key; len++; } switch (key) { case 2:printf(" -->二进制是:"); break; case 8:printf(" -->八进制是:"); break; case 16:printf(" -->十六进制是:"); break; } for (i = len - 1; i >= 0; i--) { printf("%c", a[i]); } printf("\n"); }
这个同学的代码思路非常清晰,非常的简洁,很多都是我没想到的,有很多东西可以学习借鉴一下。
7.总结。
一。本次作业,严重加深了对函数的理解和对循环的应用。
二。学到了一些使用函数的技巧,也加大了对程序查错的认识,粗心马虎真的不行。
三。刚开始没有思路,后来在室友的帮助下,磕磕绊绊的才完成,不懂就要多问啊。
三。收获到了进制数之间的转换,以后做题目自己也可以用这个程序。