• ベストアンサー

結果の表示

よろしくお願いします。 プログラミングの勉強をしています。 座標上にx1、x2、y1、y2をとり、この2点間の距離が表示されるプログラムを作っています。 最終的には自分で座標を入力し、以下のように表示されることが目標です。 x1:0 y1:0 x2:1 y2:1 この2点間の距離は1.414214です。 次のように作ってみましたが、1.414・・・となるところが、0.0000・・・となってしまいます。どこを直したらよいでしょうか、お願いいたします。 #include <stdio.h> #include <math.h> main() { int x1 = 0, y1 = 0, x2 = 0, y2 = 0; double A = 0.0, dx = 0.0, dy = 0.0; A = sqrt(dx * dx + dy * dy); dx = x1-x2; dy = y1-y2; printf("x1:"); scanf("%d",&x1); printf("y1:"); scanf("%d",&y1); printf("x2:"); scanf("%d",&x2); printf("y2:"); scanf("%d",&y2); printf("この2点間の距離は%lfです\n", A); }

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

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

#include <stdio.h> #include <math.h> void main() { /* 俺はこの改行の方が落ち着く*/ int x1 = 0,y1 = 0,x2 = 0,y2 = 0; double A = 0.0,dx = 0.0,dy = 0.0; printf("x1:"); scanf("%d",&x1); printf("y1:"); scanf("%d",&y1); printf("x2:"); scanf("%d",&x2); printf("y2:"); scanf("%d",&y2); /* 処理順が滅茶苦茶。*/ dx = x1-x2; dy = y1-y2; A = sqrt(dx * dx + dy * dy); printf("この2点間の距離は%lfです\n", A); }

ichigo2007
質問者

お礼

いつもありがとうございます。 処理の順が違うんだろうと察しはついたのですが、いまいちそこがまだ理解できなくて、A = sqrt(dx * dx + dy * dy);だけをあちこち移動させてました。おかげさまで、今回も解決することができました。ありがとうございます。

その他の回答 (2)

回答No.3

>無意味な初期化 http://oshiete1.goo.ne.jp/qa3114398.html あー前回初期化したの、俺なんだよな、実は(汗 #警告出てても何かないと落ち着かなくてさ(汗 #でも根本的なところは前回から何も成長してないように見える

ichigo2007
質問者

お礼

すみませんね・・・ なるべく自分で作るようにと思って前回のを参照して作ってみましたが、やはり一人では限界がありまして・・・皆さんが親切に教えてくださるのでとても助かっています。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

Aを計算するのにdxとdyを使っているが,dxとdyの値はAの計算より後で行っている. そのため,dx,dyの初期値に対してAを計算している. 変数宣言の際に無意味な初期化をするからいけない. 初期化していなければ,コンパイルの際に警告が出た筈のコード.

ichigo2007
質問者

お礼

早々と回答いただき、ありがとうございます。 計算の順をいつも間違えてしまいます。いまいちまだ順番を理解していないようで、これからきちんと勉強して行きたいと思います。 ありがとうございました。

関連するQ&A