- 締切済み
や
複素数の和、差、積、商を計算できる関数を作成し、以下のような実行結果を実現できるプログラムを作成せよ。 但し、複素数の各値は任意に指定できるものとせよ。 <実行結果> 複素数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 である。
- kansai211
- お礼率0% (0/4)
- C・C++・C#
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Yune-Kichi
- ベストアンサー率74% (465/626)
たぶん,非標準機能は使っていないはず。 ただ,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を作成したいです. 今回は和差積商と絶対値,偏角,共役複素数まででよいのですが、解き方がわかりません。 よろしくお願いします
- 締切済み
- 科学
- 変数について(足し算・引き算)
#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 と表示されます。 変数で足し算や引き算を設定したものを引数として 使うと、値がおかしくなるのかを教えて頂けませんか。
- ベストアンサー
- C・C++・C#
- JAVAを勉強中です。
JAVAを勉強中です。 課題問題で、「コマンドライン引数から2つの整数値を入力して、その和、差、積、商を求めよ」と、 あります。 まったくわかりません。 初心者なので、分かりやすく教えてほしいのですが・・・。 お願いします。
- 締切済み
- Java
- 高校数学の複素数の範囲について
二次方程式の解を判別する問題で(kは定数とする) 2x^2-(k+2)x+k-1=0 の場合kは複素数の範囲ではなぜ考えてはいけないのでしょうか? 問題に 複素数の範囲で答えよ と記されていないからでしょうか? どのような場合に複素数の範囲で答えていいのかが疑問です。 また、 和が3、積が3である2数を求めろ という問題では虚数解で答えて大丈夫らしく… 2x^4-3x^3-x^2-3x+2を因数分解する問題では虚数解で答えてはいけなく どういう時に虚数解で答えていいのかがわかりません。 回答よろしくお願いします。
- ベストアンサー
- 数学・算数