• ベストアンサー

関数のプログラムについて

任意の二次方程式ax^2+bx+c=0をとくプログラムの作成です 引数をa,b,cとして、解の大きい方を返すというものなのですが、 僕は以下のようにして組んだのですが、うまくいきません。 と、いうより、関数の作り方がいまいちわからないです。 どこが駄目なのか教えてください。 作ってみたやつ↓ #include<math.h> #include<stdio.h> int a,b,c; double d; double x,y,z; int main(void) { a=1; b=2; c=1; printf("ax^2+bx+c=0\n "); d=b^2-4*a*c; if (d<0){printf("kyosuukai\n)} else if(d>=0) { x=(b+sqrt(b^2-4*a*c))/2*a; y=(b-sqrt(b^2-4*a*c))/2*a; if(x>=y){z=x} else if(x<y){z=y} printf("x= %f\n",z); } }

質問者が選んだベストアンサー

  • ベストアンサー
noname#22058
noname#22058
回答No.5

失礼。問題の趣旨に添っていませんでした。 #include <stdio.h> #include <math.h> void input_keisuu(double *a, double *b, double *c); void solve(double a, double b, double c); int main(void) { double a, b, c; input_keisuu(&a, &b, &c); solve(a, b, c); return 0; } void input_keisuu(double *a, double *b, double *c) { puts("二次方程式 a*x^2+b*x+c=0 を解きます"); puts("係数a, b, cを入力してください"); printf("a="), scanf("%lf", a); printf("b="), scanf("%lf", b); printf("c="), scanf("%lf", c); putchar('\n'); } void solve(double a, double b, double c) { double d = b * b - 4 * a * c; double x; if (d >= 0) { x = (-b + sqrt(d)) / (2 * a); printf("2つの実数解のうち大きいのは=%f\n", x); } else puts("虚数解です"); }

その他の回答 (4)

noname#22058
noname#22058
回答No.4

a==0の場合なんかは端折ってあります。 #include <stdio.h> #include <math.h> void input_keisuu(double *a, double *b, double *c); void solve(double a, double b, double c); int main(void) { double a, b, c; input_keisuu(&a, &b, &c); solve(a, b, c); return 0; } void input_keisuu(double *a, double *b, double *c) { puts("二次方程式 a*x^2+b*x+c=0 を解きます"); puts("係数a, b, cを入力してください"); printf("a="), scanf("%lf", a); printf("b="), scanf("%lf", b); printf("c="), scanf("%lf", c); putchar('\n'); } void solve(double a, double b, double c) { double d = b * b - 4 * a * c; double x1, x2, re, im; if (d >= 0) { x1 = (-b + sqrt(d)) / (2 * a); x2 = (-b - sqrt(d)) / (2 * a); printf("x1=%f\n", x1); printf("x2=%f\n", x2); } else { re = -b / (2 * a); im = sqrt(-d) / (2 * a); printf("x=%f±%fi\n", re, im); } }

noname#39970
noname#39970
回答No.3

「^」は ビット演算子 よって ax^2+bx+c=0  →  ax*ax+bx+c=0

  • rom_exe
  • ベストアンサー率44% (13/29)
回答No.2

 こんにちは ^^  ええと,まず, ・if (d<0){printf("kyosuukai\n)} に"が足りない. ・x=(b+sqrt(b^2-4*a*c))/2*a; の^はC言語では使えない.  (b*bと書くか,pow(b,2)と書いて下さい. ・x=(b+sqrt(b^2-4*a*c))/2*a; の/2*aはこのままでは *(1/2)*(a)になってしまう.  ( /(2*a)とカッコでくくって下さい. ・else if(x<y){z=y} で(x<y)となることは無い.  でも一番問題なのは関数になっていないことではないでしょうか.  関数についてこの辺り↓で勉強して下さい. http://wisdom.sakura.ne.jp/programming/c/c26.html

参考URL:
http://wisdom.sakura.ne.jp/programming/c/c26.html
回答No.1

>x=(b+sqrt(b^2-4*a*c))/2*a; >y=(b-sqrt(b^2-4*a*c))/2*a; たぶん、 y=(-b+sqrt(b*b-4+a+c))/(2*a) じゃないですかね? c言語で^は反転です。 例えば 1^2=3 2^2=0 4^2=6 8^2=10 15^2=13 となります。 あと、分母の括弧を忘れると計算が正しく出来ないので気をつけましょう。

関連するQ&A