1. 程式人生 > >習題3-1 比較大小

習題3-1 比較大小

習題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;
			}
		}
	}