[サイトマップ] [トップページ]

トップページ > 授業のページ > コンピュータプログラミングII >
プログラミング課題


更新日
5/16 Fri 10:35

第5回課題

  1. [pe5-1.c] (必須) 1 年間の日数を, 各月の日数から計算して出力するプログラムを作りなさい。 各月の日数は,プログラム内で配列に格納しておくこと。 合計の計算には for ループを用いること。 なお,2 月の日数は 28 日(うるう年でない)とする。

  2. [pe5-2.c] (必須) キーボードから入力した10個以内の整数を逆順に出力(表示)するプログラムを作成しなさい。 ただし,このプログラムは,最初に,整数の個数をキーボードから読み込み,続いて与えられた個数の整数を読み込むものとする。 例えば,4 個の整数 11, 5, 13, 27 を与えるには 4 11 5 13 27 と入力する (入力値は改行で区切ってよい)。 ここで 4 は int 型の通常の変数に,11, 5, 13, 27 は配列に格納する。

    さらに,用意した配列の範囲外を利用しないように, 例えば次のようなコードで,必ず適切な入力値であることのチェックを行うのが望ましい。

    if (n > ARRAYSIZE) {
      printf("Too many integers\n");
      return 1;	
    }
    
    ここで n は入力する整数の個数であり, ARRAYSIZE は配列の要素数として使用されている記号定数とする。

    実行例 1:

    4
    11 5 13 27
    27 13 5 11
    

    実行例 2:

    11
    Too many integers
    

  3. [pea5-1.c] 二つのサイコロを振って出目の和を求めるサイコロ振りシミュレーションを 200 回行って, 2 から 12 までの各目が出た回数,割合(%),ヒストグラムを出力するプログラムを作りなさい。 プログラムを実行する度にサイコロ振りの結果が変わるプログラムにすること。 見やすい出力となるように工夫すること。



5/2 Fri 14:00

第4回課題

  1. [pe4-1.c] (必須) 下記のプログラムに対して,次の操作を順に行いなさい。

    1. 実行結果を予想してから,プログラムを実行してみなさい。
    2. 関数 count 内の変数 i の宣言部分を int i = 0; に変更しなさい。 実行結果を予想してから,実行しなさい。
    3. 関数 count が 1 から 10 までの整数を main に返し, それが表示されるようにプログラムを変更しなさい。 ただし,変更は関数 count の本体のみとする。

    #include <stdio.h>
    
    int count(void);
    
    int main()
    {
        int i;
    
        for (i = 1; i <= 10; i++) {
            printf("Loop #%d: " , i);
            printf("count() returned %d\n", count());
        }
    
        return 0;
    }
    
    
    int count(void)
    {
        int i;
    
        printf("count() prints %d; ", i);
    
        return ++i;
    }
    

  2. [pea4-1.c] (必須) 講義資料のリスト 1.8 等を参考に, キーボードから入力した整数の階乗を再帰呼出しによって求める過程と結果を, 次の実行結果例のように出力するプログラムを作りなさい。

    実行結果例(プログラムの実行後にキーボードから 3 を入力した場合)
    3
    factorial(3) called.
    factorial(2) called.
    factorial(1) called.
    1 returned by factorial(1).
    2 returned by factorial(2).
    6 returned by factorial(3).
    3! = 6
    

    プログラムは次の動作をするように作ること。

    • 関数 main は,キーボードから整数 n を読み込み, その階乗を関数 factorial の呼び出しによって求めて 「n! = n の階乗」の形式で表示する。
    • 関数 factorial は,呼び出される度に 「factorial(n) called.」 と出力し, 計算結果を返す前に 「nの階乗 returned by factorial(n)」 と出力する。 ここで n は factorial が受け取った引数の値である。

      この動作のためには,関数 factorial は戻り値を return で返す前に一度変数に格納しておく必要があるため,次の定義を参考にするとよい。

      long factorial(long n)
      {
          long ret;
      
          if (n <= 1)
              ret = 1;
          else
              ret = n * factorial(n - 1);
      
          return ret;
      }
      

  3. [pea4-2.c] キーボードから入力する正の整数を変数 n に読み込んで 1 + 2 + ... + n を求めて表示するプログラムを作りなさい。ただし,再帰関数を作成して使うこと。



4/25 Fri 09:50

第3回課題

  1. [pe3-1.c] (必須) 3つのサイコロを振って,出目の和が 偶数ならば Even と表示し, 奇数ならば Odd と表示するプログラムを作りなさい。

    プログラムではサイコロ振りを行う関数 roll3dice を定義すること。 roll3dice は三つのサイコロ振りを乱数で模擬し,合計を返すように定義すること。 また,roll3dice の本体では,各サイコロの出目を表示させること。

    関数 main では,関数 roll3dice を呼び出し,戻り値が 2 で割り切れるかどうかによって, サイコロの出目の和が偶数か奇数かを表示させること。

  2. [pe3-2.c] (必須) 課題 1 のプログラムを次の三つのファイルに分割し,コンパイルして実行しなさい。
    • 関数 main の定義: pe3-2.c
    • 関数 roll3dice の定義: pe3-2-sub.c
    • 関数 roll3dice のプロトタイプ宣言(ヘッダファイル): pe3-2.h

  3. [pea3-1.c] 変数 m と n に正の整数を読み込んで,m から n の間に存在するすべての自然数について,その逆数の和 1/m + 1/(m + 1) + ... + 1/(n - 1) + 1/n を求めるプログラムを作りなさい。和は関数 interval_sum に求めさせること。



4/18 Fri 12:03

第2回課題

  1. [pe2-1.c] (必須) 画面に Hello World! と表示するプログラムを作りなさい。 ただし, 画面に Hello World! と表示して改行する関数 hello を定義し, 関数 main から関数 hello を呼び出すことによって動作するプログラムとすること。

  2. [pe2-2.c](必須)次の 1, 2 を順に行いなさい。
    1. 変数 n に正の整数を読み込んで 1 + 2 + ... + n を求めて表示するプログラムを作りなさい。 ただし,和の計算は関数 interval_sum を作って行うこと。

      関数 main が行うことは, 変数 n にキーボードから正の整数を入力し, 和を求める関数 interval_sum を呼び出し, 計算結果である interval_sum の戻り値を表示するだけである。

      和の計算は interval_sum に行わせること。 関数 interval_sum は和を計算して,それを呼び出し元に戻り値として返す関数とすること。 interval_sum の本体には,計算結果を表示する文は書かないこと。

    2. 先のプログラムを, 変数 m と n に正の整数を読み込んで,m から n の間に存在するすべての自然数の和 m + (m + 1) + ... + (n - 1) + n を求めるプログラムに変更しなさい。 和は関数 interval_sum に求めさせること。

  3. [pea2-1.c] キーボードから入力した整数を一辺の長さとする正方形を,* で描くプログラムを作りなさい。 ただし,関数 printsquare を定義して,関数 main から呼び出すようにすること。 関数 printsquare は,引数を通じて整数を一つ受け取り,その値を一辺の長さとする正方形を * で出力する関数とすること。

    例えばキーボードから 3 を入力したときに,このプログラムは画面に次の出力をする。

    ***
    ***
    ***
    
    また,キーボードから 0 以下の数を入力したときには,
    Invalid number.
    
    のようなメッセージを出すことが望ましい。

4/11 Fri 00:49

第1回課題

  1. [pe1-1.c](必須) 変数 a と b に標準入力(キーボード)から値を読み込み, それらの値を一度出力した後で,変数 ab に a と b の積を代入し,「? x ? = ?」(数の表示は小数点以下第2位まで)の形で結果を出力するプログラムの空白部分 (a) から (e) を埋めなさい。

    (変数,四則演算,scanf と printf による入出力)

    /* pe1-1.c: multiplication program */
    #include <stdio.h>
    
    int main()
    {
        double a, b, ab;
    
        scanf("%lf%lf", [(a)    ]);
        printf("a: %f\n", [(b)  ]);
        printf("b: %f\n", [(c)  ]);
    
        [(d)      ];
        [(e)                     ];
    
        return 0;
    }
    

  2. [pe1-2.c](必須)変数 n に正の整数を読み込んで 1 + 2 + ... + n を求めるプログラムの空白部分 (a) から (e) を埋めなさい。 なお,このプログラムは n までの和を求める途中の過程も表示する。

    (反復構造,合計を求めるアルゴリズム)

    /* pe1-2.c: summation program */
    #include <stdio.h>
    
    int main()
    {
        [(a) ]  i, n, sum;
    
        printf("Enter integer.\n");
        scanf([(b)        ]);
    
        sum = [(c) ];
        for (i = 1; [(d)         ]) {
            sum += [(e)  ]
            printf("%d\t%d\n", i, sum);
        }
    
        return 0;
    }
    

  3. [pea1-1.c] 変数 n に正の整数を読み込んで 1 + 1/2 + ... + 1/n を求めるプログラムを作りなさい。

    (データ型)





[サイトマップ] [トップページ]