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

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


更新日
12/19 Thu 00:13

第12回課題

  1. [pp12-1.c] (必須) 次のプログラムを実行し,char 型のサイズが 1 バイトであることを確認しなさい。
    /* sizeof operator */
    #include <stdio.h>
    
    int main()
    {
        printf("size of char: %d\n", sizeof(char));
    
        return 0;
    }
    
    このプログラムを char 型, int 型, float 型のサイズを求めるプログラムにして,実習で使っているコンピュータでは int 型と float 型が何バイトかを確認しなさい。

    なお,sizeof 演算子で求めたサイズを表示するには,printf の 第1引数において %ld を使うのが正しいが,ここでは %d を使うこととする。

  2. [pp12-2.c] (必須) 講義資料のリスト 5.1 を実行し,動作を確認しなさい。 次に,このプログラムをエンターキーの押下(改行文字の入力)で終了するようにしなさい。 さらに,キーボードから入力した文字に加え,その文字のコードを 10 進数で表示するプログラムにしなさい。

    例えば,

    abc
    と入力すると
    a(97)b(98)c(99)
    と出力して終了するプログラムにすること。

  3. [ppa12-1.c] キーボードから入力した文字の中に数字が何個あったかを数えて出力するプログラムを作りなさい。 EOF が入力されるまで文字入力を繰り返すプログラムにすること。



12/11 Wed 22:31

第11回課題

  1. [pp11-1.c](必須) 資料 リスト 4.6 のプログラムをもとに, 以下の指示に従ってプログラムを作成しなさい。
    1. リスト 4.6 のプログラムを実行して結果を確認してから, 下に示す3行5列のアスタリスクを画面に表示するように, プログラムを書き換えなさい。
      *****
      *****
      *****
      
    2. 先のプログラムを,アスタリスクで正方形(行数と列数が同じということ)を描くプログラムに しなさい。 辺の長さ(行数あるいは列数)はキーボードから入力させること。

    3. 先のプログラムに, 0 以下の整数が入力されると正の整数が入力されるまで Illegal Input と出力するコードを加えなさい。 正の整数が入力されたら,その整数を一辺とする正方形を描くようにすること。

  2. [pp11-2.c](必須) キーボードから入力する2つの実数に対する四則演算(和,差,積,除)の結果を表示するプログラムを作りなさい。

  3. [ppa11-1.c] キーボードから入力した正の整数に対して,次の例のような三角形を出力するプログラムを作りなさい。 このプログラムは for による二重ループを用いて作成すること。 また,0 以下の整数が入力されると,正の整数が入力されるまで Illegal Input と出力するようにしなさい。 さらに,このプログラムを実行してみることで,画面に三角形として表示される入力の範囲を確認し,大きすぎる入力もできないプログラムとしなさい。

    例:1 を入力した場合の出力

    *
    
    例:2 を入力した場合の出力
    *
    **
    
    例:3 を入力した場合の出力
    *
    **
    ***
    



12/4 Wed 20:59

第10回課題

  1. [pp10-1.c](必須) 次の表を出力するプログラムを, for 反復を用いて実現しなさい。 N の列以外の値は計算で求めるようにすること。
    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 を代入してから,printf を使って i とその 10 倍,100 倍,1000 倍の数値をタブ文字 (\t) 区切りで一行に出力するだけのプログラムを作る。 正しく動作することを確かめる。次のとおりに表示できればよい。
      1       10      100     1000
      

    2. 次に for 反復構造を導入して,i の値を 1 から 10 まで 1 ずつ増やしていきながら,各行を出力するように変える。 つまり,前項 (a) の printf 文を for によって繰り返すようにする。

    このように段階的にプログラムを作成していけば,誤りがあった場合に,誤り箇所の発見が容易になる。

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

  2. [pp10-2.c](必須) 10 個の整数をキーボードから入力すると, その中の最大値を求めて表示するプログラムを作りなさい。 for を使ったカウンタ制御による反復処理を行うプログラムにすること。

    第9回課題 3 を参考にすればよい。 最大値を格納する変数には,例えば largest など用途がわかる名前を使うこと。

  3. [ppa10-1.c] 1 から 1000 までの整数のうち,3 と 7 の両方で割り切れる数を全て表示し,その個数も数えて表示するプログラムを作りなさい。

    数は空白で区切って表示することとする。 10 個表示するたびに改行するなど,見やすい表示にすると,なお良い。 また, 個数の表示は,例えば count: 47 のように,個数であることがわかるように行うこと。

  4. [ppa10-2.c] 10 個の整数をキーボードから入力すると, その中の最大値と2番目に大きい数の両方を求めて表示するプログラムを作りなさい。



11/28 Thu 15:31

第9回課題

  1. [pp9-1.c](必須) 資料の「1000 を越える最初の 2 のべき乗を求める」コードをもとにして,次のことを行いなさい。
    1. 1000 を越える最初の 2 のべき乗を求めて表示するプログラムを作り, 動作を確認しなさい。

    2. そのプログラムを,1000 を越える最初の 2 のべき乗までの,正の 2 のべき乗を全て表示するように変更しなさい。

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

  2. [pp9-2.c](必須) 1 から 10 までの数を,1 行につき一つずつ出力するプログラムを作りなさい。 カウンタ制御による反復を用いること。

    さらに,このプログラムが次の動作をするように, 必要なコードを追加しなさい。

    1 から 10 までの数を表示した後で, それらの和を Sum = 55 と出力する。

  3. [pp9-3.c](必須) 次のプログラムを参考にして, 10 個の整数をキーボードから入力すると, その中の最大値を求めて表示するプログラムを作りなさい。 while を使った カウンタ制御による反復処理を行うプログラムにすること。 また,main の中のコメントは省くこと。
    /* Maximum of three integers */
    #include <stdio.h>
    
    int 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;
    }
    

  4. [ppa9-1.c] 100 個のアスタリスク (*) を表示するプログラムを作りなさい。 ただし,アスタリスクを 10 個表示する毎に改行するプログラムとすること。 反復 1 回につき表示するアスタリスクは一つのみとすること。

    ヒント: 100 回の反復のうち,カウンタが 10 で割り切れるときのみ改行文字を出力すればよい。



11/20 Wed 23:21

第8回課題

  1. [pp8-1.c](必須) 次のプログラムを実行し,結果を確認しなさい。 これと同じ動作をするプログラムを if/else を一つだけ用いて作りなさい。
    /* switch/case example */
    #include <stdio.h>
    
    int main()
    {
        int num;
    
        printf("Input integer.\n");
        scanf("%d", &num);
    
        switch (num) {
        case 1: case 3: case 7:
            printf("1, 3 or 7\n");
            break;
        default:
            printf("other than 1, 3, 7\n");
            break;
        }
    
        return 0;
    }
    

  2. [pp8-2.c](必須) 次のプログラムがどのような動作をするプログラムなのかを考えてから実行してみなさい。 さらに,このプログラムと同じ動作をするプログラムを, if を一つだけ使って作りなさい。論理演算子を用いること。

    /* if-nest and logical operator */
    #include <stdio.h>
    
    int main()
    {
         int num;
    
         printf("Enter integer\n");
         scanf("%d", &num);
    
         if (num % 2 == 0)
              if (num % 3 == 0)
                   printf("Hit!\n");
    
         return 0;
    }
    

  3. [pp8-3.c] (必須) 資料 p. 15 リスト 3.1 のプログラムを switch を使わずに同じ動作をするプログラムに変更しなさい。 論理演算子を適宜用いて読みやすいプログラムにすること。 ただし,関係演算子 (<, >, <=, >=) を用いないこと。

  4. [ppa8-1.c] キーボードから三つの整数を入力し,3 番目の整数値に応じて,以下の動作をするプログラムを switch を用いて作りなさい。
    • 1 : 最初の 2 整数の和を表示
    • 2 : 最初の 2 整数の差(最初の数 引く 2番目の数)を表示
    • 3 : 最初の 2 整数の積を表示
    • 4 : 最初の 2 整数の商(最初の数 割る 2番目の数)を表示
    • 5 : 最初の 2 整数の剰余(最初の数 を 2番目の数 で割った余り)を表示
    • それ以外 : Illegal operator と表示



11/14 Thu 16:58

第7回課題

  1. [pp7-1.c](必須) キーボードから入力する二つの整数の和,または積を求めて表示するプログラムを以下に示す。 このプログラムは,3 番目に入力した値が 0 のときには 2 数の和を,0 以外の時には 2 数の積を求めて表示しなければならない。 ただし,このプログラムには全ての行に少なくとも一つの誤りがあるので, 全ての誤りを直してプログラムを完成させなさい。

    /* pp7-1.c /
    #include <studio.h>
    
    int mane()
    [
         int num1, num2, result;
    
         print("Input two integers./n");
         scanf("%d%d\n", num1, num2);
         print("Input operator number./n");
         scanf("%d\n", operator);
    
         if (operator = 0);
             num1 + num2 = result 
         else;
             num1 * num2 = result
    
         print("Result is %d", num1, num2, Result);
    
         return0;
    ]
    
    正しいプログラムの実行例は次のとおりである。
    [foo@host ~]$ ./a.out
    Input two integers.
    2 5
    Input operator number.
    0
    Result is 7
    [foo@host ~]$ ./a.out
    Input two integers.
    2 5
    Input operator number.
    1
    Result is 10
    

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

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

  4. [ppa7-2.c] 下記の a) から d) の表示を行うプログラムを, 次の if-else コードを使って作成しなさい。 ただし,if-else コードの部分には,必要に応じて, 適当な場所に {} を書き,さらに適切なインデントを行うこと。 if-else コードの部分に文を追加したり削除してはならない。

    なお,この課題で作成するプログラムは一つのみとする。そのため,a) から d)の各出力のための if-else コードのすべてを,一つのプログラムに記入して,指定の出力が順番になされるプログラムとすること。 また,変数 x と y に対しては,if-else コードの部分を実行する前に,代入文によって値を代入しておくこと。

    <if-else コード>
    if (y == 8)
    if (x == 5)
    printf("@@@@@\n");
    else
    printf("#####\n");
    printf("$$$$$\n");
    printf("&&&&&\n");
    
    a) x = 5, y = 8 のときに次を表示する。
    @@@@@
    $$$$$
    &&&&&
    
    b) x = 5, y = 8 のときに次を表示する。
    @@@@@
    
    c) x = 5, y = 8 のときに次を表示する。
    @@@@@
    &&&&&
    
    d) x = 5, y = 10 のときに次を表示する。ただし,どの printf 文も if あるいは if/else の構造から出ないようにすること。
    #####
    $$$$$
    &&&&&
    



11/7 Thu 13:22

第6回課題

今回以降の課題では,字下げや空行の入れ方等,コードの読みやすさに配慮すること。 また,大文字で始まる変数名は避けること。
  1. [pp6-1.c](必須) キーボードから入力した2つの整数のうち,大きい方の整数のあとに「is greater.」という文字列をつけて表示するプログラムを if 選択構造を使って作りなさい。 2 つの整数が等しいときには「These numbers are equal.」というメッセージを表示させること。

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

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

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

  2. [pp6-2.c](必須) キーボードから入力する 3 つの整数から,最大値を求めて表示するプログラムを,次のヒントに従って作りなさい。

    ヒント: 最大値を求めるために使う変数を仮に max とする。 また,キーボードから入力した3つの整数は変数に入っていることとする。 以下を順に行えば,最終的に max には 3 つの整数の最大値が入る。

    1. 1 番目の整数を max に代入する。
    2. 2 番目の整数が max より大きければ,2 番目の整数を max に代入する。
    3. 3 番目の整数が max より大きければ,3 番目の整数を max に代入する。

  3. [ppa6-1.c] 2つの整数を入力すると, 最初の整数が2番目の整数の倍数であるか否かを判定するプログラムを書きなさい。

    ここで「倍数であるか否かを判定する」とは, 最初の整数が 2 番目の整数で割りきれる場合に

    「最初の整数」is multiple of「2番目の整数」
    と出力し, 割り切れない場合には何も出力しないこととする。

    例えば,18 と 9 の入力に対しては,

    18 is multiple of 9
    と出力し,17 と 9 の入力に対しては何も出力しない。

    注意 倍数でないときには何もしないので,そのための if 文は書かないこと。



10/30 Wed 23:05

第5回課題

  1. [pp5-1.c](必須) 講義資料のリスト 1.7 を参考にして, キーボードから入力する2つの整数を変数 integer1 と integer2 に格納し, それらの積 (product)・商 (quotient)・余り (modulus) を全て求めて 表示するプログラムを作りなさい。 プログラムを実行し,正しく動作するプログラムであることを確認しなさい。 なお,printf で % そのものを出力したければ,二重引用符の中に %% と書く。

    実行結果の例は次のとおりであるが,この問題では,正しい計算結果が出力されれば, 出力の形式にはこだわらなくてよい。

    Enter first integer
    15
    Enter second integer
    6
    15 * 6 = 90
    15 / 6 = 2
    15 % 6 = 3
    

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

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

    Average of 10, 20 and 30 is 20

  3. [ppa5-1.c] 別途指示されたとおりに C 言語のソースファイルを作成し,コンパイルして実行してみなさい。 種々の入力を与えてプログラムを実行してみて,このプログラムがどんな動作をするプログラムなのかを予想しなさい。
  4. [ppa5-2.c] キーボードから入力した3桁の整数の,各桁の数値を空白で区切って表示するプログラムを作りなさい。 例えば 123 と入力すると,1 2 3 と出力する。

    ヒント: % 演算子と / 演算子で各桁の数値を取り出せばよい。



10/24 Thu 12:45

第4回課題

  1. [pp4-1.c](必須) 画面に
    Welcome
    to
    C!
    

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

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

  2. [pp4-2.c](必須) 二つの printf を使って,画面に
    5 * 2 = 10
    5 / 2 = 2
    
    と表示するプログラムを作りなさい。ただし,printf の二重引用符 " " の中には数字を一切書かないこと。 右辺の答えはコンピュータが計算して求めるようにすること。

  3. [ppa4-1.c] 画面に
    "Welcome to
            C!"
    
    と表示するプログラムを, printf を一つだけ使って作りなさい。 なお,表示の2 行目(C! の行) の行頭を字下げするために,タブ文字 \t を使うこと。 タブによる字下げの量は,端末の設定によって変わるため,上と同じ字下げ量にならなくともよい。 1 行目は字下げしない。二重引用符も出力させる。

  4. [ppa4-2.c] 授業資料のリスト 1.7 の内容を記述した C のソースファイルを作成し,コンパイルしなさい。 ただし,各文の意味を説明している行末のコメントは不要である。

    コンパイルに成功したらプログラムを実行し,コマンドラインのプロンプトが出ていない状態で,キーボードから整数を入力してエンターキーを押すことを2回行うと,2つの整数の和の計算結果が表示されることを確認しなさい。 実行結果に誤りがあれば,ソースファイルを修正して,実行し直すこと。




標題 形式 更新日 サイズ コメント
if_equality_relational_operators_c.png image/png 10/30 Wed 23:14 47247


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