輸入三個整數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"); }
運行結果如下:
書上說 難度三個星
希望對你有所幫助