第二次博客園做業

一.程序運行截圖

1.開始界面


運行後跳出選擇菜單數組

2.運行界面


輸入選項後出現提醒正在進行的項目,以後輸入想進行轉換的數,最後獲得轉換後的數並繼續跳出選擇菜單



當選擇2、八進制轉換時會先跳出輸入進行轉換的數的位數






函數

3.輸入錯誤的2、八進制數時


4.輸入錯誤的數字編號時

5.結束界面


沒有出現輸入錯誤的結束界面

出現了輸入錯誤的結束界面code

二.額外拓展功能

計算輸入錯誤的次數

使用了全局變量fault來計算出現輸入錯誤的次數
在每次輸入錯誤時令fault++來達到計算次數的目的blog

三.函數介紹

1.十進制轉換2、八進制函數

void Decimal system to Binary and Octal number system(int m) {     //十進制轉換成2、八進制
    int number, d, i = 0;
    int a[100];
    printf("輸入一個正整數:");
    scanf("%d", &number);
    while (number > 0)
    {
        d = (number % m);
        a[i] = d;
        number = number / m;
        i++;
    }
    printf("進制轉化結果是:");
    for (i--; i >= 0; i--)      //將數組倒序輸出
        printf("%d", a[i]);
    printf("\n");

}

逐個計算並用數組逐個錄入進制位數
最後逆序輸出數組中的數字來達到輸出轉換後的數的目的ci

2.2、八進制轉換十進制函數

void Binary and Octal number system to Decimal system(int m) {       //2、八進制轉換成十進制
    int i, p = 0, sum = 0, e = 0, q = 0;
    int b[100];
    printf("輸入須要轉換的進制數位數:");
    scanf("%d", &p);
    printf("按位輸入須要轉換的進制數(以空格分開):\n");
    for (i = 1; i <= p; i++) {
        scanf("%d", &b[i]);
    }
    for (i = p; i > 0; i--) {
        sum += b[i] * pow(m, e);
        e++;
    }
    for (i = 1; i <= p; i++) {   //判斷輸入的數是否符合2、八進制的要求
        if (b[i] >= m) {   //如有不合要求的令q++
            q++;
        }
    }
    if (q == 0) {
        printf("進制轉化結果是:%d\n", sum);
    }
    else {   //只要至少有一個不合要求的數就輸出"輸入錯誤!"
        printf("輸入錯誤!");
        fault ++;
    }
}

此函數有計算和判斷兩種功能
既能用數組存放2、八進制數並計算轉換,還能判斷每一個存放進去的數符不符合2、八進制數的範圍
輸入不在範圍時會記錄錯誤次數思維導圖

3.十進制轉換十六進制函數

void Decimal system to Hexadecimal(int m) {         //十進制轉換成十六進制
    int number, c, i = 0;
    char a[100];
    printf("輸入一個正整數:");
    scanf("%d", &number);
    while (number > 0)
    {
        c = (number % m);
        if (c < 10) {
            a[i] = c + 48;
        }
        else {
            if (c == 10) {
                c = 'A';
            }
            else if (c == 11) {
                c = 'B';
            }
            else if (c == 12) {
                c = 'C';
            }
            else if (c == 13) {
                c = 'D';
            }
            else if (c == 14) {
                c = 'E';
            }
            else if (c == 15) {
                c = 'F';
            }
            a[i] = c;
        }
        number = number / m;
        i++;
    }
    printf("進制轉換結果是:");
    for (i--; i >= 0; i--)           //將數組倒序輸出
        printf("%c", a[i]);
    printf("\n");
}

依然是利用數組來實現進制數間的轉換變量

4.2、八進制轉換十六進制函數

void Binary and Octal number system to Hexadecimal(int m) {       //2、八進制轉換成十六進制
    int i, p = 0, sum = 0, e = 0, q = 0;
    int b[100];
    printf("輸入須要轉換的進制數位數:");
    scanf("%d", &p);
    printf("按位輸入須要轉換的進制數(以空格分開):\n");
    for (i = 1; i <= p; i++) {//先將2、八進制轉爲十進制
        scanf("%d", &b[i]);
    }
    for (i = p; i > 0; i--) {
        sum += b[i] * pow(m, e);
        e++;
    }
    for (i = 1; i <= p; i++) {   //判斷輸入的數是否符合2、八進制的要求
        if (b[i] >= m) {   //如有不合要求的令q++
            q++;
        }
    }
    if (q == 0) {//再將十進制轉爲十六進制
        int  c, i = 0;
        char a[100];
        while (sum > 0)
        {
            c = (sum % 16);
            if (c < 10) {
                a[i] = c + 48;
            }
            else {
                if (c == 10) {
                    c = 'A';
                }
                else if (c == 11) {
                    c = 'B';
                }
                else if (c == 12) {
                    c = 'C';
                }
                else if (c == 13) {
                    c = 'D';
                }
                else if (c == 14) {
                    c = 'E';
                }
                else if (c == 15) {
                    c = 'F';
                }
                a[i] = c;
            }
            sum = sum / 16;
            i++;
        }
        printf("進制轉換結果是:");
        for (i--; i >= 0; i--)           //將數組倒序輸出
            printf("%c", a[i]);
        printf("\n");
    }
    else {   //只要至少有一個不合要求的數就輸出"輸入錯誤!"
        printf("輸入錯誤!");
        fault ++;
    }
}

此函數先將2、八進制數轉換成十進制數再將其轉換成十六進制數
輸入不在範圍時會記錄錯誤次數百度

5.十六進制轉二進制函數

void Hexadecimal to Octal number system(char b[]) {//十六進制轉二進制
    int length, j, number;//先將十六進制轉爲十進制
    int m = 0;
    length = strlen(b);
    for (j = 0; j < length; j++)
    {
        if (b[j] >= '0' && b[j] <= '9')
        {
            number = b[j] - '0';
        }
        else if (b[j] >= 'A' && b[j] <= 'F')
        {
            number = b[j] - 'A' + 10;
        }
        m = m * 16 + number;
}
int  d, i = 0;//再將十進制轉爲二進制
    int a[100];
    while (m > 0)
    {
        d = (m % 2);
        a[i] = d;
        m = m / 2;
        i++;
    }
    printf("進制轉化結果是:");
    for (i--; i >= 0; i--)      //將數組倒序輸出
        printf("%d", a[i]);
    printf("\n");
}

此函數先將十六進制轉爲十進制再轉爲2、八進制循環

6.全局變量

int fault = 0;

利用全局變量fault來計算輸入錯誤的次數來提醒使用者輸入要認真二進制

四.展現main函數

int main()
{
    printf("                 歡迎您使用進制轉換器!\n");
    for (;;) {                   //可循環使用直到選擇退出的程序
        int choose;
        printf("            *************************\n");
        printf("            *  請選擇你須要的項目: *\n");
        printf("            *  1.十進制轉二進制     *\n");
        printf("            *  2.十進制轉八進制     *\n");
        printf("            *  3.十進制轉十六進制   *\n");
        printf("            *  4.二進制轉十進制     *\n");
        printf("            *  5.八進制轉十進制     *\n");
        printf("            *  6.二進制轉十六進制   *\n");
        printf("            *  7.八進制轉十六進制   *\n");
        printf("            *  8.十六進制轉十進制   *\n");
        printf("            *  9.十六進制轉二進制   *\n");
        printf("            *  10.十六進制轉八進制  *\n");
        printf("            *  0.退出程序           *\n");
        printf("            *************************\n");        //生成較爲美觀的選擇表格
        printf("請輸入要進行的項目的數字編號:");
        scanf("%d", &choose);
        int m;
        if (choose == 1) {
            printf("您正在進行的是十進制轉二進制\n");
            m = 2;
            Decimal system to Binary and Octal number system(m);
        }
        else if (choose == 2) {
            printf("您正在進行的是十進制轉八進制\n");
            m = 8;
            Decimal system to Binary and Octal number system(m);

        }
        else if (choose == 3) {
            printf("您正在進行的是十進制轉十六進制\n");
            m = 16;
            Decimal system to Hexadecimal(m);

        }
        else if (choose == 4) {
            printf("您正在進行的是二進制轉十進制\n");
            m = 2;
            Binary and Octal number system to Decimal system(m);
        }
        else if (choose == 5) {
            printf("您正在進行的是八進制轉十進制\n");
            m = 8;
            Binary and Octal number system to Decimal system(m);
        }
        else if (choose == 6) {
            printf("您正在進行的是二進制轉十六進制\n");
            m = 2;
            Binary and Octal number system to Hexadecimal(m);
        }
        else if (choose == 7) {
            printf("您正在進行的是八進制轉十六進制\n");
            m = 8;
            Binary and Octal number system to Hexadecimal(m);
        }
        else if (choose == 8) {
            printf("您正在進行的是十六進制轉十進制\n");
            printf("輸入一個十六進制數:");
            scanf("%x", &m);
            printf("進制轉換結果:%d", m);
        }
        else if (choose == 9) {
            char b[100];
            int h;
            printf("您正在進行的是十六進制轉二進制\n");
            printf("輸入一個十六進制數:");
            scanf("%s", b);
            for (h = 0; h < 100; h++) {
                b[h]= toupper(b[h]);
            }
            Hexadecimal to Octal number system(b);
        }
        else if (choose == 10) {
            printf("您正在進行的是十六進制轉八進制\n");
            printf("輸入一個十六進制數:");
            scanf("%x", &m);
            printf("進制轉換結果:%o", m);
        }
        else if (choose == 0) {
            break;
        }
        else {
            fault++;
            printf("請認真閱讀表格,輸入正確的數字編號!\n");       //輸入表格中不存在的數字後彈出提示
        }
        printf("\n");
    }
    printf("\n");
    if (fault != 0) {
        printf("您本次使用該程序輸入時出現了%d次錯誤,但願您之後更加認真,祝您身體健康!\n", fault);
    }
    else if (fault == 0) {
        printf("您本次使用該程序沒有出現輸入錯誤的狀況,您真是太細心了!祝您身體健康!\n");
    }
    printf("                 感謝您使用該程序!\n");
    return 0;
}

五.思惟導圖

六.遇到的問題及解決方法

1.剛開始寫這個代碼的時候一臉茫然,不懂該怎麼寫,寫出來的代碼又醜又長還不少錯誤,後來幾乎把所有要計算的都用函數來寫,這樣就簡潔多了
2.關於十六進制大小寫的問題,百度說不區分大小寫,而我寫的轉換的函數只能識別大寫字母,這時我原來寫的判斷是否是大小寫的函數就很尷尬了,我想起了上課學的把字母變成大寫的函數,因此我就用toupper函數把輸入數組的每一個字母都變成大寫來達到大小寫都能被函數識別轉換

七.代碼互評

//黃曉龍
void TentoTwo()
{
    int num, m, c, i = 0;
    int a[32];
    printf("請輸入一個十進制數:");
    scanf("%d", &num);
    m = num;
    while (num > 0)
    {
        c = num % 2;
        a[i] = c;
        num = num / 2;
        i++;
    }
    for (i--; i >= 0; i--)
        printf("十進制數 %d 轉化成的二進制數是 %d\n", m, a[i]);

}
void TentoEight()
{
    int num, m, c, i = 0;
    int a[32];
    printf("請輸入一個十進制數:");
    scanf("%d", &num);
    m = num;
    while (num > 0)
    {
        c = num % 8;
        a[i] = c;
        num = num / 8;
        i++;
    }
    for (i--; i >= 0; i--)
        printf("十進制數 %d 轉化成的八進制數是 %d\n", m, a[i]);
}

我以爲十進制轉二進制和八進制的寫法都是同樣的,因此我乾脆只寫一個函數,在選擇進行轉換的時候經過輸入的2和8來區別進行二進制仍是八進制的轉換,這樣會使程序簡潔許多

八.收穫與理解的總結

1.收穫:知道了把本身的程序美化的重要性,學會了應用全局變量來統計main函數和其餘函數裏出錯的次數,學會了各進制間的轉換並寫成代碼 2.理解:函數能使程序變得簡潔明瞭,有相同或相似的函數時能夠把他們合併來簡化程序,應用函數能使程序運行更方便

相關文章
相關標籤/搜索