第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 になります。その時の計算回数を表示するプログラムを作成しなさい。
- nが奇数だったら、nを3倍して、1足した数を新しいnにする
- nが偶数だったら、nを2で割った数を新しいnにする
ただし、繰り返しには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)