習題3-1 比較大小
阿新 • • 發佈:2018-12-10
習題3-1 比較大小 (10 分)
本題要求將輸入的任意3個整數從小到大輸出。
輸入格式:
輸入在一行中給出3個整數,其間以空格分隔。
輸出格式:
在一行中將3個整數從小到大輸出,其間以“->”相連。
輸入樣例:
4 2 8
輸出樣例:
2->4->8
分析:對於本題,一開始的思路是:用變數儲存數字。scanf("%d %d %d",&a,&b,&c),通過多個條件判斷,使變數a儲存最小的數字,b儲存中間數字,c儲存最大數字。最終輸出方式也是按照輸入的順序printf("%d->%d->%d",a,b,c);但是嘗試著寫出程式碼的時候發現邏輯稍稍有些複雜,容易錯,於是就換了想法。如下--->
本題只是“3個數從小到大輸出”,所以上面的方法可行,如果考慮到多個數字從小到大輸出,則以上方法明顯無法解決。所以對於這種“多個數字排序輸出”,考慮的普遍方法是“用陣列儲存數字,進行排序”。
這裡我用的是選擇排序
程式碼:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int main() { int a[] = { 0, 0, 0 }; int len = sizeof(a) / sizeof(a[0]); //將數字存入陣列 for (int i = 0; i < len; i++) { scanf("%d", &a[i]); } //選擇排序 for (int i = 0; i < len - 1; i++) { //a[i]以後的數字中找出最小的,找到後更新minid int minid = i; for (int j = i + 1; j < len; j++) { if (a[j] < a[minid]) { minid = j; } } //交換 if (a[minid] < a[i]) { int tmp = a[minid]; a[minid] = a[i]; a[i] = tmp; } } //輸出陣列中的數字 int i; for (i = 0; i < len - 1; i++) { printf("%d->", a[i]); } printf("%d", a[i]); system("pause"); return 0; }
測試結果:
本題用氣泡排序也可以(其他部分程式碼參見上面,這裡只貼排序部分的程式碼)
//氣泡排序
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (a[j]>a[j + 1])
{
int tmp;
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}