プログラミング入門 情報科学演習 実習課題 2016.12.05

Back to text page


実習課題

  1. 2重ループの基本

    以下のように表示するプログラムを作成しましょう.

    ( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 1, 8) ( 1, 9) ( 1,10)
    ( 2, 1) ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 2, 7) ( 2, 8) ( 2, 9) ( 2,10)
    ( 3, 1) ( 3, 2) ( 3, 3) ( 3, 4) ( 3, 5) ( 3, 6) ( 3, 7) ( 3, 8) ( 3, 9) ( 3,10)
    ( 4, 1) ( 4, 2) ( 4, 3) ( 4, 4) ( 4, 5) ( 4, 6) ( 4, 7) ( 4, 8) ( 4, 9) ( 4,10)
    ( 5, 1) ( 5, 2) ( 5, 3) ( 5, 4) ( 5, 5) ( 5, 6) ( 5, 7) ( 5, 8) ( 5, 9) ( 5,10)
    ( 6, 1) ( 6, 2) ( 6, 3) ( 6, 4) ( 6, 5) ( 6, 6) ( 6, 7) ( 6, 8) ( 6, 9) ( 6,10)
    ( 7, 1) ( 7, 2) ( 7, 3) ( 7, 4) ( 7, 5) ( 7, 6) ( 7, 7) ( 7, 8) ( 7, 9) ( 7,10)
    ( 8, 1) ( 8, 2) ( 8, 3) ( 8, 4) ( 8, 5) ( 8, 6) ( 8, 7) ( 8, 8) ( 8, 9) ( 8,10)
    ( 9, 1) ( 9, 2) ( 9, 3) ( 9, 4) ( 9, 5) ( 9, 6) ( 9, 7) ( 9, 8) ( 9, 9) ( 9,10)
    (10, 1) (10, 2) (10, 3) (10, 4) (10, 5) (10, 6) (10, 7) (10, 8) (10, 9) (10,10)
    

  2. 2重ループの基本その2

    以下のように表示するように変えましょう.

    ( 1, 1)
    ( 2, 1) ( 2, 2)
    ( 3, 1) ( 3, 2) ( 3, 3)
    ( 4, 1) ( 4, 2) ( 4, 3) ( 4, 4)
    ( 5, 1) ( 5, 2) ( 5, 3) ( 5, 4) ( 5, 5)
    ( 6, 1) ( 6, 2) ( 6, 3) ( 6, 4) ( 6, 5) ( 6, 6)
    ( 7, 1) ( 7, 2) ( 7, 3) ( 7, 4) ( 7, 5) ( 7, 6) ( 7, 7)
    ( 8, 1) ( 8, 2) ( 8, 3) ( 8, 4) ( 8, 5) ( 8, 6) ( 8, 7) ( 8, 8)
    ( 9, 1) ( 9, 2) ( 9, 3) ( 9, 4) ( 9, 5) ( 9, 6) ( 9, 7) ( 9, 8) ( 9, 9)
    (10, 1) (10, 2) (10, 3) (10, 4) (10, 5) (10, 6) (10, 7) (10, 8) (10, 9) (10,10)
    

    内側の for 文の式2がポイントです.
  3. 2重ループの基本その3

    これではいかがでしょう?

    ( 1, 1) ( 1, 2) ( 1, 3) ( 1, 4) ( 1, 5) ( 1, 6) ( 1, 7) ( 1, 8) ( 1, 9) ( 1,10)
            ( 2, 2) ( 2, 3) ( 2, 4) ( 2, 5) ( 2, 6) ( 2, 7) ( 2, 8) ( 2, 9) ( 2,10)
                    ( 3, 3) ( 3, 4) ( 3, 5) ( 3, 6) ( 3, 7) ( 3, 8) ( 3, 9) ( 3,10)
                            ( 4, 4) ( 4, 5) ( 4, 6) ( 4, 7) ( 4, 8) ( 4, 9) ( 4,10)
                                    ( 5, 5) ( 5, 6) ( 5, 7) ( 5, 8) ( 5, 9) ( 5,10)
                                            ( 6, 6) ( 6, 7) ( 6, 8) ( 6, 9) ( 6,10)
                                                    ( 7, 7) ( 7, 8) ( 7, 9) ( 7,10)
                                                            ( 8, 8) ( 8, 9) ( 8,10)
                                                                    ( 9, 9) ( 9,10)
                                                                            (10,10)
    

    内側の for 文が2つになります.
  4. 2重ループと乱数の組み合わせ

    1から9までの整数を乱数により10回発生させ,以下のようにその数値に相当する位置に * を表示するプログラムを作成しましょう.

       1 2 3 4 5 6 7 8 9
    1: *
    9:                 *
    4:       *
    7:             *
    5:         *
    5:         *
    6:           *
    1: *
    5:         *
    3:     *
    

  5. 完全数

    自分自身を除く約数の総和が自分自身と一致する数を「完全数」といい,6や28が該当します.では,3桁の完全数を探すプログラムを作成してみましょう.さらに4桁ではどうでしょうか?

    自分自身を除く,というのが,当然ですが大事です.
  6. 素数探索2

    3桁の正の整数を乱数により発生させ,その数未満の最大の素数とその数より大きい最小の素数を探すプログラムを作成しましょう.

    Random number: 537
    Maximum prime number below 537: 523
    Minimum prime number above 537: 541
    

    break を使わない方法で考えてみましょう.
  7. グラフィック表示

    ちょっと高度になりますが,三角関数を画面上に表示させてみましょう.

    C言語に用意されている三角関数である sin() cos() を使いますが,このときにはヘッダファイルとしてp.94の6.7節にあるように math.h をインクルードしなければいけません.

    また,コンパイル時にオプションも必要です.

    $ cc -lm hoge.c

    のように,math関数にlinkさせるオプションの lm を付けましょう.

    double 型の実数を利用しておよそ一周期分 sin cos を同時に表示させてみましょう.三角関数の引数は単位がラジアンなので,0から6.3くらいまでの範囲で描かせるときれいです.

                        O                   X
                              O            X
                                   O     X
                                    X   O
                               X           O
                         X                  O
                   X                       O
              X                          O
         X                            O
      X                          O
    X                      O
    X                O
      X        O
         XO
       O      X
    O               X
    O                     X
     O                          X
         O                           X
             O                           X
                  O                        X
                        O                   X
    

    上の例は角度を0から6.5radまで0.3rad刻みでプロットしています.行単位での表示しかできませんので,ちょっとおおざっぱですが,それでも三角関数には見えるでしょう.

    文字として画面に表示するので,表示位置は整数値しか扱えません.そのため,三角関数の値をプロットするためには特定の範囲の値になった時にXやOを表示することで実現できます.比較演算子 < > を使います.

  8. 3重ループ

    3重の for 文を使用して,以下のような表示を行なうプログラムを作 成しましょう.

    *
    
    *
    * *
    
    *
    * *
    * * *
    
    *
    * *
    * * *
    * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    * * * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    * * * * * * * *
    * * * * * * * * *
    
    *
    * *
    * * *
    * * * *
    * * * * *
    * * * * * *
    * * * * * * *
    * * * * * * * *
    * * * * * * * * *
    * * * * * * * * * *
    

    一番外側の for で3角形を何個描くかを決めます.図では10個の三角形があるので,10回繰り返すことになります.次の for 文で各三角形の形に関して,何行描くかを決めます.これは毎回違っていますので,その規則性を探します.最後に,一番内側の for 文で各行に何個星を描くかを制御します.これも行によって異なりますので,その規則性を探します.

Back to text page