- 締切済み
学校の課題で2次方程式のプログラムを作ってみたのですが、足りない部分ががあるらしいのでお教えてください
キーボードからある整数の値を入力して、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つある場合の出力方法がこれであっているかどうかも教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- stingy
- ベストアンサー率37% (144/379)
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で行うほうが無難でしょう。
- stingy
- ベストアンサー率37% (144/379)
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; }
お礼
回答ありがとうございます。指摘されたところを中心にもう一度考えてみます。私が求めたいのは2次方程式を解くというプログラムを作りたかったのですが、関数の引数は指定されているので、自分の乗せたプログラムの関数の場合のヒントを頂けたら嬉しいです。