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

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


更新日
12/11 Tue 19:54

第12回課題

  1. [pp12-1.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.5
    

  2. [pp12-2.c](必須) キーボードから入力した二つの整数の商,余り,実数での割り算の結果を求めて表示するプログラムを作りなさい。 割り算の結果は小数点以下第3位まで表示することとする。

    例えば 5 と 2 の入力に対しては

    quotient: 2
    modulus: 1
    division: 2.500
    のように表示する。

  3. [ppa12-1.c] キーボードから入力した非負の実数から 最大値を求めて表示するプログラムを作りなさい。 負の数を入力するまで入力を繰り返すプログラムとすること。 入力した実数は double 型変数に格納すること。



12/8 Sat 18:54

第11回課題

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

    例えば,

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

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



12/6 Thu 22:03

第10回課題

  1. [pp10-1.c](必須) リスト 4.6 のプログラムを次を出力するように書き換えなさい。 2 文字分の場所を使って整数を表示するには,printf の最初の引数に,%d の代わりに %2d と書けばよい。
    (-5,-3) (-5,-2) (-5,-1) (-5, 0) (-5, 1) (-5, 2) (-5, 3) 
    (-3,-3) (-3,-2) (-3,-1) (-3, 0) (-3, 1) (-3, 2) (-3, 3) 
    (-1,-3) (-1,-2) (-1,-1) (-1, 0) (-1, 1) (-1, 2) (-1, 3) 
    ( 1,-3) ( 1,-2) ( 1,-1) ( 1, 0) ( 1, 1) ( 1, 2) ( 1, 3) 
    ( 3,-3) ( 3,-2) ( 3,-1) ( 3, 0) ( 3, 1) ( 3, 2) ( 3, 3) 
    ( 5,-3) ( 5,-2) ( 5,-1) ( 5, 0) ( 5, 1) ( 5, 2) ( 5, 3)
    

  2. [pp10-2.c](必須) キーボードから整数を入力すると,その個数分のアスタリスク(*)を表示するプログラムを書きなさい。 ただし,アスタリスクを 20 個表示する毎に改行するプログラムとすること。 また,0 以下の整数が入力されると,正の整数が入力されるまで Illegal Input と出力するようにすること。

    ヒント: 反復構造の中に if 選択構造をネストさせ, 20 の倍数個のアスタリスクを表示したら改行を出力(表示)すればよい。 20 で割った余りが 0 であれば,20 の倍数である。

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



11/29 Thu 20:57

第9回課題

  1. [pp9-1.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 等を出力の一行目に表示させるのを忘れないこと。

  2. [pp9-2.c](必須) 1 から 100 までの整数のうち,3 と 7 の両方で割り切れるものを全て表示するプログラムを作りなさい。 for 反復構造に if 選択構造がネストする(入れ子になる)。

  3. [ppa9-1.c] 第8回課題 3 (ppa8-1.c)を for 反復構造を使って解きなさい。



11/11 Sun 17:36

第8回課題

  1. [pp8-1.c](必須) 次のプログラムがどのような動作をするプログラムなのかを考えなさい。 これと同じ動作をするプログラムを, 一つの if と論理演算子を使って作りなさい。
    /* pp8-1.c */
    #include <stdio.h>
    
    int main()
    {
        int num;
    
        printf("Enter integer\n");
        scanf("%d", &num);
    
        if (num % 2 == 0)
            printf("Hit!\n");
        else
            if (num % 3 == 0)
                printf("Hit!\n");
    
        return 0;
    }
    

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

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

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

  3. [ppa8-1.c] 次のプログラムを参考にして, 10 個の整数をキーボードから入力すると, その中の最大値を求めて表示するプログラムを作りなさい。 カウンタ制御による反復処理を行うプログラムにすること。 また,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;
    }
    



11/8 Thu 22:42

第7回課題

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

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

    ヒント: 最大値を求めるために使う変数名を仮に max とする。 以下を順に行えば,最終的に max に最大値が入る。

    1. 1 番目と 2 番目に入力した数(変数に格納されている)のうち,大きい方を max に代入する。 if/else 構文を使うとよい。
    2. max と 3 番目に入力した数を比較して,3 番目の方が大きければ,3 番 目の数を max に代入する。(3 番目の方が大きくなければ何もしない。)

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



11/2 Fri 10:34

第6回課題

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

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

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

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

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

    /* pp6-2.c /*
    #include <studio.h>
    
    int main
    (
         int num1, num2, result;
    
         print("Input two integers./n");
         scanf("%d%d\n", num1, num2);
         print("Input operator number./n");
         scanf("%d\n", operator);
    
         num1 * num2 = result
    
         if (operator = 0);
             num1 + num2 = result; 
    
         print("Result is %d/n", Result, num1, num2);
    
         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
    

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

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

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



10/29 Mon 19:25

第5回課題

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

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

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

    Average of 10, 20 and 30 is 20

  3. [ppa5-1.c] キーボードから入力した3桁の整数の,各桁の数値を空白で区切って表示するプログラムを作りなさい。 例えば 123 と入力すると,1 2 3 と出力する。

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



10/25 Thu 21:37

第4回課題

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

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

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

  2. [pp4-2.c](必須) 二つの printf を使って,画面に
    3 * 2 = 6
    3 / 2 = 1
    
    と表示するプログラムを作りなさい。ただし,printf の二重引用符 " " の中には数字を一切書かないこと。

  3. [ppa4-1.c] 画面に
    "Welcome to
            C!"
    

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





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