輸入整數,按照從大到小的排序輸出(兩個方法,一個思考)


輸入三個整數a,b,c,按從大到小的排序輸出

 

方法一:

輸入數據后不改變a,b,c,的值,區分3個數從大到小的各種排序情形,分情況輸出

那么我們可以很簡單的得出只用六種可能,所以代碼如下

#include<stdio.h>
main()
{
    int a, b, c;
    printf("請輸入分別三個整數a,b,c:\n");
    scanf_s("%d %d %d", &a, &b, &c);
    if (a > b && a > c && b > c)
    {
        printf("從大到小的排序為:%d>%d>%d", a, b, c);
    }
    else if (a > c && c > b)
    {
        printf("從大到小的排序為:%d>%d>%d", a, c, b);
    }
    else if (b > c && c > a)
    {
        printf("從大到小的排序為:%d>%d>%d", b, c, a);

    }
    else if (b > a && a > c)
    {
        printf("從大到小的排序為:%d>%d>%d", b, a, c);
    }
    else if (c > a && a > b)
    {
        printf("從大到小的排序為:%d>%d>%d", c, a, b);
    }
    else if (c > b && b > a)
    {
        printf("從大到小的排序為:%d>%d>%d", c, b, a);
    }
    else
    {
        printf("您輸入的字符不符合要求,請重新輸入!");
    }
}

 

運行結果如下:

 

 

方法二:

通過比較和交換,先使a中存儲最大的數,b次之,c最小,再輸出。變量值的交換

我們可以用一個簡單的替換,如:d = b;  b = c;  c = d;  所以代碼為:

#include<stdio.h>
main()
{
    int a, b, c, d;
    printf("請輸入分別三個整數a,b,c:\n");
    scanf_s("%d%d%d",&a,&b,&c);
    if (a < b)
    {
        d = a;
        a = b;
        b = d;
    }
    if (a < c)
    {
        d = a;
        a = c;
        c = d;
    }
    if (b < c)
    {
        d = b;
        b = c;
        c = d;
    }
    printf("從大到小排序為:%d>%d>%d",a,b,c);
}

 

思考:

如果有更多數據需要排序上訴還可行否? 五個 一百個 等。。。

 

在這個時候我們要巧妙的利用到冒泡排序,如下:

#include <stdio.h>
main()
{
    int num, n, temp;//定義變量
    int a[100];   //初始化數組
    printf("您要重新排列多少個數:  \n");
    scanf_s("%d", &num);
    n = num;  //獲取數組的長度    另外還有一種:n = sizeof(a) / sizeof(a[0]);  
            /*a[0]是int型, 占4字節, 所以總的字節數除以4等於元素的個數*/
    int i = 0;
    printf("請您輸入排列的數:\n");
    while (scanf_s("%d", &a[i]) && num > 1)  //循環向數組中存入數,當循環
    {
        i++;
        num--;
    }
    printf("排列之前的順序為:");
    for (int length = 0; length < n; length++)
    {
        printf("%3d", a[length]);
    }
    for (int j = 0; j < n - 1; j++)  //比較n-1輪
    {
        for (int k = 0; k < n - 1 - j; k++)  //每輪比較n-1-i次,
        {
            
            if (a[k] < a[k+1]) //從大到小
            {
                temp = a[k];
                a[k] = a[k+1];
                a[k+1] = temp;
            }
            /*
            if (a[k] > a[k + 1]) //從小到大
            {
                temp = a[k];
                a[k] = a[k + 1];
                a[k + 1] = temp;
            }
            */
        }
    }
    printf("\n");
    printf("排列之后的順序為:");
    for (int len = 0; len < n; len++)
    {
        printf("%3d", a[len]);
    }
    printf("\n");
}

運行結果如下:

書上說 難度三個星 

希望對你有所幫助

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM