参照呼出し
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 の中身の意味がない・・・・・・ポインタを使用する場面がよくわからないです。
あとこれで実行した場合、求めた解がおかしくなるのですが・・・そこの処理もよくわかりません
補足
PHP v6.0.0 snapshot 200803200630 ; The number of significant digits displayed in floating point numbers. precision = 12 ==========回答してもらったコードの実行結果============== 123 1230 12300 123000 1230000 1.23E+7 1.23E+8 1.23E+9 1.23E+10 #ちょっと今テキストエディタでトラブル発生中で、何らかのソースを書くのに難儀しているので補足簡潔になってます。 #書式指定子 Gも調べないと。 #>こちらの場合は問答無用で %6G というsprintfの書式を使っているっぽいです。 どこかでこの仕様が説明されている文献無いかな? jp2.php.netあたり見てもなかったような。 C言語のソース読まないと駄目かな・・・