• 締切済み

複素数の和、差、積、商を計算できる関数を作成し、以下のような実行結果を実現できるプログラムを作成せよ。 但し、複素数の各値は任意に指定できるものとせよ。 <実行結果> 複素数1の実数部を入力してください。 1 複素数1の虚数部を入力してください。 2 複素数2の実数部を入力してください。 3 複素数2の虚数部を入力してください。 4 演算の種類を選択してください。 和(複素数1+複素数2):1 差(複素数1-複素数2):2 積(複素数1*複素数2):3 商(複素数1/複素数2):4 1 計算結果は 4.000 +j 6.000 である。 <実行結果> 複素数1の実数部を入力してください。 2.3 複素数1の虚数部を入力してください。 4.6 複素数2の実数部を入力してください。 5 複素数2の虚数部を入力してください。 13 演算の種類を選択してください。 和(複素数1+複素数2):1 差(複素数1-複素数2):2 積(複素数1*複素数2):3 商(複素数1/複素数2):4 2 計算結果は -2.700 +j -8.400 である。 <実行結果> 複素数1の実数部を入力してください。 1 複素数1の虚数部を入力してください。 2 複素数2の実数部を入力してください。 3 複素数2の虚数部を入力してください。 4 演算の種類を選択してください。 和(複素数1+複素数2):1 差(複素数1-複素数2):2 積(複素数1*複素数2):3 商(複素数1/複素数2):4 3 計算結果は -5.000 +j 10.000 である。 <実行結果例4> 複素数1の実数部を入力してください。 1 複素数1の虚数部を入力してください。 2 複素数2の実数部を入力してください。 3 複素数2の虚数部を入力してください。 4 演算の種類を選択してください。 和(複素数1+複素数2):1 差(複素数1-複素数2):2 積(複素数1*複素数2):3 商(複素数1/複素数2):4 4 計算結果は 0.440 +j 0.080 である。

みんなの回答

回答No.1

たぶん,非標準機能は使っていないはず。 ただ,Digital Mars C/C++でしかチェックしていないので,非標準機能を本当に使っていない自信はなかったりしますが。 なお,U+0020二つをU+3000に置き換えています。 #include  <complex.h> #include  <math.h> #include  <stdio.h> #include  <stdlib.h> #include  <string.h> double get_double () {   char buffer[256];   _Bool new_line = 1;   while ((fgets(buffer, sizeof(buffer), stdin)) != 0) {     if (strlen(buffer) == 0) {       new_line = 1;       continue;     }     if (buffer[strlen(buffer) - 1] != '\n') {       // 255文字を超えるような入力があったら,一行分読み飛ばす       new_line = 0;       continue;     }     if (!new_line) {       new_line = 1;       continue;     }     char * ptr;     double val = strtod(buffer, &ptr);     if (ptr == 0 || *ptr != '\n') {       // 変換失敗っぽいときはやり直し       continue;     }     return val;   }   // 入力が途絶えたら強制終了   exit(EXIT_FAILURE); } int get_int_range(int min_value, int max_value) {   char buffer[256];   _Bool new_line = 1;   while ((fgets(buffer, sizeof(buffer), stdin)) != 0) {     if (strlen(buffer) == 0) {       new_line = 1;       continue;     }     if (buffer[strlen(buffer) - 1] != '\n') {       // 255文字を超えるような入力があったら,一行分読み飛ばす       new_line = 0;       continue;     }     if (!new_line) {       new_line = 1;       continue;     }     char * ptr;     long val = strtol(buffer, &ptr, 10);     if (ptr == 0 || *ptr != '\n') {       // 変換失敗っぽいときはやり直し       continue;     }     if (val < min_value || max_value < val) {       continue;     }     return (int)val;   }   // 入力が途絶えたら強制終了   exit(EXIT_FAILURE); } int main (void) {   puts("複素数1の実数部を入力してください。");   double val1 = get_double();   puts("複素数1の虚数部を入力してください。");   double val2 = get_double();   puts("複素数2の実数部を入力してください。");   double val3 = get_double();   puts("複素数2の虚数部を入力してください。");   double val4 = get_double();   // 二つの複素数に変換   double _Complex vals[2];   vals[0] = val1 + val2 * I;   vals[1] = val3 + val4 * I;   puts("演算の種類を選択してください。");   puts("和(複素数1+複素数2):1");   puts("差(複素数1-複素数2):2");   puts("積(複素数1*複素数2):3");   puts("商(複素数1/複素数2):4");   int op = get_int_range(1, 4);   double _Complex result;   switch (op) {   case 1:     result = vals[0] + vals[1];     break;   case 2:     result = vals[0] - vals[1];     break;   case 3:     result = vals[0] * vals[1];     break;   case 4:     result = vals[0] / vals[1];     break;   }   printf("%.3f + j%.3f\n", creal(result), cimag(result));   return 0; }

関連するQ&A

  • 2進数の商を他の演算で

    2進数の商の演算を他の演算(和や差、積)を使って求めることは可能でしょうか? もしあるとすれば、それはどういう方法ですか? 例えば、 10101(21) ÷ 11(3) = 111 (7) はどのようにすると他の演算で求まりますか? また、それを一般的に書けるなら、どのようにかけますか? 教えてください。宜しくお願いします。

  • 複素数の演算がわかりません

    複素数,[2-5i]と[3+4i]の和・差・積・商を求めよ となったとき,差と商の求め方がわかりません (差)座標上で,虚軸は実軸に垂直なので,符号を決めるのに関係ないと思いました. なので,実部が正になるように 3+4i-2+5i=1+9i かと思いました. しかし,答えには-1-9iとありました. どちらが正しいのですか? また,複素数の「差」とは絶対値を取ればいいのではないのですか? (商)このような問題が出たとき,どちらからどちらを割ればいいのかわかりません. 複素数には,書き方によるルールがあるのですか?

  • C言語について質問です

    複素数演算について各演算を作成し、関数を扱うために関数complex.cを作成したいです. 今回は和差積商と絶対値,偏角,共役複素数まででよいのですが、解き方がわかりません。 よろしくお願いします

  • 数学です

    和と積が等しく、差と商が等しいような2つの実数はあるでしょうか? ただし、差とは引き算の結果の絶対値と言う事で。 解があるらしいのですが、僕には解りません。お願いします。

  • 数II複素数

    2つの複素数a+biと2-3iの和が純虚数、積が実数となるように実数a,bの値を求める問題です。教えてください。

  • 複素数

    2つの複素数a+biと2-3iの和が純虚数、積が実数となるように、実数a,bの値を求めよ。 この問題を教えてください。

  • 群、環、体の定義に関する質問

    群→和 環→和、積 体→和、積、商 が定義されているわけですが、差はどれに定義されているのでしょうか?

  • 変数について(足し算・引き算)

    #include<stdio.h> main () { int i ; int j ; printf("第1の引数は?\n"); scanf("%d" , &i); printf("%d\n" , i); printf("第2の引数は?\n"); scanf("%d" , &j); printf("%d\n" , j); printf("和は、%d\n" , i+j); printf("差は、%d\n" , i-j); printf("積は、%d\n" , i*j); printf("商は、%d\n" , i/j); return; } これを実行すると(iを20 jを10)としたときに 和は、30 差は、10 積は、200 商は、2 と表示されます。 しかし、このようにプログラミングすると 足し算や、引き算の値が変になります。 #include<stdio.h> main () { int i ; int j ; int tashizann = i + j; int hikizann = i - j; int kakezann = i * j; int warizann = i / j; printf("第1の引数は?\n"); scanf("%d" , &i); printf("%d\n" , i); printf("第2の引数は?\n"); scanf("%d" , &j); printf("%d\n" , j); printf("和は、%d\n" , tashizann); printf("差は、%d\n" , hikizann); printf("積は、%d\n" , kakezann); printf("商は、%d\n" , warizann); return; } これを実行すると(iを20 jを10)としたときに 和は、257 差は、-255 積は、256 商は、0 と表示されます。 変数で足し算や引き算を設定したものを引数として 使うと、値がおかしくなるのかを教えて頂けませんか。

  • JAVAを勉強中です。

    JAVAを勉強中です。 課題問題で、「コマンドライン引数から2つの整数値を入力して、その和、差、積、商を求めよ」と、 あります。 まったくわかりません。 初心者なので、分かりやすく教えてほしいのですが・・・。 お願いします。

  • 高校数学の複素数の範囲について

    二次方程式の解を判別する問題で(kは定数とする) 2x^2-(k+2)x+k-1=0 の場合kは複素数の範囲ではなぜ考えてはいけないのでしょうか? 問題に 複素数の範囲で答えよ と記されていないからでしょうか? どのような場合に複素数の範囲で答えていいのかが疑問です。 また、 和が3、積が3である2数を求めろ という問題では虚数解で答えて大丈夫らしく… 2x^4-3x^3-x^2-3x+2を因数分解する問題では虚数解で答えてはいけなく どういう時に虚数解で答えていいのかがわかりません。 回答よろしくお願いします。

専門家に質問してみよう