質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

8365閲覧

C言語で二次方程式でそれぞれの答えを表示するプログラム

ylr70764

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/05/23 07:59

編集2020/05/23 22:51

前提・実現したいこと

C言語
Microsoft Visual Studioで二次方程式を求めるプログラムを作成しています。
ax^2+bc+c=0の実数係数a,b,cを入力して答えx1 x2 を表示するというものです
そして条件があり、答えが異なる実数の時はx1,x2(これまできました。)
重解の時はx=3(重解)と例のように表示、 複素数解のときはx=4+5i,4-6iのような例で表示する。

下は作成したプログラムです。ですが重解と複素数解がまったくできていません 
ご協力お願いします

追記:具体的に書いておりませんでした 申し訳ありません
重解と複素数解をどう書くかがうまくいっていないのでこの2つの問題を解決したいです。

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<math.h>

int main(void)
{
float a, b, c;
float d; /判別式/
float kai1, kai2; /2次方程式の解/
float real, imag; /2次方程式の虚数解/

printf("2次方程式の係数a,b,cを入力して下さい。\n"); printf("a -->"); scanf("%f", &a); printf("b -->"); scanf("%f", &b); printf("c -->"); scanf("%f", &c); /*判別式の計算*/ d = b * b - 4 * a * c; if (d > 0) { kai1 = (-b + sqrt(d)) / (2 * a); kai2 = (-b - sqrt(d)) / (2 * a); printf("x= %.3f , %.3f ---異なる実数解\n", kai1, kai2); } return 0;

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/05/23 10:02

> ご協力お願いします なにをすればいいですか?
episteme

2020/05/24 01:47

> 重解と複素数解をどう書くかがうまくいっていないのでこの2つの問題を解決したいです。 重解 : 判別式 d == 0 のとき, コタエ -b/(2a) 複素数解 : 判別式 d < 0 のとき, コタエ -b/(2a) ±√(-d)/(2a)i
guest

回答2

0

解の公式そのまま適用すれば済む話です。判別式が負である場合は、√(-p) = √(p)i (p > 0)を利用して虚数にすればいいだけの話です。
ただし、2進数の浮動小数点を扱っているので、0か否かの判定は注意すべきかと思います。
なお、aが0の時はそもそも二次方程式ではなくなるので、別途処理が必要になります。

投稿2020/05/24 00:29

swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下のようにelse ifとelseで重複と虚数解の計算と出力を実数解の処理を参考に作成します。
誤差の許容範囲をMY_EPSILONで表すようにしました。

C

1#define MY_EPSILON 1.0e-10 2 3d = b * b - 4 * a * c; 4if(-MY_EPSILON < d && d < MY_EPSILON) d = 0; 5 6if (d > 0) { 7 8kai1 = (-b + sqrt(d)) / (2 * a); 9kai2 = (-b - sqrt(d)) / (2 * a); 10 11printf("x= %.3f , %.3f ---異なる実数解\n", kai1, kai2); 12 13} 14else if (d == 0) { 15//重複の計算と出力 16} 17else { 18//虚数解の計算と出力 19}

投稿2020/05/23 12:21

編集2020/05/24 02:31
etsuhisa

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2020/05/23 21:58

浮動小数点型に対して==での判別は要注意だと思いますが。
etsuhisa

2020/05/24 02:31

忘れていました。回答に追記しました。ありがとうございました。
ylr70764

2020/05/24 10:00

とても丁寧にありがとうございます!本当に助かりました。 重ねてありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問