アプリ版:「スタンプのみでお礼する」機能のリリースについて

キーボードからある整数の値を入力して、2次方程式を解くというプログラムを作ったのですが、解の方程式のところでどこかが足りないらしいのですが教えてください。

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

int quadraticEquation(double a, double b, double c){

int x,y,l,k,j;
double z;
x=b*b;
y=4*a*c;
z=x-y;

if(z>=0){
l=sqrt((double)z);
}
else
printf("ERROR!!\n");


k=(-b)+l;
j=k/2*a;
return j;
}


int main(void){

int n1,n2,n3;
printf("input three integer!\n");
printf("intger1:"); scanf("%d",&n1);
printf("intger2:"); scanf("%d",&n2);
printf("intger3:"); scanf("%d",&n3);

printf("kotaeha %d %d desu\n",quadraticEquation(n1, n2, n3),quadraticEquation(n1, n2, n3));

return 0;
}

が自分が作ったプログラムです。
後、解が2つある場合の出力方法がこれであっているかどうかも教えてください。

よろしくお願いします。

A 回答 (2件)

a,b,c,zがdoubleであることの意味が不明(mainから)


x,y,l,k,jがintである意味が不明

sqrtが返すのはdouble
zはdouble宣言なのでキャストの意味なし

elseでreturnしないと後が怖い

キ・キケン
k/2 の前にkが0でないか確認
もしくは k*0.5

j=(sqrt(b*b-4*a*c)-b)*0.5*a; ?
intで処理しようとするのは無謀では?
kが奇数の場合の仕様は?

quadraticEquationは1つの整数しか返してないのに
あってるわけない・・・


何を求めたいか・どこまで習っているのかわからないが・・・

int quadraticEquation(int n1, int n2, int n3, double *kai1, double *kai2){
if(計算できない場合)return -1;
*kai1=(解からない)
*kai2=(解からない)
return 0;
}

int main(void){
(略)
if ( quadraticEquation(n1,n2,n3,&kai1,&kai2) == 0 )
printf(略)
else
printf("ERROR!!\n");
return 0;
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。指摘されたところを中心にもう一度考えてみます。私が求めたいのは2次方程式を解くというプログラムを作りたかったのですが、関数の引数は指定されているので、自分の乗せたプログラムの関数の場合のヒントを頂けたら嬉しいです。

お礼日時:2009/06/05 00:30

2次方程式とは"ax^2+bx+c=0"のことでしょうか?


解の求め方など大昔に忘れてしまったので
それについては触れたくありません。

2次方程式が"ax^2+bx+c=0"とは限らないので
"a+b+c"と"a-b-c"が求めたいとかでないと
解からないです。自分は。


引数が指定されているならば、mainで入力する
3つの数値は引数と同じdouble型にするべきかと。

戻り値もintに指定されているのでしょうか?
それならば出力をmainで行うのは無理です。

戻り値が指定されていないなら求めた2つの数値を
返す方法はありますが、課題である以上
習っていないであろうヒントは出しづらいです。
出力はquadraticEquationで行うほうが無難でしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!