タイトル通り、a、b、cを入力させて、ax^2+bx+c=0の解xを求めたいのですが、結果をどう求めればいいのか、実解・虚数解・重解の場合をどうしたらいいのか、の2点がよくわかりません。
#include<math.h>
#include<stdio.h>
double sqrt(double a,double b,double c)
{
return (b*b-4*a*c);
}
main(void)
{
double a,b,c,sqrt,ans;
do{
printf("ax^2 + bx +c = 0 の解 x を求めます。\n a,b,cを入力してください。\n");
printf("a : "); scanf("%lf",&a);
printf("\nb : "); scanf("%lf",&b);
printf("\nc : "); scanf("%lf",&c);
if(a = 0){
printf("a は0以外を入力してください。\n");
}
}while(a = 0);
ans = (-b+dist(a,b,c))/(2*a);
printf("%lf", ans);
printf("\n");
return(0);
}
他にも多々ダメな部分があると思いますがご指摘・アドバイス等いただけたらと思います。よろしくお願いします。
No.3
- 回答日時:
課題のようなので、少し意地悪をすると...
> printf("%lf", ans);
%lfを使っているということはC99だと思います。
C99であれば、
int quadratic(double complex ans[2], double a, double b, double c)
{
double D = b*b - 4*a*c;
ans[0] = (b + csqrt(D)) / (2 * a);
ans[1] = (b - csqrt(D)) / (2 * a);
return (D > 0) - (D < 0);
}
のように複素数型を使えば、虚数解でも普通に計算できるので便利です。
No.2ベストアンサー
- 回答日時:
while(a=0);
は、
while(a==0.0);
だと思います。
#1の方と同じだけど
sqrtがdistの間違い
ans = (-b+dist(a,b,c))/(2*a);
が
distの前にsqrtが要る
ans = (-b+sqrt(dist(a,b,c)))/(2*a);
ans = (-b-sqrt(dist(a,b,c)))/(2*a);
の2つの場合を考えないといけない。
distの値で
0:重解
-:虚数解
+:実解
のように場合分けしないといけない
たくさん間違えていてすみません。ご指摘ありがとうございました。
場合わけも具体的に考えたらすぐわかることでしたね。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語のマクローリン展開ローラン展開のコードについて 3 2022/12/15 14:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
c言語で、繰り返し文の中で、0....
-
doubleの変数にintとintの割り...
-
C++で外積
-
float型とdouble型の変数の違い...
-
c言語のコンパイルエラー canno...
-
C言語の型による処理速度の違い
-
C 開放してるのにエラー(doubl...
-
関数におけるif文とreturn文に...
-
-1.#IND00と出てしまうのですが...
-
MATLAB:多数の画像を取り込み...
-
doubleは常に%lfとするべきなのか
-
^この記号を使わない
-
微分方程式(ルンゲ=クッタ)...
-
指数の表示
-
至急です! マクロ定義で #defi...
-
C言語初心者 構造体 課題について
-
difftime()について
-
atan2 オーバーロード関数の呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報