理解と進変換機能を深化

A. プログラムの実行、実行ショット

  1. II。機能紹介

1.main

  1. ローカル変数を使用して、元のバイナリのデジタル入力は、primitivesystem 2は、ローカル変数の使用、番号を入力番号のローカル変数使用して入力を取得したい進3. システム 4.バイナリ変換、関数呼び出しのbinaryconversion変更を、5が得られます客観数

  2. #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(バイナリに変換)

  1. 2例に分割2進数に再帰着信番号は、数/ 2 == 0戻り値は再帰の結果を用いて算出することができます

  2. int binaryconversion(int number){
     if(number/2==0){
         return number%2;
     }
     else{
         return number%2+binaryconversion(number/2)*10;
     }
    }

3.change(各六角変換)

  1. 主に10進数、16進数の変換及び他のアイデアに他のバイナリ、着信番号、primitivesystemの値システムの進変換により、バイナリ変換を行います

  2. 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.裁判官(決定の無効なエントリ)

  1. また不法に、離れた着信番号とprimitivesystemを価値判断のヘクスに進入します

  2. 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(入力機能)

  1. オブジェクトシステムの入力および出力の数

  2. void input(int number,int primitivesystem)//输入函数{
     printf("请输入你想得到该数的什么进制数\n");
     int system; 
     scanf("%d",&system);
     printf("你将得到你想要的结果\n"); 
     change(number,primitivesystem,system);
     printf("感谢使用\n");
    }

6.decimalconversion(10進数に変換)

  1. 進数、パス数、値primitivesystemのシステムに非進

  2. 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。マインドマッピング機能

  1. 完全なコード

  2. #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。問題が発生しました

  1. 六角入力:ていない他のバイナリ入力と、文字列の理解を経て、%sの入力を使用して

  2. 違法判決の数字、表示されますが、実行するために他のコードを害することのコードの一部は、ブレークポイントを設定してデバッグを継続します

  3. 進基数変換障害につながる、初期化数の値を忘れ

V. コードピアアセスメント(タオネットワーク3クラス)

  1. 入力し、彼は直接文字列の数を入力して、私の入力点を回避

  2. 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;
    }
  3. その後、彼のNumchange機能、バイナリ小数点以下の成果を回し、サイクルを通じて私decimalconversion機能、各バンドを回すために小数のPOWを使用し、小数点および各バンドを回します

  4. 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。概要

  1. 10進数の各進数のより深い理解の変換のための私のベースは、普遍的法則を持っており、10進数16進数に変換し、他のために比較的容易です
  2. 関数のパラメータに引数を渡すことによって、あなたは関数がお互いを呼び出すことができますが、あなたは一つの機能、および使用に最終的には、より複雑なを使用することができ、コードより簡潔、より読みやすいコンテンツを作ることができます。

おすすめ

転載: www.cnblogs.com/tylk/p/11815722.html