20201215-經典基礎C語言題01-三個數排大小

風車車的大表哥發表於2020-12-16

經典基礎C語言題-三個數排大小

題幹

C語言三個數從小到大排序/輸出

實現思路

總體

  1. 輸入
  2. 處理
  3. 輸出

詳細

  1. 定義資料型別,本例項中 a、b、c、t 均為基本整型。
  2. 使用輸入函式獲得任意 3 個值賦給 a、b、c。
  3. 使用 if 語句進行條件判斷,如果 a 大於 b,則藉助於中間變數 t 互換 a 與 b 值
  4. 依此類推比較 a 與 c、b 與 c,最終結果即為 a、b、c 的升序排列。
  5. 使用輸出函式將 a、b、c 的值依次輸出。

示例程式碼

#include <stdio.h>

int main(void)
{
    int dataA, dataB, dataC, tmp;

    printf("Please input a,b,c:\n");
    scanf("%d,%d,%d", &dataA, &dataB, &dataC);
    // 兩次比較,讓dataA裡保證是最小的數
    if (dataA > dataB)
    {
        tmp = dataA;
        dataA = dataB;
        dataB = tmp;
    }
    if (dataA > dataC)
    {
        tmp = dataA;
        dataA = dataC;
        dataC = tmp;
    }
    // 一次比較,讓dataB比dataC小
    if (dataB > dataC)
    {
        tmp = dataB;
        dataB = dataC;
        dataC = tmp;
    }
    // 按dataA,dataB,dataC輸出,即從小到大
    printf("The order of the number is:\n");
    printf("%d,%d,%d", dataA, dataB, dataC);

    return 0;
}

測試資料組

    測試資料
    11,22,33
    11,33,22
    33,22,11
    33,11,22
    22,11,33
    22,33,11

部分測試結果

PS E:\clangstudy\class07> cd "e:\clangstudy\class07\" ; if ($?) { gcc 'fileoperation.c' -o 'fileoperation.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\fileoperation' }
PS E:\clangstudy\class07> cd "e:\clangstudy\class08\" ; if ($?) { gcc 'c1三個數求大小.c' -o 'c1三個數求大小.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\c1三個數求大小' }
Please input a,b,c:
11,22,33
The order of the number is:
11,22,33
PS E:\clangstudy\class08> cd "e:\clangstudy\class08\" ; if ($?) { gcc 'c1三個數求大小.c' -o 'c1三個數求大小.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\c1三個數求大小' }
Please input a,b,c:
22,33,11
The order of the number is:
11,22,33
PS E:\clangstudy\class08> cd "e:\clangstudy\class08\" ; if ($?) { gcc 'c1三個數求大小.c' -o 'c1三個數求大小.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\c1三個數求大小' }
Please input a,b,c:
33,22,11
The order of the number is:
11,22,33

重構程式碼,抽出功能函式

#include <stdio.h>

// 三個數排小大的功能函式
void sort3data(int *dataA, int *dataB, int *dataC);
// 測試函式
void test(void);

int main(void)
{
    test();	// 驅動測試

    return 0;
}

// 功能函式實現
void sort3data(int *dataA, int *dataB, int *dataC)
{
    int tmp;
    if (*dataA > *dataB)
    {
        tmp = *dataA;
        *dataA = *dataB;
        *dataB = tmp;
    }
    if (*dataA > *dataC)
    {
        tmp = *dataA;
        *dataA = *dataC;
        *dataC = tmp;
    }
    if (*dataB > *dataC)
    {
        tmp = *dataB;
        *dataB = *dataC;
        *dataC = tmp;
    }
}

// 測試函式實現 
void test(void)
{
    // 測試資料組織
    int a[6][3] = {
        {11, 22, 33},
        {11, 33, 22},
        {22, 11, 33},
        {22, 33, 11},
        {33, 11, 22},
        {33, 22, 11}};
    int i;
    for (i = 0; i < 6;i++)
    {
        sort3data(&a[i][0], &a[i][1], &a[i][2]);
        printf("%d,%d,%d \n", a[i][0], a[i][1], a[i][2]);
    }
}

測試結果

PS E:\clangstudy\class08> cd "e:\clangstudy\class08\" ; if ($?) { gcc 'c1三個數求大小2.c' -o 'c1三個數求大小2.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=utf-8 } ; if ($?) { &'.\c1三個數求大小2' }
11,22,33
11,22,33
11,22,33
11,22,33
11,22,33
11,22,33

相關文章