將三個數按從大到小輸出

zhm521314發表於2020-12-18

第一次嘗試

//第一次嘗試:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void compare(int x, int y, int z){
    if (x > y){
        if (y > z){
            printf("%d %d %d", x, y, z);
        }
        else if (x < z){
            printf("%d %d %d", z, x, y);
        }
        else{
            printf("%d %d %d", x, z, y);
        }
    }
    else if (x < y){
        if (y < z){
            printf("%d %d %d", z, y, x);
        }
        else if (x > z){
            printf("%d %d %d", y, x, z);
        }
        else{
            printf("%d %d %d", y, z, x);
        }
    }
}
int main(){
    int a = 0;
    int b = 0;
    int c = 0;
    printf("請輸入三個數\n");
    scanf("%d %d %d", &a, &b, &c);
    compare(a, b, c);
    return 0;
}

雖然執行成功,得到了結果,但是程式碼太繁瑣,不夠簡潔。

第二次嘗試

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void compare(int a, int b, int c) {
    for (int i = 0; i < 3; i++) {
        int t = 0;
        if (a < b) {
            t = a; a = b; b = t;
        }
        else if (b < c) {
            t = b; b = c; c = t;
        }
        else if (a < c) {
            t = a; a = c; c = t;
        }
    }
    printf("%d %d %d\n", a, b, c);
}
int main(){
    int x = 0;
    int y = 0;
    int z = 0;
    printf("請輸入三個數\n");
    scanf("%d %d %d", &x, &y, &z);
    compare(x, y, z);
    return 0;
}

做出了一些改進,進行三次迴圈,然後藉助臨時變數t進行交換,最終得到從大到小的排序。此程式碼比第一次的結構嚴謹,且短小,我認為是比較好的改進。


部落格園發表於 2020-10-16 16:23

相關文章