- 締切済み
C言語の構造体の問題が分かりません
以下のソースコードを使って次の2つの問題に答えよ。というものです。 #include<stdio.h> #include<math.h> struct cartes{ double x,y; /*x-axis,y-axis*/ }; struct polar{ double r,th; /*radius,theta*/ }; struct cartes p2c(struct polar a) { struct cartes d; d.x=a.r*cos(a.th); d.y=a.r*sin(a.th); return d; } struct polar c2p(struct cartes b) { struct polar e; e.r=sqrt(b.x*b.x+b.y*b.y); e.th=atan(b.y/b.x); return e; } void main(void) { struct cartes c; struct cartes c1={1,1},c2={1,1.7320508},c3={1.7320508,1}; struct polar p1,p2,p3; struct polar p={1.41421356,0.7853982}; p1=c2p(c1); p2=c2p(c2); p3=c2p(c3); c=p2c(p); printf("radius=%lf, theta=%lf(radians)\n",p.r,p.th); printf("x-axis=%lf, y-axis=%lf\n",c1.x,c1.y); printf("radius=%lf, theta=%lf(radians)\n",p2.r,p2.th); printf("x-axis=%lf, y-axis=%lf\n",c.x,c.y); } 1.2次元直行座標における2点の座標を与えられて、2点間の距離を求める関数を作り、正しく動作するようにせよ。 2.複素数を構造体として定義せよ。次に2つの複素数変数を受けてその和、差、積、商を求める関数を作り、正しく動作するようにせよ。 以上2つの問題についてソースコードを書いてご説明いただければ幸いです。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
わざわざ自分で作らなくても hypot は標準でありますけどね>#5.
- akayoroshi
- ベストアンサー率50% (46/91)
>#4 浮動小数点数指数桁あふれにまで配慮するなら、どんな実装になっているかわからない標準関数よりも、参照URLにあるようなMoler-Morrisonのアルゴリズムを使って double hypot(double p, double q) { double r, s; if (p < 0) p = -p; if (q < 0) q = -q; if (p < q) { r = p; p = q; q = r; } if (p == 0) return 0; for (;;) { r = q / p; r *= r; s = r + 4; if (s == 4) return p; r /= s; p += 2 * r * p; q *= r; } } double distance( struct cartes c1, struct cartes c2 ) { return hypot(c1.x-c2.x, c1.y-c2.y); } ではどうでしょうか。
- Tacosan
- ベストアンサー率23% (3656/15482)
/* いろいろ省略 */ #include <float.h> int main(void) { struct cartes c1 = { DBL_MAX/2, DBL_MAX/2 }, c2 = { 0, 0 }; double len = distance(c1, c2); printf("%f\n", len); return 0; } が, たぶん正しく動かんのよ>#3. その辺も含めて壊れてるんで.
- akayoroshi
- ベストアンサー率50% (46/91)
1. double distance( structr cartes c1, struct cartes c2 ) { cartes c={c1.x-c2.x,c1.y-c2.y}; if (c.x==0.0) return fabs(c.y); else return c2p(c).r; } 説明:x座標に差がないとき、「正しく動作するように」とのことなので、ゼロでの除算を避けるためにc2pを使わないようにしました。それ以外のときは2つのベクトルの差の絶対値を求めています。
- Tacosan
- ベストアンサー率23% (3656/15482)
3. このプログラムに含まれる問題点を挙げ, 解消する方法を示せ ってのがあったりして.
- black2005
- ベストアンサー率32% (1968/6046)
で、どこがわからないの? C言語以前に数学がわからないのでは?