A. プログラムの実行、実行ショット
-
II。機能紹介
1.main
ローカル変数を使用して、元のバイナリのデジタル入力は、primitivesystem 2は、ローカル変数の使用、番号を入力番号のローカル変数使用して入力を取得したい進3. システム 4.バイナリ変換、関数呼び出しのbinaryconversionや変更を、5が得られます客観数
#include "stdio.h" int decimalconversion(int number,int primitivesystem,int system);//转十进制函数 int binaryconversion(int number);//转二进制函数 void change(int number,int primitivesystem,int system);//进制相互转换函数 int judge(int number,int primitivesystem);//除十六进制外,判断非法函数 void input(int number,int primitivesystem);//输入函数 int main(void) { printf("请输入将输入数为什么进制数\n"); int primitivesystem; scanf("%d",&primitivesystem); int number=0; int flag=1; printf("请输入该数字\n"); char hexad[100]; if(primitivesystem!=16){ scanf("%d",&number); } else{ scanf("%s",&hexad); for(int i=0;hexad[i]!='\0';i++){ if(hexad[i]>='0'&&hexad[i]<='9'){ number=number*16+hexad[i]-'0'; } else if(hexad[i]>='A'&&hexad[i]<='F'){ number=number*16+hexad[i]-'A'+10; } else if(hexad[i]>='a'&&hexad[i]<='f'){ number=number*16+hexad[i]-'a'+10; }// 将十六进制字符串转为十进制 else{ printf("该数字非法,请重新输入"); flag=0; break; }//判断十六进制输入是否非法 } if(flag==1){ primitivesystem=10; input(number,primitivesystem); } } int remainder=0,copy=number; if(primitivesystem==2){ judge(copy,primitivesystem);//调用判断非法函数 if(judge(copy,primitivesystem)){ input(number,primitivesystem);//调用输入函数 } } else if(primitivesystem==8){ judge(copy,primitivesystem);//调用判断非法函数 if(judge(copy,primitivesystem)){ input(number,primitivesystem);//调用输入函数 } } return 0; }
2.binaryconversion(バイナリに変換)
2例に分割2進数に再帰着信番号は、数/ 2 == 0戻り値は再帰の結果を用いて算出することができます
int binaryconversion(int number){ if(number/2==0){ return number%2; } else{ return number%2+binaryconversion(number/2)*10; } }
3.change(各六角変換)
主に10進数、16進数の変換及び他のアイデアに他のバイナリ、着信番号、primitivesystemの値システムの進変換により、バイナリ変換を行います
void change(int number,int primitivesystem,int system)//进制相互转换函数{ int sum=0; int product=1; if(primitivesystem==10)//数原进制为十进制{ if(system==2){ binaryconversion(number); printf("%d\n",binaryconversion(number)); } else if(system==8){ printf("%o\n",number); } else if(system==16){ printf("%x\n",number); } else{ printf("%d\n",number);//因为若为十六进制数输入,已将转为十进制数 ,再进行函数转换 } } else if(primitivesystem==8)//数原进制为八进制{ if(system==2){ sum=decimalconversion(number,primitivesystem,system); binaryconversion(sum); printf("%d\n",binaryconversion(sum)); } else if(system==10){ sum=decimalconversion(number,primitivesystem,system); printf("%d\n",sum); } else if(system==16){ sum=decimalconversion(number,primitivesystem,system); printf("%x\n",sum); } } else if(primitivesystem==2)//数原进制为二进制{ if(system==8){ sum=decimalconversion(number,primitivesystem,system); printf("%o\n",sum); } else if(system==10){ sum=decimalconversion(number,primitivesystem,system); printf("%d\n",sum); } else if(system==16){ sum=decimalconversion(number,primitivesystem,system); printf("%x\n",sum); } } }
4.裁判官(決定の無効なエントリ)
また不法に、離れた着信番号とprimitivesystemを価値判断のヘクスに進入します
int judge(int copy,int primitivesystem)//判断非法函数{ int remainder=0; int flag=1; do{ remainder=copy%10; copy=copy/10; if(remainder>primitivesystem-1){ printf("该数字非法,请重新输入\n"); flag=0; break; } }while(copy); return flag; }
5.input(入力機能)
オブジェクトシステムの入力および出力の数
void input(int number,int primitivesystem)//输入函数{ printf("请输入你想得到该数的什么进制数\n"); int system; scanf("%d",&system); printf("你将得到你想要的结果\n"); change(number,primitivesystem,system); printf("感谢使用\n"); }
6.decimalconversion(10進数に変換)
進数、パス数、値primitivesystemのシステムに非進
int decimalconversion(int number,int primitivesystem,int system)//转为十进制{ int sum=0; int product=1; do{ sum=sum+(number%10)*product; number=number/10; product=product*primitivesystem; }while(number); return sum; }
III。マインドマッピング機能
完全なコード
#include "stdio.h" int decimalconversion(int number,int primitivesystem,int system);//转十进制函数 int binaryconversion(int number);//转二进制函数 void change(int number,int primitivesystem,int system);//进制相互转换函数 int judge(int number,int primitivesystem);//除十六进制外,判断非法函数 void input(int number,int primitivesystem);//输入函数 int main(void) { printf("请输入将输入数为什么进制数\n"); int primitivesystem; scanf("%d",&primitivesystem); int number=0; int flag=1; printf("请输入该数字\n"); char hexad[100]; if(primitivesystem!=16){ scanf("%d",&number); } else{ scanf("%s",&hexad); for(int i=0;hexad[i]!='\0';i++){ if(hexad[i]>='0'&&hexad[i]<='9'){ number=number*16+hexad[i]-'0'; } else if(hexad[i]>='A'&&hexad[i]<='F'){ number=number*16+hexad[i]-'A'+10; } else if(hexad[i]>='a'&&hexad[i]<='f'){ number=number*16+hexad[i]-'a'+10; }// 将十六进制字符串转为十进制 else{ printf("该数字非法,请重新输入"); flag=0; break; }//判断十六进制输入是否非法 } if(flag==1){ primitivesystem=10; input(number,primitivesystem); } } int remainder=0,copy=number; if(primitivesystem==2){ judge(copy,primitivesystem);//调用判断非法函数 if(judge(copy,primitivesystem)){ input(number,primitivesystem);//调用输入函数 } } else if(primitivesystem==8){ judge(copy,primitivesystem);//调用判断非法函数 if(judge(copy,primitivesystem)){ input(number,primitivesystem);//调用输入函数 } } return 0; } void change(int number,int primitivesystem,int system)//进制相互转换函数{ int sum=0; int product=1; if(primitivesystem==10)//数原进制为十进制{ if(system==2){ binaryconversion(number); printf("%d\n",binaryconversion(number)); } else if(system==8){ printf("%o\n",number); } else if(system==16){ printf("%x\n",number); } else{ printf("%d\n",number);//因为若为十六进制数输入,已将转为十进制数 ,再进行函数转换 } } else if(primitivesystem==8)//数原进制为八进制{ if(system==2){ sum=decimalconversion(number,primitivesystem,system); binaryconversion(sum); printf("%d\n",binaryconversion(sum)); } else if(system==10){ sum=decimalconversion(number,primitivesystem,system); printf("%d\n",sum); } else if(system==16){ sum=decimalconversion(number,primitivesystem,system); printf("%x\n",sum); } } else if(primitivesystem==2)//数原进制为二进制{ if(system==8){ sum=decimalconversion(number,primitivesystem,system); printf("%o\n",sum); } else if(system==10){ sum=decimalconversion(number,primitivesystem,system); printf("%d\n",sum); } else if(system==16){ sum=decimalconversion(number,primitivesystem,system); printf("%x\n",sum); } } } int binaryconversion(int number)//二进制转换函数{ if(number/2==0){ return number%2; } else{ return number%2+binaryconversion(number/2)*10; } } int decimalconversion(int number,int primitivesystem,int system)//十进制转换函数{ int sum=0; int product=1; do{ sum=sum+(number%10)*product; number=number/10; product=product*primitivesystem; }while(number); return sum; } void input(int number,int primitivesystem)//输入函数{ printf("请输入你想得到该数的什么进制数\n"); int system; scanf("%d",&system); printf("你将得到你想要的结果\n"); change(number,primitivesystem,system); printf("感谢使用\n"); } int judge(int copy,int primitivesystem)//判断非法函数{ int remainder=0; int flag=1; do{ remainder=copy%10; copy=copy/10; if(remainder>primitivesystem-1){ printf("该数字非法,请重新输入\n"); flag=0; break; } }while(copy); return flag; }
IV。問題が発生しました
六角入力:ていない他のバイナリ入力と、文字列の理解を経て、%sの入力を使用して
違法判決の数字、表示されますが、実行するために他のコードを害することのコードの一部は、ブレークポイントを設定してデバッグを継続します
進基数変換障害につながる、初期化数の値を忘れ
V. コードピアアセスメント(タオネットワーク3クラス)
入力し、彼は直接文字列の数を入力して、私の入力点を回避
int Tennum(char a[],int b) { int len, i, num; int sum = 0; len = strlen(a); for (i = 0; i < len; i++) { if (a[i] >= '0' && a[i] <= '9') { num = a[i] - '0'; } else if (a[i] >= 'A' && a[i] <= 'F') { num = a[i] - 'A' + 10; } sum = sum * b + num; } return sum; }
その後、彼のNumchange機能、バイナリ小数点以下の成果を回し、サイクルを通じて私decimalconversion機能、各バンドを回すために小数のPOWを使用し、小数点および各バンドを回します
void Numchange(int m, int b) { int n = m; int count = 0; if (m == 0) printf("0"); while (n != 0) { n = n / b; count++; } int number; for (int i = count; i >= 1; i--) { number = m / (int)pow(b, i - 1); if (number < 10) { printf("%d", number); } else { printf("%c", number + 55); } m = m % (int)pow(b, i - 1); } }
VI。概要
- 10進数の各進数のより深い理解の変換のための私のベースは、普遍的法則を持っており、10進数16進数に変換し、他のために比較的容易です
- 関数のパラメータに引数を渡すことによって、あなたは関数がお互いを呼び出すことができますが、あなたは一つの機能、および使用に最終的には、より複雑なを使用することができ、コードより簡潔、より読みやすいコンテンツを作ることができます。