4回目課題解答
課題1 これらの関数ができればよい.
Complex Cexp(Complex a) /*指数関数*/ { Complex z; z.re = pow(exp(1), a.re) * cos(a.im); z.im = pow(exp(1), a.im) * sin(a.im); return z; } |
Complex Cpow(Complex a, double n) /*べき乗*/ { double rad, ang; Complex z; rad = Cabs(a); ang = Carg(a); z.re = pow(rad, n) * pow(cos(ang),n); z.im = pow(rad, n) * pow(sin(ang),n); return z; } |
Complex Crt(Complex a, int n, int k) /*n乗根*/ { double rad, ang; Complex z; if(k > n-1){ printf("error:k\n"); exit(1); } rad = Cabs(a); ang = Carg(a); z.re = pow(rad, 1/n) * cos( (ang + 2 * k * M_PI) / n); z.im = pow(rad, 1/n) * sin( (ang + 2 * k * M_PI) / n); return z; } |
Complex Csqrt(Complex a) /*平方根*/ |
戻り値zは複素数型として返しているところが注目点
課題2 これらの関数ができればよい.
Complex Cinp(void) /*便利機能、入力*/ { Complex z; char c, s1[BUFSIZ], s2[BUFSIZ]; printf("実数部は?"); scanf("%s",s1); printf("虚数部は?"); scanf("%s",s2); z.re = atof(s1); z.im = atof(s2); return z; } |
複素数の実数部,虚数部を質問し, それぞれ実数部,虚数部に代入する. 実数部,虚数部を文字列として認識し, それを浮動小数点型に変換し,複数数型(構造体)の 実数部,虚数部に代入する. |
void Cdisp(Complex z) /*便利機能、出力*/ { printf("(re,im) = (%g,%g)",z.re,z.im); } |
複数数型変数zの実部及び虚部を表示する. |