[ quoted from ] 情報演習 課題C-A-1(※)一部抜粋・改変

課題
次のような C プログラムを作れ。

実数係数二次方程式 ax^2 + bx + c = 0 の、 a, b, c の値をキーボードから入力し、その実数解をすべて表示せよ。 (重解や解を持たない場合はそのことも表示すること。)

また、求めた解を方程式に代入して検算した結果も表示させよ。

Cのプログラムコードを印刷したものと、プログラムの実行結果を印刷したものを提出せよ。実行結果は少なくとも、 (1)解を2つ持つ場合、 (2)重解を持つ場合、 (3)解を持たない場合のそれぞれを少なくとも1通り以上含むこと。

去年の課題C-A-1の解説と同ページ「課題の進め方」を参考にしてください。

問題自体は非常に簡単ですが、色々と細かい指定があるので、問題文をよく読んでおいてください。基本的な流れをまとめると、次のようになります:

  1. double 型の a, b, c を scanf で入力
  2. 判別式 D = b^2 - 4ac を計算
  3. D の値で条件分岐 (if文)
    • (D > 0) 2解を表示し、それぞれ検算
    • (D == 0) 重解を表示し、検算
    • (D < 0) 解が存在しないことを表示
  4. 終了

解を求めるのに、数学関数 sqrt を使う必要があるので、プログラム冒頭で数学関数を使うことを宣言する必要があります:

#include <math.h>
 

またこのため、コンパイル時に"-lm"オプションをつける必要があります。

GNOME端末での入出力例
コマンド3 入力 gcc -lm quadratic_equation.c

プログラムができたら、ソースコードだけでなく各パターンでの実行結果も印刷して提出する必要があることをお忘れなく。

それから、問題では特に指示されていないので杞憂だとは思いますが、 a には 0 を入力できないようにした方がいいかもしれません(2次方程式故)。余力があれば考えてください。