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

[2020/05/09, H.Aman]

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

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

  • 演習 1

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

    【プログラムの仕様】
    入力された得点が 80 未満である限り,メッセージの出力と次の入力待ちを繰り返す(終わらない)
    <表示するメッセージ> ※場合分けには if 文を利用すること
    • 60 未満:「全然ダメです」
    • 60 以上 80 未満:「もう少し頑張りましょう」
    • 80 以上:「クリア!」

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    得点を入力して下さい:30
    全然ダメです
    得点を入力して下さい:55
    全然ダメです
    得点を入力して下さい:60
    もう少し頑張りましょう
    得点を入力して下さい:85
    クリア!
  • 演習 2

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

    【プログラムの仕様】
    0 が入力されるまで繰り返し整数を読み込み, それらの合計値と平均値(小数点以下第 2 位まで)を出力する.
    ただし,最後に入力する 0 は合計と平均の計算には入れないこと.

    【ヒント】 教科書 76 ページ

    【ヒント2】 double 型へのキャストを適切に行わないと平均値がおかしくなる(小数点以下が全部 0 になってしまう)ので要注意です.
    よく分かっていない人は,第 2 回の説明を再確認すること.
    この資料「なぜ printf("%10.4f\n", (x+y+z)/3); ではだめなのか?」も参考になると思います.

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    整数を一つ入力して下さい:30
    整数を一つ入力して下さい:5
    整数を一つ入力して下さい:17
    整数を一つ入力して下さい:0
    
    合計値は 52 です
    平均値は 17.33 です

    【キーボード入力の代わりにデータファイルを使う場合】
    この場合,「整数を一つ入力してください:」がたくさん表示されてしまいますが,気にしなくていいです.
    (※ Mac の人は a が ./a.out になります)
    a < data2-1.txt
    (data2-1.txt を使った場合:合計値は 1132, 平均値は 45.28) 確認テスト[4] でこれらを使った場合の結果を答えることになります.
  • 演習 3

    サンプルプログラム 3 (sample3.c) を ex03.c という別の名前のファイルにコピーし, それを編集して次の入出力例のように実行できるプログラム作りなさい.
    これは while 文の演習なので,等差数列の和の公式を使ってはいけません

    【プログラムの仕様】
    入力される整数を x として,次の二つを出力する:
    (1) 1 から x までの偶数のみを合計した値
    (2) 1 から x までの奇数のみを合計した値

    【ヒント】
    合計を記録(格納)するための変数 sum を, 偶数向けと奇数向けで二つ別々に用意するとよい(例えば,sum1 と sum2).
    そして,if 文を使って偶数と奇数で場合分けして合計を求めるとよい.
    つまり,while 文での繰り返しの中で k が偶数か奇数かによって sum1 += k; と sum2 += k; を使い分けるとよい.

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    整数を一つ入力して下さい:10
    1 から 10 までの偶数の合計は 30 です
    1 から 10 までの奇数の合計は 25 です
  • 演習 4

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

    【プログラムの仕様】
    入力された数だけ記号(-)を出力する.
    ただし,5 回に 1 回(5の倍数の時)は - ではなく + を出力する.
    10 回に 1 回(10 の倍数の時)は + を出力した後に改行もする.

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    整数を一つ入力してください:27
    ----+----+
    ----+----+
    ----+--

余裕のある人は

  • 発展課題 1

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

    【プログラムの仕様】
    フィボナッチ数列の x を出力する代わりに, 直前の値(b)との比(x/b)を繰り返し表示させる.
    この値は黄金比 (1 + √5)/2 =1.618... に収束していく.

    【入出力例】 (赤字は実行時にキーボードから入力する内容)
    整数を一つ入力してください:20
    2.000000
    1.500000
    1.666667
    1.600000
    1.625000