- ベストアンサー
ポインタを使ったソートプログラム
#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; } ポインタを使ったソートプログラムを作ってみました。 ところが、コマンドプロンプトを使って動作させたら、 結果がうまく表示されませんでした。 どこがおかしいのか指摘していただけると嬉しいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関数sort3dの中で、3回目の比較と交換 if(*pa>*pc) { swap(pa,pc); } を、1回目と同じ if(*pa>*pb) { swap(pa,pb); } に変えてみたらどうでしょうか。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6289)
>結果がうまく表示されませんでした。 どういう結果を予想したのに対し、 実際にはどういう結果になったので、 「うまく表示されない」と判断されたのでしょうか。 具体的な説明が必要です。
補足
>どういう結果を予想したのに対し、 実際にはどういう結果になったので、 「うまく表示されない」と判断されたのでしょうか。 具体的な説明が必要です。 d1の値=0.01 d2の値=2.970 d3の値=3.140 となるのを予想したのにも関わらず、 私のコマンドプロンプトでは d1の値=120255674 d2の値=2432933 d3の値=1533443 とわけのわからない値が表示されてしまったのですが、 自己解決できました。出力文字は%dではなくて型がdouble なので、%lfを使わなければならなかったことに気付きました。 ありがとうございます。
- uta3
- ベストアンサー率70% (21/30)
>どこがおかしいのか指摘していただけると嬉しいです。 sort3d関数の最後のif文。 手前のif文までで、*pcに一番大きい値が入りますので必ず偽になりますよ。
お礼
回答ありがとうございました。 そうですね。三つ目のif文も明らかにおかしいですね。
お礼
回答ありがとうございました。 具体的にご指摘いただき光栄に思います。