第6回 プログラミング入門 演習

【演習の注意事項】を良く読んで解答してください


ループ(その2)-for-

【主な内容】

for文,forとwhileの比較、カウンター変数、continue

演習課題

以下の例題と、3つのレベル (初級レベル, 中級レベル, 上級レベル) の全ての課題に解答しなさい。各々の課題毎にファイルを作成しなさい。

今回の課題はC言語のプログラムファイルで提出します。各課題にはファイル名が指定してあるので、その指示にしたがって下さい。

例題

講義資料(ハンドアウト)の例題 lec06-1.c lec06-3.c, lec06-4.c, lec06-5.c のソースプログラムをコピーし、そのプログラムの動作を予測した上で、コンパイル・実行を試してみなさい。

コピーの方法:
% cd ~/Prog0/Ex06
% cp /home/course/prog0/public_html/2008/lec/source/lec06-?.c .

初級レベル

(A-1)
下のプログラムはキーボードから読み込んだ一つの自然数について、 それ以下の3の倍数となる自然数の和を計算するものです。 for文中の(初期化;条件式;カウンタ変数更新)をそれぞれ 適切な式に修正し、プログラムを完成させなさい。

ファイル名:ex06a1.c
                                                       

[実行例]
%./a.out
自然数を入力して下さい:16
16までの3の倍数となる自然数の和は45です




(A-2)
以下のwhileループを使ったプログラムと同じ動作をするプログラムをforループを使って書きなさい。

ファイル名:ex06a2.c

[実行例]
%./a.out
543210




(A-3)
下のプログラムは、(A-1)の問題と同じ実行結果となります。ただし、 3の倍数でない数値の除外にcontinue文を使用するように変更してあります。
for文中と下線部をそれぞれ適切な式に修正し、 プログラムを完成させなさい。

ファイル名:ex06a3.c
                                                    





中級レベル

(B-1)
入力された値の階乗を出力するプログラムをfor ループを使って作成しなさい。ただし、for文のカウンタ変数はデクリメントしなさい。

ファイル名:ex06b1.c
階乗の計算
5! = 5 x 4 x 3 x 2 x 1 = 120
4! = 4 x 3 x 2 x 1 = 24
3! = 3 x 2 x 1 = 6
2! = 2 x 1 = 2
1! = 1

[実行例]
%./a.out
整数を入力してください:5
120




(B-2)
整数を入力し、1から入力された整数以下の全ての奇数を if文を使わずに表示しなさい。

ファイル名:ex06b2.c

(以下はヒントです。まずは見ずに挑戦しましょう。分からない場合は 以下の部分でマウスの左ボタンをクリックし、マウスをドラッグすると ヒントが見えます。また、以下の問題でもヒントは同じ方法で見ることが出来ます。)
カウンター変数の更新の仕方を工夫します。
カウンター変数を1加算するために i++ としますが、これは i+=1 と書いても同じ意味でした。
では、カウンター変数を1より多く更新するにはどうしますか?

[実行例]
%./a.out
整数を入力してください:5
1
3
5




(B-3)
九九の計算を、ループを使って1の段から9の段まで全て表示しなさい。

ファイル名:ex06b3.c
forループを入れ子にして使います。

for(***************){
  for(***************){
        
  }
}

[実行例]
%./a.out
1 x 1 = 1
1 x 2 = 2
.....
9 x 8 = 72
9 x 9 = 81





上級レベル

(C-1)
入力された整数 n に、以下の計算を繰り返し行うと最終的に 1 になります。その時の計算回数を表示するプログラムを作成しなさい。


ただし、繰り返しにはfor文を用いなさい。

ファイル名:ex06c1.c

[実行例]
%./a.out
整数を入力してください:3
7
%./a.out
整数を入力してください:32
5
%./a.out
整数を入力してください:31
106




(C-2)
ある人が友人に 10 万円の借金をします。
その友人はがめつく 「一週間ごとに 5% の利子をつける」 と言ってきました。
ただし、各週で生じる利子は借金に加算され、 その次の週の元金に含まれるものとします。
nをキーボードから入力して、n週間後の借金を出力するプログラムを作成しなさい。

ファイル名:ex06c2.c

[実行例]
%./a.out
整数を入力してください:5
5週間後の借金は127627円です
%./a.out
整数を入力してください:3
3週間後の借金は115762円です
%./a.out
整数を入力してください:1
1週間後の借金は105000円です




(C-3)
1〜9までの値の整数 n を入力として受け取り、 実行例のように、その n を高さとした二等辺三角形を出力するプログラムを 作成しなさい。

ファイル名:ex06c3.c

[実行例]
%./a.out
1から9までの整数を入力してください:3
1
22
333
22
1
%./a.out
1から9までの整数を入力してください:1
1
%./a.out
1から9までの整数を入力してください:6
1
22
333
4444
55555
666666
55555
4444
333
22
1




(C-4)
while において、条件式として数字の1のみを入れると、条件式は常に真であるという扱いになります。 この while(1) と break を 使って、 3回の正の値を読み込んだときに while から抜け出て終了 するプログラムを作成し、 それが正しく動作することを確認しなさい。ただし、ゼロや負数の入力は無視されるものとします。

ファイル名: ex06c4.c

[実行例]
% ./a.out
今まで、正の数字は0回入っています。数字を入れてください。
8
今まで、正の数字は1回入っています。数字を入れてください。
7
今まで、正の数字は2回入っています。数字を入れてください。
-3
今まで、正の数字は2回入っています。数字を入れてください。
9
今まで、正の数字は3回入っています。これで終了です。




何か疑問や間違いがあれば以下に連絡して下さい。
プログラミング入門演習問題担当(prog0)