• ベストアンサー

ポインタを使ったソートプログラム

#include<stdio.h> void swap(double *a,double *b) { double tmp; tmp=*a; *a=*b; *b=tmp; } void sort3d(double *pa,double *pb,double *pc) { if(*pa>*pb) { swap(pa,pb); } if(*pb>*pc) { swap(pb,pc); } if(*pa>*pc) { swap(pa,pc); } } int main(void) { double num1=3.14; double num2=2.97; double num3=0.01; sort3d(&num1,&num2,&num3); printf("d1の値=%.3d\n",num1); printf("d2の値=%.3d\n",num2); printf("d3の値=%.3d\n",num3); return 0; } ポインタを使ったソートプログラムを作ってみました。 ところが、コマンドプロンプトを使って動作させたら、 結果がうまく表示されませんでした。 どこがおかしいのか指摘していただけると嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

関数sort3dの中で、3回目の比較と交換 if(*pa>*pc) { swap(pa,pc); } を、1回目と同じ if(*pa>*pb) { swap(pa,pb); } に変えてみたらどうでしょうか。

rinnshan
質問者

お礼

回答ありがとうございました。 具体的にご指摘いただき光栄に思います。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>結果がうまく表示されませんでした。 どういう結果を予想したのに対し、 実際にはどういう結果になったので、 「うまく表示されない」と判断されたのでしょうか。 具体的な説明が必要です。

rinnshan
質問者

補足

>どういう結果を予想したのに対し、 実際にはどういう結果になったので、 「うまく表示されない」と判断されたのでしょうか。 具体的な説明が必要です。 d1の値=0.01 d2の値=2.970 d3の値=3.140 となるのを予想したのにも関わらず、 私のコマンドプロンプトでは d1の値=120255674 d2の値=2432933 d3の値=1533443 とわけのわからない値が表示されてしまったのですが、 自己解決できました。出力文字は%dではなくて型がdouble なので、%lfを使わなければならなかったことに気付きました。 ありがとうございます。

  • uta3
  • ベストアンサー率70% (21/30)
回答No.1

>どこがおかしいのか指摘していただけると嬉しいです。 sort3d関数の最後のif文。 手前のif文までで、*pcに一番大きい値が入りますので必ず偽になりますよ。

rinnshan
質問者

お礼

回答ありがとうございました。 そうですね。三つ目のif文も明らかにおかしいですね。

専門家に質問してみよう