

はじめに、関数`swapd`を用いて，2つの実数値を小さいほうから`*num1`, `*num2`に格納しなおす
関数`sort2`を作成。その後，`sort2`を呼び出した上で，その結果を用いて実行例のように表示するプログラムを作成。

このような手順でプログラムを書きたいのですが、書き方がわかりません。

関数`swapd`で値の交換を行い、`sort2`ではその呼び出し（昇順に並べたいので`num1>num2`のときは`swapd(num1,num2)`と呼び出し、`num2>num1`のときは`swapd(num2,num1)`と呼び出すと思いました）をしたいのですが、どんな値を入力しても値が交換して出力されてしまいました。`sort2`での呼び出し方が間違っているのだとは思いましたが、どこが間違っているのかがわかりませんでした。（他にも間違っているかもしれません）

**実行結果**

[code]

    $./a.out 
    Input n1: 15.9
    Input n2: 11.1
    Before Sorting
    n1: 15.900000  :  n2: 11.100000  
    After Sorting
    n1: 11.100000  :  n2: 12.200000  
    
[/code]

**ソースコード**

[code]

    void swapd_double(double *num1,double *num2)
    {
        double tmp;
        tmp=*num1;
        *num1=*num2;
        *num2=tmp;
    }
    void sort2(double *num1,double *num2)
    {
        if(num1>num2){
         return swapd_double(num1,num2);
        } else if(num2>num1) {
            return swapd_double(num2,num1);
        }
    }
    
    double main(void)
    {
        double num1,num2;
        printf("Input n1: ");
        scanf("%lf",&num1);
        printf("Input n2: ");
        scanf("%lf",&num2);
    
        printf("Before Sorting\nn1:%f,n2:%f\n",num1,num2);
        sort2(&num1,&num2);
        printf("After Sorting\nn1:%f,n2:%f\n",num1,num2);
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-12-13T12:56:24.937
61418
2020-02-04T09:02:35.437
2019-12-14T11:39:07.607
36412
36412
question
c
2つの実数を昇順に並べるプログラム


「num1とnum2の値を入れ替える」の結果と「num2とnum1の値を入れ替える」の結果は同じです。したがって以下のコードだとif文のどちらに分岐しようが同じことをしています。

[code]

    if (num1 > num2){
        return swapd_double(num1, num2);
    } else if(num2 > num1) {
        return swapd_double(num2, num1);
    }
    
[/code]

いまやりたいのはnum1 <= num2となるように整列させることです。つまり、最初からnum1 <=
num2であった場合は何もする必要がありません。num2 < num1のときだけ入れ替える必要があります。よって下のような形のコードになります。

[code]

    if (num2 < num1) {
        // ここでnum1とnum2を入れ替える
    }
    return
    
[/code]


CC BY-SA 4.0
2019-12-14T13:04:58.417
61441
2019-12-14T13:04:58.417
19110
61418
answer


swapd_doubleという関数は、swapd_double(num1, num2);と書いてもswapd_double(num2,
num1);と書いても、２つを入れ替えるという意味ですよね。ですからnum1とnum2が同じ時以外は必ず入れ替わります。


CC BY-SA 4.0
2019-12-15T06:35:44.633
61453
2019-12-15T06:35:44.633
24490
61418
answer