参照呼出し
2 次方程式 x^2 + ax + b = 0 の実数解を求め,画面表示するというプログラムで、係数a,b を 実数型で宣言し。関数をint solve( float, float, float *, float * )というプロトタイプで
(第1引数x の係数 , 第2引数: 定数項, 第3 引数: 第1 解へのポインタ,第4 引数: 第2 解へのポインタ,返り値: 解の個数
)
画面表示のさいに関数からの返り値を利用
というプログラムを組みたいのですが・・・・。
#include <stdio.h>
#include <math.h>
int solve( float, float, float *, float * );
int main ( void ){
float a, b;
float *p, *q;
float answer_no1, answer_no2;
int number;
printf("a = ");
scanf("%f",&a);
printf("b = ");
scanf("%f",&b);
answer_no1 = ( (-a + sqrt(a*a-4*b)) / 2 );
answer_no2 = ( (-a - sqrt(a*a-4*b)) / 2 );
//解の公式を使ってx = -a +- √a^2-4ac
p = &answer_no1;
q = &answer_no2;
number = solve( a, b, p, q );
printf("a = %f, b = %f\n", a, b);
printf("answer = %f, %f\n",*p, *q );
printf("解の個数は%d\n",number);
return(0);
}
int solve ( float a, float b, float *c, float *d ){
int number,e;
e =a*a - 4*b;//Dを判別式として定義(ここを*c,*dを用いて定義?がわからない・・・・・。
if(e > 0){
number = 2; //D>0なら実数解2個
}
else if(e == 0){
number = 1; // D=0なら実数解1個(重解)
}else{
number = 0;
}
return number;
}
しかしこれでは関数int solve の中身の意味がない・・・・・・ポインタを使用する場面がよくわからないです。
あとこれで実行した場合、求めた解がおかしくなるのですが・・・そこの処理もよくわかりません
お礼
早速のご回答ありがとうございました.私も修正後,255になったことを確認できました. ということは,関数へのポインタの宣言では,「float (*func)(float);」のように引数の型を入れる必要があったのですね.(参考にしていたCの本では,たまたま()のように引数が空欄になっていましたので,そのまま記述してしまっていました.) おかげさまで助かりました.