演習: 配列とループ
5-a. 配列の基本操作
Section titled “5-a. 配列の基本操作”以下の配列について、3番目の要素と要素数を出力してください。
const scores = [80, 65, 90, 70, 85];出力例:
905ヒント
インデックスは 0 から始まることに注意してください。要素数は .length で取得できます。
5-b. 配列の全要素を出力
Section titled “5-b. 配列の全要素を出力”以下の配列の全要素を for ループで出力してください。
const fruits = ["りんご", "みかん", "ぶどう", "もも", "いちご"];ヒント
i を 0 から fruits.length 未満まで回し、fruits[i] で各要素にアクセスします。
5-c. 配列とループの出力予測
Section titled “5-c. 配列とループの出力予測”以下のコードの出力結果を予測してから実行してください。
const data = [5, 3, 8, 1, 4];let total = 0;
for (let i = 0; i < data.length; i++) { if (data[i] % 2 === 1) { total = total + data[i]; }}
console.log(total);ヒント
data[i] % 2 === 1 は「奇数かどうか」の判定です。配列の各要素について、奇数なら total に足し、偶数なら何もしません。
5-d. 配列の合計と平均
Section titled “5-d. 配列の合計と平均”以下の配列の合計値と平均値を計算して出力してください。
const temperatures = [22, 25, 19, 28, 24, 21, 27];ヒント
合計を求めてから、合計を要素数で割ると平均が求まります。
5-e. 条件に合う要素を数える
Section titled “5-e. 条件に合う要素を数える”以下の配列から、70 点以上のスコアの個数を数えて出力してください。
const scores = [85, 42, 73, 91, 68, 55, 79, 96, 60, 88];ヒント
カウント用の変数を 0 で初期化し、条件を満たす要素が見つかるたびに 1 を足します。
5-f. 条件付き合計の出力予測
Section titled “5-f. 条件付き合計の出力予測”以下のコードの出力結果を予測してから実行してください。
const prices = [120, 350, 80, 500, 200];let count = 0;let total = 0;
for (let i = 0; i < prices.length; i++) { if (prices[i] >= 200) { count++; total = total + prices[i]; }}
console.log(count);console.log(total);ヒント
配列の各要素について、200 以上かどうかを判定します。条件を満たす要素だけが count と total に影響します。
5-g. 最小値の探索
Section titled “5-g. 最小値の探索”以下の配列から最も小さい値を見つけて出力してください。
const data = [45, 12, 78, 34, 6, 91, 23];ヒント
最大値探索と同じ考え方です。比較の向きを逆にしてください。
5-h. 累積和の出力予測
Section titled “5-h. 累積和の出力予測”以下のコードの出力結果を予測してから実行してください。
const values = [3, 1, 4, 1, 5];let sum = 0;
for (let i = 0; i < values.length; i++) { sum = sum + values[i]; console.log(sum);}ヒント
sum の変化を1ステップずつ追ってください。i = 0 のとき sum = 0 + 3 = 3、i = 1 のとき sum = 3 + 1 = 4、…と続きます。
5-i. 配列の要素を逆順に出力
Section titled “5-i. 配列の要素を逆順に出力”以下の配列の要素を末尾から先頭に向かって出力してください。新しい配列は作らず、ループの工夫だけで実現します。
const colors = ["赤", "青", "緑", "黄", "紫"];出力例:
紫黄緑青赤ヒント
for ループを逆向きに回します。配列の最後の要素のインデックスは .length - 1 です。
5-j. 穴埋め: 最大値のインデックス
Section titled “5-j. 穴埋め: 最大値のインデックス”配列から最高点のインデックス(位置)を求めるプログラムがあります。/* ??? */ に入る条件式を、選択肢から選んでください。
const scores = [72, 85, 60, 93, 78];let maxIndex = 0;
for (let i = 1; i < scores.length; i++) { if (/* ??? */) { maxIndex = i; }}
console.log("最高点: " + scores[maxIndex]);選択肢:
- (ア)
scores[i] > scores[maxIndex] - (イ)
scores[i] > maxIndex - (ウ)
i > maxIndex - (エ)
scores[maxIndex] > scores[i]
ヒント
maxIndex は「今のところ一番大きい要素のインデックス」です。新しい要素が今の最大値より大きいかを比較する必要があります。各選択肢について、何と何を比較しているかを確認してください。
5-k. 2番目に大きい値
Section titled “5-k. 2番目に大きい値”以下の配列から、2番目に大きい値を見つけて出力してください。
const numbers = [34, 72, 15, 88, 43, 88, 61];最大値が複数ある場合(この例では 88 が2つ)、2番目に大きい値は 72 です。
ヒント
max(最大値)と secondMax(2番目に大きい値)の2つの変数を用意します。ループの中で、numbers[i] > max のときは secondMax に今の max を入れてから max を更新します。
5-l. フィボナッチ数列
Section titled “5-l. フィボナッチ数列”フィボナッチ数列の最初の 20 項を出力してください。フィボナッチ数列は、最初の2つが 0, 1 で、以降は直前の2つの数の合計です。
0112358132134...ヒント
const fib = [0, 1] のように最初の2項を入れた配列を用意します。3項目以降は fib[i - 1] + fib[i - 2] で求めて .push() で追加していきます。