C プログラミング (C Programming)

[2020/05/16, H.Aman]

[5] 「for 文」サンプルプログラムの解説

[5] 「for 文」演習課題(教科書では主に 4 章が対応)

【Atom でのプログラム作成と提出前の注意点】
プログラムを書く時は,その行のインデントが適切かどうか常に意識しましょう.
インデントを付けてプログラムを書くのは基本中の基本なので, これを無視して書くのに慣れてしまうのは非常に危険です(プログラミングの上達を確実に妨げます).
提出前には この資料 に従って必ずインデントをチェックしてください.

  • 演習 1

    サンプルプログラム 1 (sample1.c) を ex01.c という別の名前のファイルにコピーし, それを編集して次の入出力例のように実行できるプログラム作りなさい.

    【プログラムの仕様】
    指定された個数だけ記号 * を表示する.
    ただし,4 の倍数の時だけは,その数字を表示する
    (その際,桁数の指定は不要なので %d で表示してよい)

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    自然数を一つ入力して下さい:30
    ***4***8***12***16***20***24***28**
  • 演習 2

    サンプルプログラム 2 (sample2.c) を ex02.c という別の名前のファイルにコピーし, それを編集して次の入出力例のように実行できるプログラム作りなさい.
    これに連動した問題が確認テスト [5] にあります

    【プログラムの仕様】
    サンプルプログラム 2 に機能を追加して, 数列で登場する値の合計も出力する.
    (下の入出力例でいえば最後の「この数列の和は 8 です.」のことである)

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    初項:5
    公差:-2
    項数:4
    第 1 項 = 5
    第 2 項 = 3
    第 3 項 = 1
    第 4 項 = -1 
    この数列の和は 8 です.
  • 演習 3

    サンプルプログラム 3 (sample3.c) を ex03.c という別の名前のファイルにコピーし, それを編集して次の出力例のように実行できるプログラム作りなさい.

    【プログラムの仕様】
    サンプルプログラム 3 と同様に九九の表を出力するが, 下三角部分は表示しない
    ただし,下三角部分では何も表示しないのではなく,実際には空白を表示させる.
    (つまり, i > j となっている部分では数字ではなく空白を表示させる.)
    表示がズレないよう空白の数に注意すること.

    【出力例】
      1  2  3  4  5  6  7  8  9
         4  6  8 10 12 14 16 18
            9 12 15 18 21 24 27
              16 20 24 28 32 36
                 25 30 35 40 45
                    36 42 48 54
                       49 56 63
                          64 72
                             81
  • 演習 4

    サンプルプログラム 4 (sample4.c) を ex04.c という別の名前のファイルにコピーし, それを編集して次の入出力例のように実行できるプログラム作りなさい.
    これに連動した問題が確認テスト [5] にあります

    【プログラムの仕様】
    サンプルプログラム 4 と同じ動きをしつつ,
    「k の約数」を表示している行末(右端)で k が素数の場合は
          [k は素数]
    という表示も追加
    する.

    【ヒント】
    カウント用の変数を用意しておき,約数を表示させる際に約数の個数も数えるようにしておく. そして,約数が 2 個しかないならば素数であると判断する.
    (注意:よくあるミス)
    カウント用の変数を cnt としたとき,最初に cnt = 0; として初期化しなければならないわけであるが, これを記述する位置には注意が必要である.
    これを i を使ったループ(for文)よりも前に書いてしまうのは誤りである.
    なぜなら,約数のカウントは i の値が変わるたびに 0 にリセットしないと話がおかしくなってしまうからである.
    それゆえ,正しい位置は, i のループの内側で,なおかつ k のループよりも前である.

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    n を入力してください:8
    1 の約数 = 1
    2 の約数 = 2 1 [2 は素数]
    3 の約数 = 3 1 [3 は素数]
    4 の約数 = 4 2 1
    5 の約数 = 5 1 [5 は素数]
    6 の約数 = 6 3 2 1
    7 の約数 = 7 1 [7 は素数]
    8 の約数 = 8 4 2 1

余裕のある人は

  • 発展課題 1

    サンプルプログラム 5 (sample5.c) を ex05.c という別の名前のファイルにコピーし, それを編集して次の入出力例のように実行できるプログラム作りなさい.

    【プログラムの仕様】
    サンプルプログラム 5 と同じ動作をしながら,
    「k の最大約数」と表示している行末(右端)で
    k が素数ならば
          [k は素数]
    と表示
    させる.
    さらに,全部で何個の素数が見つかったのかも最後に出力する.

    【ヒント】
    最大約数が 1 ならば,その数は素数である.

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    n を入力してください:8
    2 の最大約数 = 1 [2 は素数]
    3 の最大約数 = 1 [3 は素数]
    4 の最大約数 = 2
    5 の最大約数 = 1 [5 は素数]
    6 の最大約数 = 3
    7 の最大約数 = 1 [7 は素数]
    8 の最大約数 = 4
    4 個の素数が見つかりました