- ベストアンサー
x^2+2x+1=0
x^2+2x+1=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を解きます。"); a=1; b=2; c=1; puts("a=1"); puts("b=2"); puts("c=1"); } void solve(double a,double b,double c) { double d; double x; d=b*b-4*a*c; printf("判別式d= %f\n",d); x=(-b+ sqrt(d))/(2*a); printf("二つの解のうち大きい方はx=%f\n",x); }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
input_keisuu関数でセットした係数が、 solve関数に渡っていません。 input_keisuu関数の引数は、各係数のアドレスにしてください。
その他の回答 (1)
- driverII
- ベストアンサー率27% (248/913)
#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を解きます。"); *a=1; *b=2; *c=1; puts("a=1"); puts("b=2"); puts("c=1"); } void solve(double a,double b,double c) { double d; double x; d=b*b-4*a*c; printf("判別式d= %f\n",d); x=(-b+ sqrt(d))/(2*a); printf("二つの解のうち大きい方はx=%f\n",x); }
お礼
早速の回答ありがとうございました。 解決できました。