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

トップページ > 授業のページ > 旧講義資料 > 2011年度 (H23年度) > プログラミング入門 A, B >
プログラミング入門例題・課題

プログラミング入門 課題


更新日
2011-10-06

例題

  1. [pp1-1.c](必須) プログラムのコンパイル・修正・実行: 次の内容をもつソースファイルを作成し,コンパイルしなさい。
    #include <stdio.h>
    
    int main()
    {
        printf("Hello world!\n")
    
        return 0;
    }
    

    コンパイル時に エラーメッセージ が出ることを確認したら, printf で始まる行の行末に ; (セミコロン)を加えてから再度コンパイルし, プログラムを実行しなさい。画面に Hello world! と表示されるはずです。

  2. [pp1-2.c](必須) プログラム実行時のエラー: 次の内容をもつソースファイルを作成しなさい。
    #include <stdio.h>
    
    int main()
    {
         int i = 2;
    
         printf("6 / %d = %d\n", i, 6 / i);
    
         return 0;
    }
    

    その後,下記の指示に従いなさい。

    1. ソースファイルをコンパイルし, エラーメッセージが表示されないことを確認してから, このプログラムを実行しなさい。6 / 2 の計算結果が表示されます。

    2. ソースファイル中で 2 と記述されている箇所を 0 に変更し, 同じファイル名で上書き保存しなさい。 このソースファイルをコンパイル・実行し, 実行時にエラーメッセージが出ることを確認しなさい。

      コンパイルに成功しても,作成したプログラムが正しいとは限りません。 プログラムの実行時にエラーが起きた場合にも, ソースファイルを修正してコンパイルし直す必要があります。

    3. ソースファイル中の 0 を 3 に変更してからコンパイルし, 正しく実行できることを確認しなさい。

  3. [ppa1-1.c] 1. のソースコードを参考にして, 画面に自分の学生番号と氏名(ローマ字でよい)を出力するプログラムを作成しなさい。



2011-10-20

第3回課題

  1. [pe3-1.c](必須) 次のプログラムをコンパイルして実行しなさい。 次に,ソースコードの不適切な箇所を修正して実行結果を確認しなさい。
    /* A first program in C */
    #include <stdio.h>
    
    int main()
    {
        printf("Hello world!"); 
    
        return 0;
    }
    

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

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

    • ソースファイルの 1 行目には,コメントとして氏名を記入することとする。

    • ソースファイルを作ったら,コンパイルしてプログラムを実行し, その結果が正しいことを必ず確認すること。

  3. [pe3-3.c](必須) 次の 3 つの値を計算して,表示するプログラムを作りなさい。
    • 7 と 5 の積
    • 7 を 5 で割った商
    • 7 を 5 で割った余り
    なお,これらの計算と表示は,一つのプログラムの中で全て行うようにすること。

  4. "Welcome to
            C!"
    

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

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

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



2011-10-21 例題と第3回課題のプログラムは,第4回の授業までに作成しておいてください。
2011-10-27

第4回課題

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

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

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

    Average of 10, 20 and 30 is 20



2011-11-04

第5回課題

  1. [pp5-1.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通りであり,すべての場合についての処理をプログラムに記述する必要がある。

  2. [pp5-2.txt] (必須) 以下の C の文における誤りを指摘しなさい。 ただし,各文における変数は予め宣言されているとする。 また,各文の誤りは一つとは限らない。 なお,この課題の解答は Windows 上のエディタ (メモ帳や terapad 等) で作成して firefox で提出してよい。

    1. */ Addition program /*

    2. printf("The product of %d and %d is %d"\n, x, y);

    3. scanf("d", value);

    4. firstNumber + secondNumber = sumOfNumbers

    5.        if (x = y);
                 printf(%d is equal to %d\n", x, y);
      

    6. print("The sum is %d\n," x + y);

  3. [ppa5-1.c]

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

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

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



2011-11-11

第6回課題

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

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

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

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

    1. 1 番目と 2 番目に入力した数を比較して,小さい方を min に代入する。 (この問題では if/else 構文を用いなさい)

    2. min と 3 番目の数を比較して,3 番目の方が小さければ,3 番目の数を min に代入する。(さもなくば,何もしなくていい)



2011-11-18

第7回課題

  1. [pp7-1.c] (必須) 次のプログラムの実行結果を確認しなさい。これを if/else を用いたプログラムに書き換えなさい。
    /* switch/case 文の簡単な例 */
    #include <stdio.h>
    
    main()
    {
        int i;
    
        printf("Input integer.\n");
        scanf("%d", &i);
    
        switch (i) {
        case 1:
            printf("i: 1\n");
            break;
        case 2:
            printf("i: 2\n");
            break;
        default:
            printf("i: other than 1 or 2\n");
            break;
        }
    
        return 0;
    }
    
  2. [pp7-2.c] (必須) p. 16 リスト 3.1 を,switch を使う代わりに,入れ子になった if/else を使うように書き換えなさい。 論理演算子を使うこと。

  3. [ppa7-1.c] p. 16 リスト 3.1 を,switch を使わずに実現しなさい。 ただし,論理演算子を用いないこと。



2011-11-25

第8回課題

  1. [pp8-1.c](必須) 資料 の「1000 を越える最初の 2 の累乗を求めるコード」を基にして,次のことを行いなさい。

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

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

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

  2. [pp8-2.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;
    }
    

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



2011-12-08

第9回課題

  1. [pp9-1.c](必須) pp8-2.c と同じ動作をするプログラムを, for 反復構造を使って実現しなさい。
  2. [pp9-2.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 等を出力の一行目に表示させるのを忘れないこと。

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



2011-12-15

第10回課題

  1. [pp10-1.c](必須) キーボードから正方形の一辺の長さを入力すれば,その大きさの正方形をアスタリスクで表示する C プログラムを書きなさい。 プログラムは,反復構造の中に反復構造を入れ子(ネスト)にして作成しなさい。

    例:5 を入力した場合

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

  2. [pp10-2.c](必須) キーボードから入力する0以上の実数の 5 乗を求めるプログラムを反復構造を用いて作りなさい。 負の入力に対しては,再度入力を求めるようにすること。

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


2011-12-20

第11回課題

  • [pp11-1.c] (必須) リスト 5.1 を実行しなさい。 このプログラムを char 型, int 型, float 型のサイズを求めるプログラムにして,実習で使っているコンピュータでは int 型と float 型が何バイトかを確認しなさい。

  • [pp11-2.c] (必須) リスト 5.2 を実行しなさい。 これを,キーボードから入力した文字,および,その文字のコードを 10 進数で表示するプログラムにしなさい。 改行が入力されるまで入力と表示を繰り返すプログラムにすること。

  • [ppa11-1.c] キーボードから入力した文字のうち,a の個数だけを数えるプログラムを作りなさい。 EOF が入力されるまで繰り返し文字入力ができるプログラムとすること。



2012-01-12

第12回課題

  • [pp12-1.c] (必須) int 型変数 i と j に,各々 3 と 2 が格納されているとする。このと き次の各式の持つ値は何か。それを調べる (式の値を表示する) プログ ラムを作成しなさい。結果を予想してからプログラムを実行し,何故そ うなるのかを考えなさい。なお,各式の値は浮動小数点数(実数)として 表示すること。
    1.0 + i / j * 10.0
    1.0 + 10.0 * i / j
    1.0 + (double) i / j * 10.0
    1.0 + (double) (i / j) * 10.0
    
  • [pp12-2.c] (必須) 10個の実数の入力を double 型変数に格納して, その中の最大値を求めるプログラムをつくりなさい。



2012-01-27

第13回課題

  1. [pp13-1.c] (必須) 下記の示すとおりの整数とその平方根の一覧を表示するプログラムを作りなさい。 表示位置や表示桁数に気を付けること。for ループを使うこと。
     0  0.0000
     2  1.4142
     4  2.0000
     6  2.4495
     8  2.8284
    10  3.1623
    12  3.4641
    14  3.7417
    16  4.0000
    18  4.2426
    

  2. [pp13-2.c] (必須) 次に示す x と sin x の一覧を表示するプログラムを作りなさい。 数学ライブラリ関数 sin を使うこと。 また,表示位置や表示桁数に気を付けること。 なお,x の単位はラジアンである。
       x   sin x
    0.00   0.000
    0.50   0.479
    1.00   0.841
    1.50   0.997
    2.00   0.909
    2.50   0.598
    3.00   0.141
    3.50  -0.351
    4.00  -0.757
    4.50  -0.978
    5.00  -0.959
    5.50  -0.706
    6.00  -0.279
    6.50   0.215
    

    ループによる浮動小数点数の誤差の蓄積を無くすため, ループ制御変数は整数型とする。 そのため,プログラムの主要部分は次のとおりとなる。 下線部には適当なコードを書くこと。

    for (i = 0; i < 14; i++) {
        x = i * 0.5;
        printf(_________________________);
    }
    

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



2012-01-26

第14回課題

  1. [pp14-1.c](必須) 次の指示に従ってプログラムを作りなさい。
    1. int 型の整数の絶対値を求めて int 型の戻り値として返す関数 iabs を作りなさい。

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

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

  2. [pp14-2.c](必須) リスト 6.4 のプログラムを次のように変更しなさい。

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

    2. 関数 main を,キーボードから打ち込んだ 3 つの実数を double 型変数に格納し,その最小値を表示するようにする。

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





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