IEにおいて、[Math Processing Error] となって数式等が正しく表示されないときは、互換表示をOFFにすること!

2次方程式を解く関数

 実数係数の2次方程式$ax^2+bx+c=0\ (a\ne 0)$を実数の範囲で解く関数を作る。
プログラムの中で何度も何度も2次方程式を解く必要があるとすれば、関数を作っておくのが便利です。

  2次方程式を解く関数qeq()の仕様

  1. 係数 a, b, c を float で受ける
  2. 解の格納場所 x1p, x2p を float * で受ける
  3. 戻り値はintで実数解の個数とし、判別式 D の符号によって、 ものとする

 プログラム

/* 連続的に2次方程式を解くプログラム */
#include <stdio.h>
#include <math.h>

main()
{
	int	qeq( float a, float b, float c, float *x1p, float *x2p );
	float	a, b, c, x1, x2;

	for(;;) /* 無限ループ */
	{
		printf("2次方程式 ax^2 + bx + c = 0 を解きます\n");
		printf("係数 a, b, c を入力して下さい(a=0の時終了します):");
		scanf("%f %f %f", &a, &b, &c );

		switch( qeq( a, b, c, &x1, &x2 ) )
		{
		case 2:
			printf("%f, %f\n", x1, x2 );
			printf("の2実根。\n");
			continue;
		case 1:
			printf("%f\n", x1 );
			printf("の重根。\n");
			continue;
		case 0:
			printf("実数解なし。\n");
			continue;
		case -1:
			printf("2次方程式ではありませんでした。終了します。\n");
			break;
		}
		break;
	}
}

/*
main()の中で定義された自動(auto)変数の a, b, c と、
qeq()の仮引数(qeqの自動変数と同じ記憶クラス)の a, b, c は、
それぞれ全く別のメモリ領域が割り当てられる、別の変数である。
*/

/* 2次方程式を解く関数 */
int	qeq( float a, float b, float c, float *x1p, float *x2p )
{
	/* さー考えよう! */

}
/* end of feq.c */