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

トップページ > 授業のページ > 旧講義資料 > プログラミング入門 A, B >
プログラミング入門課題


標題 更新日
課題1 2013-08-07

課題1

  1. [pp1-1.c]画面に
    Welcome
    to
    C!
    

    と表示するプログラムを,printf を一つだけを使って作りなさい。 次の点に注意すること。

    • ソースファイルの 1 行目には,コメントとして氏名を記入することとする。
    • ソースファイルを作ったら,コンパイルしてプログラムを実行し, その結果が正しいことを必ず確認すること。
    • 表示の最後にも改行を出力すること。

  2. [pp1-2.c]リスト 1.6 のプログラムを, 変数 integer1 と integer2 に格納される 2 整数の積 (product)・ 商 (quotient)・余り (modulus) を求めて表示するように書き換え, 20 と 10 を入力したときの計算結果を確認しなさい。 また,他の整数を入力したときの実行結果も観察しなさい。

  3. [pp1-3.c]キーボードから入力する 3 つの整数の平均値を求めて表示するプログラムを作成しなさい。 平均値は整数で求まればよい。

    必ず次の形式で表示するプログラムにすること (10,20,30 を入力した場合の例)。

    Average of 10, 20 and 30 is 20

  4. [pp1-4.c]キーボードから2つの整数を入力し,大きい方の整数のあとに「is larger」という文字列をつけて表示するプログラムを書きなさい。 2 つの整数が等しいときは,「These numbers are equal」というメッセージを表示する。

    例えば,入力が 5 と 10 のときには「10 is larger」と表示し, 入力が 5 と 5 のときは「These numbers are equal」と表示する。

    ヒント:この問題における二つの整数の関係は

    • 1番目の値が2番目の値より大きい場合
    • 1番目の値が2番目の値より小さい場合
    • 二つの値が等しい場合
    の3通りであり,すべての場合についての処理をプログラムに記述する必要がある。

  5. [pp1-5.c]キーボードから入力する二つの整数の和,または積を求めて表示するプログラムを以下に示す。 ただし,このプログラムには全ての行に少なくとも一つの誤りがあるので,全ての誤りを直しなさい。
    */ addition or multiple /*
    #include <studio.h>
    
    Int main()
    (
         int num1, num2, operator, result
    
         scanf("%d\n", num1);
         scanf("%d\n", num2);
         scanf("%d\n", operator);
    
         num1 + num2 = result; 
    
         if (operator = 0);
             num1 * num2 = result; 
    
         print("Result is %d\n", Result, num1, num2);
    
         returnn 0;
    )
    
    正しいプログラムの実行例は次のとおりである。
    [foo@host ~/pp]$ ./a.out
    2
    5
    1
    Result is 7
    [foo@host ~/pp]$ ./a.out
    2
    5
    0
    Result is 10
    

  6. "Welcome to
            C!"
    

    と表示するプログラムを,次の各方法で作りなさい。 なお,表示の2 行目(C! の行) の行頭を字下げするために,タブ文字 \t を使うこと。 タブによる字下げの量は,端末の設定によって変わるため,上と同じ字下げ量にならなくともよい。 1 行目は字下げしない。

    1. 二つの printf を使って各行を表示する。 [pp1-6.c]

    2. 一つの printf のみですべてを表示する。 [pp1-7.c]

  7. [pp1-8.c]

    整数を入力して,それが奇数であるか偶数であるかを判定し,その結果を表示するプログラムを書きなさい。

    奇数・偶数の判定結果は,入力した整数のあとに「is odd」(奇数の場合)または「is even」(偶数の場合)をつけて表示することとする。

    ヒント:剰余演算子を使う。偶数は 2 の倍数であり,2 の倍数を 2 で割った余りは 0 である。



課題2 2013-08-07

課題2

  1. [pp2-1.c]成績が 60 点以上なら Passed と表示し, それ以外なら Failed と表示するプログラムを作成しなさい。 成績(整数)はキーボードから入力することとする。 if/else 選択構造を用いること。

  2. [pp2-2.c]キーボードから入力した整数が 10 以上ならば A, 8 か 9 ならば B, 6 か 7 ならば C, 5 ならば D と表示し, これ以外のときには printf 文を二つ使って
    Failed.
    You must take this course again.
    と表示するプログラムを作成しなさい。

  3. [pp2-3.c] キーボード三つの整数を入力し,3 番目の整数値に応じて,以下の動作をするプログラムを if/else を用いて作りなさい。
    • 1 : 最初の 2 整数の和を表示
    • 2 : 最初の 2 整数の差を表示
    • 3 : 最初の 2 整数の積を表示
    • 4 : 最初の 2 整数の商を表示
    • それ以外 : Illegal operator と表示

  4. [pp2-4.c]前のプログラムを if/else の代わりに switch/case を使って作りなさい。

  5. [pp2-5.c] 100 点満点の試験の点数を入力すると,入力値に応じて A から F までの成績を表示するプログラムを作りなさい。 入力値と表示との対応は次の表のとおりとする。 ただし,if 制御構造を用いること (if/else ではない)。 また,入力値の範囲を表現するために論理演算子を使うこと。
    入力値 表示
    90 以上 100 以下 A
    80 以上 90 未満 B
    70 以上 80 未満 C
    60 以上 70 未満 D
    0 以上 60 未満 F
    上記以外 Wrong value.

  6. [pp2-6.c]資料 第4.1節 の「1000 を越える最初の 2 の累乗を求める」コードを基にして,次のことを行いなさい。

    1. 1000 を越える最初の 2 の累乗を表示するプログラムを作り, 動作を確認しなさい。

    2. そのプログラムを,2 以上 1024 (1000 を越える最初の 2 の累乗) 以下の整数の中から,2 の累乗にあたる数を全て表示するように変更しなさい。

      ヒント:変数 product に値を代入する度に product の内容を表示する。

  7. [pp2-7.c]次のプログラムを参考にして, 10 個の整数を一つずつキーボードから入力して, その中の最大値を求めて表示するプログラムを作りなさい。 カウンタ制御による反復処理を行うプログラムにすること。 main の中にコメントは不要。
    /* 3 つの整数を入力し最大値を求める (順次構造版) */
    #include <stdio.h>
    
    main()
    {
        int number;   /* 入力値格納用 */
        int largest;  /* それまでに見つかった最大値 */ 
    
        /* 最初の数の処理 */
        printf("Type integer : ");
        scanf("%d", &number);
        largest = number; 
    
        /* 2 から 3 番目の数の処理 (同じ処理の繰り返し) */
        printf("Type integer : ");
        scanf("%d", &number);
        if (number > largest)
            largest = number;
    
        printf("Type integer : ");
        scanf("%d", &number);
        if (number > largest)
            largest = number;
    
        /* 結果の出力 */
        printf("Largest integer: %d\n", largest);
    
        return 0;
    }
    

  8. [pp2-8.c] 1 から 10 までの整数の和を計算して表示するプログラムを作りなさい。 while 反復構造を用いること。 なお,このプログラムの実行時には,キーボードからの整数入力は行わない。

  9. [pp2-9.c]7. と同じ動作をするプログラムを, for 反復構造を使って実現しなさい。

  10. [pp2-10.c]次の表を出力するプログラムを, for 反復を用いて実現しなさい。
    N       10*N    100*N   1000*N
    
    1       10      100     1000
    2       20      200     2000
    3       30      300     3000
    4       40      400     4000
    5       50      500     5000
    6       60      600     6000
    7       70      700     7000
    8       80      800     8000
    9       90      900     9000
    10      100     1000    10000
    
    この課題は,次の手順でプログラムを作成できる。 このように段階的にプログラムを作成していけば,誤りがあった場合に,誤り箇所の発見が容易になる。

    1. 使用する変数を仮に i とする (変数名は小文字で始めるのが慣 例)。i に 1 を代入してから,i とその 10 倍,100 倍,1000 倍の数値を,タブ区切りで一行に出力するだけのプログラムを作 る。正しく動作することを確かめる。

    2. 次に for 反復構造を導入して,i の値を 1 から 10 まで 1 ずつ増やしていきながら,各行を出力するように変える。

      字下げを正しく行ってプログラムを書くこと。 N や 10*N 等を 出力の一行目に表示させるのを忘れないこと。

  11. [pp2-11.c] 一度に100個のアスタリスク(*)を表示するプログラムを書きなさい。 ただし,一行に表示するアスタリスクは 10 個とする(アスタリスクを10個プリントする度に改行する)。



課題3 2013-08-08

課題3

  1. [pp3-1.c] 1 から 10 までの整数の和を計算して表示するプログラムを作りなさい。 for 反復構造を用いること。 なお,このプログラムの実行時には,キーボードからの整数入力は行わない。

  2. [pp3-2.c]キーボードから正方形の一辺の長さを入力すれば,その大きさの正方形をアスタリスクで表示する C プログラムを書きなさい。 このプログラムは for による二重ループを用いて作成しなさい。

    例:5 を入力した場合

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

    さらにこのプログラムを,一辺の長さとして 0 以下の整数が入力されると,正の整数が入力されるまで Illegal Input と出力するようにしなさい。

  3. [pp3-3.c]n の階乗 n! を求めるプログラムを反復構造を用いて作りなさい。 n は非負の整数であり,プログラム実行時にキーボードから入力することとする。 階乗 n! の定義は,1 より大きな n に対して n! = n * (n-1) * (n-2) * ... * 2 * 1 であり,1! = 0! = 1 である。 負の整数が入力された場合にはエラー処理を行うこと。

  4. [pp3-4.c] まず,講義資料のリスト 5.2 を実行しなさい。 次に,このプログラムを,キーボードから入力した文字に加え,その文字のコードを 10 進数で表示するプログラムにしなさい。 ただし,EOF が入力されるまで繰り返し文字入力ができるプログラムとすること。 また,改行文字が入力されたときには,何も出力しないようにすること。

  5. [pp3-5.c] キーボードから一行入力すると,そこから文字 a の個数を数えて出力するプログラムを作りなさい。 改行文字の入力でプログラムが終了するようにすること。

  6. [pp3-6.c] int 型変数 i と j に,各々 3 と 2 が格納されているとする。 このとき次の各式の持つ値は何か。 それを調べる (式の持つ値を表示する) プログラムを作成しなさい。 i と j 以外に変数を使わないこと。 結果を予想してからプログラムを実行してみなさい。
     1 + i / j * 10
     1 + 10 * i / j
     1 + i / j * 10.0
     1 + 10.0 * i / j
     1 + (double) i / j * 10
     1 + (double) ( i / j ) * 10
     i = j = 1.0
    

  7. [pp3-7.c]キーボードから入力する 10 個の実数から,最小値を求めて表示するプログラムを作りなさい。

  8. [pp3-8.c]下記のとおりの平方根の数表を出力するプログラムを作りなさい。 数値の表示位置や表示桁数に気を付けること。for ループを使うこと。
    Number Square-root
         1      1.0000
         2      1.4142
         3      1.7321
         4      2.0000
         5      2.2361
         6      2.4495
         7      2.6458
         8      2.8284
         9      3.0000
        10      3.1623
    

  9. [pp3-9.c] 直角三角形の直角を挟む 2 辺の長さから,斜辺の長さを求めて表示するプログラムを作りなさい。 2 辺の長さはキーボードから与えることとし,実数値を与えられるようにすること。

  10. [pp3-10.c]リスト 6.4 のプログラムを次のように変更しなさい。

    1. 関数 maximum を,2 つの double 型の数値を受け取り,小さい方を double 型として返す関数 min に変更する。関数のプロトタイプ宣言にも変更が必要。

    2. 関数 main を,キーボードから打ち込んだ 2 つの実数を double 型変数に格納し,関数 min を呼び出すことによって,小さい方を表示するようにする。

    予期せぬ実行結果が得られるならば,プログラムの適当な箇所に,変数の内容を表示するデバッグ用の printf 文を挿入してみるとよい。 プログラムの誤りがわかったら,デバッグ用の printf 文は削除すること。

  11. [pp3-11.c]リスト 6.3 を参考にして,次の指示に従ってプログラムを作りなさい。
    1. int 型の整数の絶対値を求めて int 型の戻り値として返す関数 iabs を作りなさい。

      iabs の本体では,パラメータに入る整数が 0 以上かどうかに応じて,0 以上の場合には戻り値としてそのままの値を返し,そうでない場合には正負の符号を反転させた値を返せばよい。

    2. 関数 iabs を呼び出すコードを関数 main に書いて,ソースコード全体でプログラムとして動作するようにしなさい。 main では,キーボードから整数を読み込み,それを関数 iabs に渡し,iabs からの戻り値を表示するようにすること。 なお,関数 iabs には変更を加えないこと。





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