二次関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
saaya

二次関数について

#1

投稿記事 by saaya » 11年前

失礼します。
二次関数の解を求めるプログラムを作りたいのですが、
いざ係数を入力してみると全く違う結果が出てきました。
もしよろしければどこが間違っているのか教えてください。
以下が私が書いたものです。
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[]) {
double a, b, c, d, y1, y2, y3;
printf("ax^2 + bx + c = 0\n");
printf("係数の値を入力してください");
scanf("%lf", &a, &b, &c);
d = ( b * b ) - ( 4 * a * c );
if ( d > 0 ) {
y2 = ( -1 * b + sqrt(d) ) / ( 2 * a );
y3 = ( -1 * b - sqrt(d) ) / ( 2 * a );
printf("x1 = %lf, x2 = %lf", y2, y3);
}
else if( d == 0 ) {
y1 = ( -1 * b ) / ( 2 * a );
printf("x = %lf [重解]", y1);
}
else {
printf("実数解はありません");
}
return 0;
}

よろしくお願いします

アバター
usao
記事: 1887
登録日時: 11年前

Re: 二次関数について

#2

投稿記事 by usao » 11年前

>scanf("%lf", &a, &b, &c);
多分ここかな

初級者
記事: 200
登録日時: 13年前

Re: 二次関数について

#3

投稿記事 by 初級者 » 11年前

書式文字列の内容と
読み込みたい変数の数とが
対応していない、というのは
他の回答者さんの書かれたとおりです。

ちなみに、二次関数の解ではなく、
二次方程式の解です。

box
記事: 2002
登録日時: 13年前

Re: 二次関数について

#4

投稿記事 by box » 11年前

saaya さんが書きました:

コード:

int main(int argc, const char * argv[]) {
これでも間違いではありませんが、 argc や argv を一切使っていませんので、

コード:

int main(void)
でじゅうぶんだと思います。使わない変数は定義しない、というポリシーです。
saaya さんが書きました:

コード:

	y2 = ( -1 * b + sqrt(d) ) / ( 2 * a );
これでも間違いではありませんが、 -1 * b の部分は -b と書くのが普通でありましょう。
簡単に書けるところは簡単に書く、というポリシーです。
saaya さんが書きました:

コード:

	printf("x1 = %lf, x2 = %lf", y2, y3);
printfでdouble型の変数を出力する際の書式文字列は %f だと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

saaya

Re: 二次関数について

#5

投稿記事 by saaya » 11年前

できました!!
様々なアドバイス、本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る