今回は弊学の課題に出た、題名のプログラミングについて解説してみたいと思います。
念のため課題締め切り後にこのブログを公開しています。
やること
二次方程式「ax²+bx+c」としたとき、ユーザにa, b, cの値それぞれを入力させます。
それを以下の公式にのっとって計算し、解を出します。
x = (-b ± √(b²-4ac)) / 2a
また、解の形式は場合によってかわるので、判別式を先に計算する必要があります。
D = b²-4ac
D > 0の場合、2つの実数解、D = 0の場合、重解、D < 0の場合、2つの虚数解。
では早速プログラムを構成していきましょう。
導入・入力部分
#include <stdio.h>
#include <math.h>
int main(void){
double a, b, c;
printf("aを入力してください:");
scanf("%lf", &a);
printf("bを入力してください:");
scanf("%lf", &b);
printf("cを入力してください:");
scanf("%lf", &c);
}
まずは最初の導入部分です。今回は√をとるところがあるため、math.hもインクルードしています。
そして、それぞれscanfで値を入力してもらいます。
また、今回は実数にも対応するため、double型を使っています。
計算部分
#include <stdio.h>
#include <math.h>
int main(void){
double a, b, c, D, x1, x2;
printf("aを入力してください:");
scanf("%lf", &a);
printf("bを入力してください:");
scanf("%lf", &b);
printf("cを入力してください:");
scanf("%lf", &c);
D = (b * b) - (4 * a * c);
if(D < 0){
x1 = -b / (2 * a);
x2 = sqrt(fabs(D)) / (2 * fabs(a));
}else if (D > 0) {
x1 = (-b + sqrt(D)) / (2 * a);
x2 = (-b - sqrt(D)) / (2 * a);
}
else if (D == 0) {
x1 = -b / (2 * a);
}
}
計算部分を追加しました。最初の変数を定義するところでDとx1, x2が増えていることに注意してください。
±を使って表示してもよかったかもしれませんが、今回はx1,x2としてそれぞれ表示する感じにしたいと思います。
虚数解のところがよくわからない場合、以下の画像を参考にしてください
出力部分
最後に出力部分を追加して終了です。これが完成したコードです。#include <stdio.h>
#include <math.h>
int main(void){
double a, b, c, D, x1, x2;
printf("aを入力してください:");
scanf("%lf", &a);
printf("bを入力してください:");
scanf("%lf", &b);
printf("cを入力してください:");
scanf("%lf", &c);
D = (b * b) - (4 * a * c);
if(D < 0){
x1 = -b / (2 * a);
x2 = sqrt(fabs(D)) / (2 * fabs(a));
printf("x1 = %lf + i %lf\nx2 = %lf - i %lf\n", x1, x2, x1, x2);
}else if (D > 0) {
x1 = (-b + sqrt(D)) / (2 * a);
x2 = (-b - sqrt(D)) / (2 * a);
printf("x1 = %lf\nx2 = %lf\n", x1, x2);
}
else if (D == 0) {
x1 = -b / (2 * a);
printf("x = %lf\n", x1);
}
return 0;
}
出力形式も合せればこうなります。
多分もっといいやりかたがあるかと思いますが、ひとまずはこれで求めることができます。
以上、ありがとうございました。
0 件のコメント:
コメントを投稿