バイナリコンバータ機能+

1.ファイル名を指定して実行プログラムのスクリーンショット

これは、まず私のユーザーは、バイナリ変換の2種類を選択でき、プログラムを実行するための私のショットです、適切なパスを選択し、入力して変換し、そして最後に、あなたに適切なバイナリ答えを与えたいです。

2.確立し、使用機能

これは、すべてのバイナリ変換の関数であり、バンドの4種類とすることができる、いずれか2つが交換可能です。

3.マインドマップの機能

これは、メイングラフ機能および他の補助機能と変換機能のベースです。

4.各機能の内容とプレゼンテーション

主な機能

#include <stdio.h>
#include <math.h>

int abc (int n);
void erba (char m[10000]);
void ershiliu (char m[10000]);
void ershi (char m[10000]);
void baer (char m[10000]);
void bashiliu (char m[10000]);
void bashi (char m[10000]);
void shiliuer (char m[10000]);
void shiliuba (char m[10000]);
void shiliushi (char m[10000]);
void shier (int n);
void shiba (int n);
void shishiliu (int n);
int a(int n);
int b(int n);
int c(int n);
int main()
{
    printf("二进制转换为八进制,请输入1\n二进制转换为十六进制,请输入2\n二进制转换为十进制,请输入3\n"); 
    printf("八进制转换为二进制,请输入4\n八进制转换为十六进制,请输入5\n八进制转换为十进制,请输入6\n"); 
    printf("十六进制转换为二进制,请输入7\n十六进制转换为八进制,请输入8\n十六进制转换为十进制,请输入9\n");
    printf("十进制转换为二进制,请输入10\n十进制转换为八进制,请输入11\n十进制转换为十六进制,请输入12\n");
    
    int n,p;
    scanf("%d",&n);
    char m[10000];
    
    int i,j=0;
    if(n==1||n==2||n==3){
        scanf("%s",&m);
        for(i=0;m[i]!='\0';i++){
            if(m[i]<'0'||m[i]>'1'){
                j++;
            }
        }
        if(j==0&&n==1){
            erba(m);
        }else {
            if(j==0&&n==2){
                ershiliu(m);
            }else {
                if(j==0&&n==3){
                    ershi(m);
                }else {
                    printf("ERROR,不是二进制数");
                    return 0;
                }
            }   
        }
    } 
    if(n==4||n==5||n==6){
        scanf("%s",&m);
        for(i=0;m[i]!='\0';i++){
            if(m[i]<'0'||m[i]>'7'){
                j++;
            }
        }
        if(j==0&&n==4){
            baer(m);
        }else {
            if(j==0&&n==5){
                bashiliu(m);
            }else {
                if(j==0&&n==6){
                    bashi(m);
                }else {
                    printf("ERROR,不是八进制数");
                    return 0;
                }
            }   
        }
    } 
    if(n==7||n==8||n==9){
        scanf("%s",&m);
                for(i=0;m[i]!='\0';i++){
            if(m[i]<'0'||m[i]>'9'||m[i]<'A'||m[i]>'F'){
                j++;
            }
        }
        if(j==0&&n==7){
            shiliuer(m);
        }else {
            if(j==0&&n==8){
                shiliuba(m);
            }else {
                if(j==0&&n==9){
                    shiliushi(m);
                }else {
                    printf("ERROR,不是十六进制数");
                    return 0;
                }
            }   
        }
    } 
    if(n==10||n==11||n==12){
        scanf("%d",&p);
        if(p<0){
            j++;
        }
        if(j==0&&n==10){
            shier(p);
        }else {
            if(j==0&&n==11){
                shiba(p);
            }else {
                if(j==0&&n==12){
                    shishiliu(p);
                }else {
                    printf("ERROR");
                    return 0;
                }
            }   
        }
    } 
    return 0;
}

これは私の主な機能の内部には、その変換を選択するために、ユーザによって計算関数内に記述バイナリ二十から二変換、の4種類を言って、バイナリ変換を行うために、適切な関数を入力するものであり、第1に入る前に実行します裁判官は、あなたが16進数は、対応する16進の要件を満たして入力し、終了を満たし、そしてあなたにヒントを与えるものではありません。

オクタル・バイナリ変換機能

void erba(char m[10000])
{
    
    int i,j,l=0,a=0,k=0;
    int sum=0;
    
    printf("二进制转换为八进制\n");
    printf("答案是:");
    
    for(j=0;m[j]!='\0';j++){
        a++;
    } 
    if(a<=6){
        l=6%a;
    }else {
        l=3-a%6; 
    }
    m[a+l]='\0';
    for(i=a-1;i>=0;i--){
        m[i+l]=m[i];
    }
    for(i=0;i<l;i++){
        m[i]='0';
    }
//到这进行二进制数三位三位对应八进制数。
    for(i=0;m[i]!='\0';i++){
        sum+=(m[i]-'0')*pow(2,(2-k));
        k++;
        if(k%3==0){
            printf("%d",sum);
            k=0;
            sum=0;
        }
    }
}

それはバイナリ進に変換され、この関数が定義されます。進、2進数、8進数3つの思想にバイナリに変換する必要があり、Iは、バイナリ入力が3の倍数ではなく、高い充填0であるか否かを決定する。次いで、3×3の変換。

バイナリ変換六角機能

void ershiliu (char m[10000])
{
    
    int i,j,l=0,a=0,k=0;
    int sum=0;

    printf("二进制转换为十六进制\n");
    printf("答案是:");
    
    for(j=0;m[j]!='\0';j++){
        a++;
    } 
    if(a<=8){
        l=8%a;
    }else {
        l=4-a%8; 
    }
    m[a+l]='\0';
    for(i=a-1;i>=0;i--){
        m[i+l]=m[i];
    }
    for(i=0;i<l;i++){
        m[i]='0';
    }
    //到这将二进制数转换成四位四位二进制数,对应十六进制转换。
    for(i=0;m[i]!='\0';i++){
        sum+=(m[i]-'0')*pow(2,(3-k));
        k++;
        if(k%4==0){
            if(sum>9){
                printf("%c",'A'+sum-10);
            }else {
                printf("%d",sum);
            }   
            k=0;
            sum=0;
        }
    }
}

バイナリ変換進ビット、および同様のコンテンツ、意味を持つ機能。

バイナリ小数変換機能

void ershi (char m[10000])
{
    
    int i,j,k=0;
    int sum=0;

    printf("二进制转换为十进制\n");
    printf("答案是:");
    
    for(k=0;m[k]!='\0';k++){
    } 
    k-=1;
    for(i=0;m[i]!='\0';i++){
        j=abc(k);
        sum+=(m[i]-'0')*j;
        k--;    
    }
    printf("%d\n",sum); 
}

対応する乗算器によって乗算進数に対応するバイナリ変換、ハイから数えての小数は、添加することによって誘導されます。ここで別の関数、いくつかの正方形の2カウントの機能を使用します。

2電源機能

int abc (int n)
{
    int sum=1;
    for(int i=1;i<=n;i++){
        sum*=2;
    }
    return sum;
}

これは、いくつかの政党の機能、ヘッダファイルとみなされ、機能が簡単に小数に変換バイナリに、あなた自身を書き、あまりにもゆっくりと2つのランが付属しています。

オクタル・バイナリ機能

void baer (char m[10000])
{
    
    int i,j,k,l;
    
    printf("八进制转换为二进制\n");
    printf("答案是:");
    
    for(i=0;m[i]!='\0';i++){
        k=m[i]-'0';
        if(k==1){
            printf("00");
        } else {           //中间这个if语句是使输出二进制数为三的倍数,更加好看。
            if(k>1&&k<4){
                printf("0");
            }
        }
        l=a(k);
    }
}

これはオクタルバイナリ、また他の機能、(k)は、すべての進数を使用して、対応する3桁の2進数に変換されます。

オクタル・六角機能

void bashiliu (char m[10000])
{
    
    int i,j,l=0,a=0,k=0;
    int p=1,q;
    int n[10000];
    
    printf("八进制转换为十六进制\n");
    printf("答案是:");
    
    for(i=0;m[i]!='\0';i++){
        k=m[i]-'0';
        q=p*3-1;
        for(j=i*3;j<i*3+3;j++){
            n[q]=k%2;
            k/=2;
            q--;
        }
        p++;
    }
   //到这八进制转换为二进制数。
    if(j<=8){
        l=8%j;
    }else {
        l=4-j%6; 
    }
    
    for(i=j-1;i>=0;i--){
        n[i+l]=n[i];
    }
    for(i=0;i<l;i++){
        n[i]=0;
    }
//到这进行二进制数转换成四的倍数,四位二进制对应一个十六进制。
    int sum=0;
    
    for(i=0;i<j+l;i++){
        sum+=n[i]*pow(2,(3-k));
        k++;
        if(k%4==0){
            if(sum>9){
                printf("%c",'A'+sum-10);
            }else {
                printf("%d",sum);
            }
            k=0;
            sum=0;
        }
    }
//得出十六进制数。
}

これは、16進関数、バイナリの最初進、16進数にバイナリにオクタルあります。

小数の機能に進

void bashi (char m[10000])
{
    
    int i,j,l,k,p=1,a;
    int n[10000];
    
    printf("八进制转换为十进制\n");
    printf("答案是:");
    
    for(i=0;m[i]!='\0';i++){
        k=m[i]-'0';
        l=p*3-1;
        for(j=i*3;j<i*3+3;j++){
            n[l]=k%2;
            k/=2;
            l--;
        }
        p++;
    }

    int sum=0;
    int b=j-1;
    for(i=0;i<j;i++){
        a=abc(b);
        sum+=n[i]*a;
        b--;    
    }
    printf("%d",sum);
    
}

10進数のオクタル、バイナリサブ小数点最初のターン。

再帰関数のバイナリカウンタ

int a(int n)
{
    if(n==1||n==0){
        printf("%d",n);
    }else {
        a(n/2);
        printf("%d",n%2);
    }
    return 0;
}

これは、3つのバイナリ関数のバイナリ出力に進数に変換すると言うことです。

進変換バイナリ機能

void shiliuer (char m[10000])
{
    
    int i,j,l,k;
    
    printf("十六进制转换为二进制\n");
    printf("答案是:");
    
    for(i=0;m[i]!='\0';i++){
        
        if(m[i]>='0'&&m[i]<='9'){
            k=m[i]-'0';
        }
        if(m[i]>='A'&&m[i]<='F'){
            k=m[i]-'7';
        }
        if(k==1){
            printf("000");
        }else {
            if(k<4){
                printf("00");
            }else {
                if(k<8){
                    printf("0");
                }
            }
        }
        l=a(k);
    }
    
}

私は最初のバイナリ形式で4ビットの2進数を埋めるために行く、高出力に0の大きさを決定する4ビットバイナリ、16進数にバイナリ、進相当する16進数ここコール(k)は2進数をカウントする機能があります。

進進機能

void shiliuba (char m[10000])
{
    
    int i,j,l=0,k=0;
    int n[10000];
    int a,b=1,c;
    printf("十六进制转换为八进制\n");
    printf("答案是:");
    
    for(i=0;m[i]!='\0';i++){
        
        if(m[i]>='0'&&m[i]<='9'){
            k=m[i]-'0';
        }
        if(m[i]>='A'&&m[i]<='F'){
            k=m[i]-'7';
        }
        a=b*4-1;
        for(j=i*4;j<i*4+4;j++){
            n[a]=k%2;
            k/=2;
            a--;
        }
        b++;
    }
    
    if(j<=6){
        l=6%j;
    }else {
        l=3-j%6; 
    }
    for(i=j-1;i>=0;i--){
        n[i+l]=n[i];
    }
    for(i=0;i<l;i++){
        n[i]=0;
    }
    
    int sum=0;
    
    for(i=0;i<j+l;i++){
        sum+=n[i]*pow(2,(2-k));
        k++;
        if(k%3==0){
            printf("%d",sum);
            k=0;
            sum=0;
        }
    }
}

前回同様の機能の内容を意味進16進、。

進小数変換機能

void shiliushi (char m[10000])
{
        
    int i,j,k;
    int n[10000];
    int a,b=1;
    
    printf("十六进制转换为十进制\n");
    printf("答案是:");
    
    for(i=0;m[i]!='\0';i++){
        
        if(m[i]>='0'&&m[i]<='9'){
            k=m[i]-'0';
        }
        if(m[i]>='A'&&m[i]<='F'){
            k=m[i]-'7';
        }
        a=b*4-1;
        for(j=i*4;j<i*4+4;j++){
            n[a]=k%2;
            k/=2;
            a--;
        }
        b++;
    }
    
    int sum=0;
    int c=j-1,l;
    for(i=0;i<j;i++){
        l=abc(c);
        sum+=n[i]*l;
        c--;    
    }
    printf("%d",sum);
    
}

小数の機能に進。

十進変換バイナリ機能

void shier (int n)
{
    printf("十进制转换为二进制\n");
    printf("答案是:");
    a(n);
}
int a(int n)
{
    if(n==1||n==0){
        printf("%d",n);
    }else {
        a(n/2);
        printf("%d",n%2);
    }
    return 0;
}

バイナリ小数点変換機能では、2進数を描かれ記述された再帰関数を使用して、回答を計算するために別の関数を使用。

小数進機能

void shiba (int n)
{
    printf("十进制转换为八进制\n");
    printf("答案是:");
    b(n); 
}
int b(int n)
{
    if(n<8){
        printf("%d",n);
    }else {
        b(n/8);
        printf("%d",n%8);
    }
    return 0;
}

オクタル機能、アルゴリズム同様の法律はなく、答えを得るために再帰関数の使用に小数。

10進数16進数機能

void shishiliu (int n)
{
    printf("十进制转换为十六进制\n");
    printf("答案是:");
    c(n); 
}
int c(int n)
{
    int k;
    if(n<16){
        if(n<10){
            printf("%d",n);
        }else {
            printf("%c",'A'+n-10);
        }
    }else {
        c(n/16);
        k=n%16;
        if(k<10){
            printf("%d",k);
        }else {
            printf("%c",'A'+k-10);
        }
    }
    return 0;
}

進関数の小数は、それが対応する16進文字に有用であることが面倒である変換は、変更番号する必要が要求されます。

5.リコールコード

このバイナリ変換を書き込んで、私は約いくつかの質問に遭遇しました:

1.入力の数が要件に六角の4種類を満たしているかどうかを確認する方法。私は本を​​照会して4進ルールについて知っている必要があります。

私はそれらをご希望の関数に渡される配列を読み取る方法2。私Baiduは、学ぶ合格する方法を学びます。

再帰関数を記述する方法3。知識と組み合わせることで、多くの場合、試してみて、書き込み方法を理解し続けています。

4.どのようにコードで書かれた小数の間で変換することができます。ライトコードの16進数の間の変換規則と併せて機能知識の使用。

ユーザーの使用方法5.より良い感じになります。コード、コードの美化を照会し、表示します。

6.コード相互評価(他人のコードの評価、良い場所を学ぶ)ネットワークリー永福1913

小数点関数に変換し、私の8進数で、彼は私より良い場所です、彼はより便利にすることができ、文字列のヘッダファイル内の文字列の長さを計算するための関数を使用する必要がありましたが、私の考えは同じではありませんが、これは本当に良いです。8進数で16進数に変換し、私は異なり、私はバイナリに変換してから16進数に変換され、彼は10進数に変換して、16進数に変換、私は彼かのように感じられたと思います私が勉強したいところ方法が優れている、確かに小数に16進数に変換する変換よりも簡単になり、これがあります。これは私が、私はまだ学生に学ばなければならないとは思いませんでした場所である、配列を初期化することがあります。

7.まとめ

このブログの作品からは、私がすることを学びます:

1.小数の間で私の変換規則を深め、バイナリ変換コードを表現する方法を理解します。

書き込みやその他の補助機能の私の理解を深め2。

3.私は、目的を持って多くのプログラムを書くことを学んだ知識をフルに活用することができます。

機能を理解するための8:

1.関数は、コードの明快で、より簡潔なコードのルックスを使用することができます。

2.機能は、いくつかの機能は、あなたの究極の目標の非常に優れた組成物であることができる、あなたの目的の目的の完了の一部をより良くすることができます。

コード機能を使用する場合3.、あなたは他の人がより良いあなたのコードを理解するように、他の人があなたのコードがよりよくやっているのか理解見てみましょうことができます。

おすすめ

転載: www.cnblogs.com/jiuweihong/p/11785223.html