課題5
 以下の課題に関するレポートを、buturi-johoshori@tiger.kobe-u.ac.jp
までメイルで送りなさい  
メイルのsubjectは、report5   とし 
レポートの一番最初に、氏名、学籍番号を記すこと
送付するのは、ソースコードのみ(実行ファイルは不要)
5−A:
    以下のプログラム report5a.c は、2次方程式
        X2 + BX + C = 0
 の解(実根のみ)を求めるプログラム( kadai5a.c
)である。プログラムの左端の数字は行を表すために付記している。
 プログラムとして使う場合は、消去するか上のリンクのファイルを用いよ。
 このプログラムは、コンパイルが通らない。
 ( gcc -lm -o kadai5a kadai5a.c )
    エラーは以下の通り
vostok2:~/joho-shori/lesson5 okubo$ gcc
-o kadai5a kadai5a.c 
report4a.c: In function 'main':
report4a.c:16: error: subscripted value is neither array nor pointer
report4a.c:17: error: subscripted value is neither array nor pointer
report4a.c: At top level:
report4a.c:23: error: parse error before "else"
report4a.c: に続く数字がプログラムの最初の行からの行数である。
 このプログラムの間違いを正せ。正したプログラムをレポートとして提出せよ。
report4a.c
1:    #include <stdio.h> 
2:    #include <math.h> 
3:    
4:    int main() 
5:    { 
6:      double b =10.0; 
7:      double c = 9.0; 
8:    
9:      printf("x^2 + %fx + %f = 0 ¥n",b,c); 
10:    
11:      double d, x1, x2; 
12:    
13:      d=(b*b-4*c); 
14:    
15:      if(d>0) { 
16:        x1=-b/2+sqrt[d]/2; 
17:        x2=-b/2-sqrt[d]/2; 
18:        printf("anwswer: x=%f, 
%f¥n¥n",x1,x2); 
19:    
20:      } else if (d==0) 
21:        printf("answer:  x=%f
¥n¥n",-b/2); 
22:    
23:      } else { 
24:        printf("No answer in real
number¥n"); 
25:     
26:      return 0: 
27:    } 
 Hint: 平方根を求めるためには、関数 sqrt (  )  を使用すること。
    この場合 
           
    #include <math.h>
    をプログラムの冒頭に記し、コンパイルには
           
    gcc -lm -o kadai5a kadai5a.c
            とすること。
5−B:
    2次方程式
           AX2 + BX
+ C = 0
    の解を
            実根 (重根)
            虚根
    の場合全てについて求めるプログラム(kadai5b.c)を作成せよ。
    (Aが 0 の場合も解を求めよ。)
 但し、係数A, B, C は標準入力より入力し(*1)、結果は標準出力(*2)に出力するものとする。
    *1:
 倍精度実数(double)変数aに、標準入力から値を読み込むには、以下のようなscanf関数を用いる。
            double a;
            scanf ("%f",
a);
    *2: 倍精度実数(double)変数aの値を標準出力へ出力するには、以下の様にprintfを使う。
            double a;
        printf("%f", a);
 
5−C:
    自然数 M, N (M, N<10000) の最小公倍数、最大公約数を求めるプログラムを作りなさい。
    但し、M, N は標準入力から読み込むものとする
    数学的背景:
        最大公約数の求め方: ユークリッドの互除法を用いる。
        (Greatest Common Divisor)
             
1.  入力を m, n とする。
             
2.  nが0なら、mを出力して終了
             
3.  nがmを割り切るなら nを出力してアルゴリズムを終了する
             
4.  そうでないならmをnで割った余りを新たにmとし、更に mと nを取り替えて3に戻る。
            このm が解
        最小公倍数の求め方:
        (Least Common Multiple)
           
    LCM = a * b / gcd