1. 程式人生 > >習題 4.9 給一個不多於5位的正整數,要求:1. 求出它是幾位數;2. 分別輸出每一位數字;3. 按逆序輸出各位數字,例如原數為321,應輸出123。

習題 4.9 給一個不多於5位的正整數,要求:1. 求出它是幾位數;2. 分別輸出每一位數字;3. 按逆序輸出各位數字,例如原數為321,應輸出123。

C程式設計 (第四版) 譚浩強 習題4.9 個人設計

習題 4.9 給一個不多於5位的正整數,要求:

1. 求出它是幾位數;

2. 分別輸出每一位數字;

3. 按逆序輸出各位數字,例如原數為321,應輸出123。

程式碼塊:

方法1:(利用條件選擇結構)

#include <stdio.h>
int main()
{
    int x, a, b, c, d, e;
    //輸入一個整數
    printf("Please enter number: ");
    scanf("%d", &x);
    //以下是判斷整數是否多於5
位,多於判斷出錯,重新輸入 while (x < 0 || x > 99999){ printf("Error! Retry!\nPlease enter number: "); scanf("%d", &x); } //以下判斷出該數是幾位數 a = x / 10000; b = x / 1000; c = x / 100; d = x / 10; e = x - d * 10; if (a >= 1 && a <= 9){ printf("%d is 5 bits!\n"
, x); printf("%d %d %d %d %d\n", a, b-a*10, c-b*10, d-c*10, e); printf("%d %d %d %d %d\n", e, d-c*10, c-b*10, b-a*10, a); } else if (b >= 1 && b <= 9){ printf("%d is 4 bits!\n", x); printf("%d %d %d %d\n", b, c-b*10, d-c*10, e); printf("%d %d %d %d
\n"
, e, d-c*10, c-b*10, b); } else if (c >= 1 && c <= 9){ printf("%d is 3 bits!\n", x); printf("%d %d %d\n", c, d-c*10, e); printf("%d %d %d\n", e, d-c*10, c); } else if (d >= 1 && d <= 9){ printf("%d is 2 bits!\n", x); printf("%d %d\n", d, e); printf("%d %d\n", e, d); } else{ printf("%d is 1 bits!\n", x); printf("%d\n", x); } return 0; }

方法2:(利用陣列、swtich和迴圈結構)

#include <stdio.h>
#include <math.h>
int main()
{
    int num, i, j, bit, c[7], n[7];
    printf("Please enter number: ");               //輸入一個整數
    scanf("%d", &num);
    //判斷整數是否多於5位,報錯,重新輸入
    while (num >= 100000){
        printf("Error!\nPlease enter number: ");
        scanf("%d", &num);
    }
    //判斷整數是幾位數
    for (i = 1; i < 1000000 && j != 0; i *= 10)
        j = num / i;
    i /= 100;
    switch(i){
    case 1: bit = 1; break;
    case 10: bit = 2; break;
    case 100: bit = 3; break;
    case 1000: bit = 4; break;
    case 10000: bit = 5; break;
    default: break;
    }
    printf("%d is %d bits!\n", num, bit);
    //此處是一個為輸出數字的中間模組
    for (i = 0; i <= bit; i++)
        c[i] = num / pow(10, bit-i);
    //分別輸出整數的每位數字
    for (i = 0; i < bit; i++){
        n[i] = c[i+1] - c[i] * 10;
        printf("%d ", n[i]);
    }
    printf("\n");
    //逆序輸出每位數字
    for (i = bit-1; i >= 0; i--)
        printf("%d ", n[i]);
    printf("\n");
    return 0;
}

方法3:(利用函式的模組化設計)

#include <stdio.h>
#include <math.h>
void input();                       //定義輸入函式
void bits(int x);                   //定義數字位數函式
void output(int x);                 //定義數字輸出函式
void re_output(int x);              //定義數字逆序輸出函式
void error();                       //定義報錯函式
int num, i, bit, c[7], n[7];        //定義全域性變數
int main()
{
    input();                        //呼叫輸入函式
    bits(num);                      //呼叫數字位數函式
    output(num);                    //呼叫數字輸出函式
    re_output(num);                 //呼叫數字逆序輸出函式
    return 0;
}
//輸入函式
void input()
{
    printf("Please enter number: ");
    scanf("%d", &num);
    //一旦數字超過5位,呼叫報錯函式並遞迴呼叫本函式
    while (num >= 100000){
        error();
        input();
    }
}
//數字位數函式
void bits(int x)
{
    int j;
    for (i = 1; i < 1000000 && j != 0; i *= 10)
        j = x / i;
    i /= 100;
    switch(i){
    case 1: bit = 1; break;
    case 10: bit = 2; break;
    case 100: bit = 3; break;
    case 1000: bit = 4; break;
    case 10000: bit = 5; break;
    default: break;
    }
    printf("%d is %d bits!\n", x, bit);
}
//數字輸出函式
void output(int x)
{
    for (i = 0; i <= bit; i++)
        c[i] = x / pow(10, bit-i);
    for (i = 0; i < bit; i++){
        n[i] = c[i+1] - c[i] * 10;
        printf("%d ", n[i]);
    }
    printf("\n");
}
//數字逆序輸出函式
void re_output(int x)
{
    for (i = bit-1; i >= 0; i--)
        printf("%d ", n[i]);
    printf("\n");
}
//報錯函式
void error()
{
    printf("Error!\n");
}

方法4: (利用for迴圈和陣列)

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n, i, j, k, b[5];
    printf("Please enter number: ");
    for (i=0; ; i++){
        scanf("%d", &n);
        if (n<100000) break;
        else printf("Error!\nPlease enter number: ");
    }
    for (i=1, j=1; i<=10000; i*=10, j++)
        if (n/i>0&&n/i<10){
            printf("Bit=%d\n", j);
            break;
        }
    for (k=0; i>=1; b[k++]=n/i, n%=i, i/=10);
    for (i=0; i<j; printf("%d ", b[i++]));
    printf("\n");
    for (i=j-1; i>=0; printf("%d ", b[i--]));
    printf("\n");
    system("pause");
    return 0;
}