第2回 繰り返し

基本課題

繰り返し(ループ)

関連項目: for, while, break

b1) 「0, 2, 4, 6, 8...」というように、0以上100未満の偶数を、小さい順(昇順)順に画面に表示するプログラムを作成しなさい。

【ポイント】 forループは次のように表されるが,

for (開始処理; 継続条件; 更新処理) {
    繰り返し処理
}

これは,次のwhileループとほぼ同じ意味である(continueを使うときだけ意味が違う)。

開始処理
while (継続条件) {
    繰り返し処理
    更新処理
}

たとえば,更新処理にはi++のような式を書くと決まっているわけではなく,どんな式でも書くことができる。

★b2) 10個の整数をキーボードから読み込み,奇数と偶数の数を数えて出力するプログラムを作成しなさい。(繰り返しを使うこと。配列は使わないほうがよい)

b3) 2つの整数aとbを読み込み,a以上b以下の整数を大きい順(降順)に画面に表示するプログラムをforを用いて作成しなさい。もし,aがbより大きかったら,まずaとbを交換してから処理しなさい。

★b4) キーボードから自然数を順次読み込み,0を読み込んだら,それまでの最大値を表示して終了するプログラムを作成しなさい。

【ポイント】 while (1) や for (;;) という書き方で「終わらないループ」を作ることができる。このようループを無限ループという。ただし,本当に終わらないループを書いてはいけない。何かの条件でループが終わるように,break 文を記述しなければならない。

while (1) {
    /* このままだと永久に実行し続ける */
    ...
    if (終了条件) break;
    ...
}

★b5) 掛け算の九九の表を出力するプログラムを作成しなさい。余裕のあるひとは左下または右上半分だけ出力するプログラムを作成しなさい。以下に例を示す。(2重ループを使うこと。配列は使わないほうがよい)

123456789
11
224
3369
4481216
5510152025
661218243036
77142128354249
8816243240485664
991827364554637281

【ポイント】 ループの中にループを書くことを2重ループ(多重ループ)という。

応用課題

bx1) 2つの整数aとbを読み込み,aからbまでの和a + (a+1) + … + (b-1) + b を計算して出力するプログラムをfor文を用いて作成しなさい。ただし,aがbより大きい場合には,aとbを交換して計算しなさい。

bx2) 正の整数を順次キーボードから読み込んで合計を計算し,ゼロまたは負数が入力された時点で結果を表示して終了するプログラムを作成しなさい。このとき,正数のみの合計を表示して終了すること。

bx3) 複利の年利x%で毎月利息がつく銀行預金に,毎月y円ずつ積み立てる。たとえば,x=12%(1月あたり1%), y=1000円なら,積み立てを始めてから1ヵ月後には1000×1.01+1000=2010円,2ヵ月後に2010×1.01+1000=3030円になっている計算である(小数点以下は切り捨て)。では,何年何ヶ月後に100万円を越えるか計算するプログラムを作成しなさい。

bx4) キーボードから読み込みこんだ整数n (ただしn≧2)を1辺の長さとするアスタリスク(*)の正方形を描画するC言語のプログラムを作成しなさい。たとえば,n=2,3,4のときは,それぞれ以下のような図形が出力される。

n=2 **    n=3 ***    n=4 ****
    **        ***        ****
              ***        ****
                         ****

bx5) 2+3+5=10のように,合計が10になるような3つの整数の組み合わせをすべて調べて列挙するプログラムを作成しなさい。

発展課題

RPGの戦闘プログラム(団体戦)

この課題は,配列の知識が必要である。

bz1) az1)の戦闘プログラムを改良して,複数対複数で戦えるようにしなさい。とはいっても,いきなり“乱戦”を実現するのは難しいので,柔道の団体戦のように1人ずつ順番に対戦する勝ち抜き戦を実現しなさい。

... 味方2 味方1 味方0 →×← モンスター0 モンスター1 モンスター2 ...

主人公たちは,狭い洞窟の通路を,たいまつを灯しながら1列になって進んでいる。そのとき,前方から咆哮が聞こえ,凶暴なモンスターのグループが襲ってきた!

  1. 主人公側,モンスター側ともに,メンバーに0から番号を振っておく。これが対戦の順番になる。
    • 技術点や体力点を保存するのには配列を利用する。たとえば,味方の3人目の技術点はskill[2],体力点はstamina[2]などとする。
  2. まず,主人公側の1人目とモンスター側の1匹目が対戦する。これは1対1なのでaz1)の方法で闘えばよい。
    • ここで,体力がゼロになるまで戦わず,ある値(例えば5)以下になったら列の一番後ろに退却することにすると,よりリアリティが増すかもしれない。
  3. 勝った側は勝ち抜きとなり,先頭に残って次の相手とそのまま対戦する。負けた側は,次の順番のメンバーが交代で前に進み出て闘う。
  4. 以下同様に闘い,どちらかが全滅したら戦闘終了である。

前回同様,乱戦に対応させるなど,これも改良自由である。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS