演習: 関数
6-a. 挨拶する関数
Section titled “6-a. 挨拶する関数”名前を引数として受け取り、"○○さん、こんにちは" と出力する関数 greet を作成してください。
greet("田中");greet("鈴木");出力例:
田中さん、こんにちは鈴木さん、こんにちはヒント
本文 3-1 のコード例と同じ構造です。
6-b. 面積を返す関数
Section titled “6-b. 面積を返す関数”縦と横を引数として受け取り、長方形の面積を 返す 関数 calcArea を作成してください。出力は関数の外で行います。
const area1 = calcArea(5, 3);const area2 = calcArea(10, 7);
console.log(area1);console.log(area2);出力例:
1570ヒント
console.log() ではなく return を使って結果を返します。
6-c. 関数の出力予測
Section titled “6-c. 関数の出力予測”以下のコードの出力結果を予測してから実行してください。
function double(x) { return x * 2;}
let value = 3;
value = double(value);console.log(value);
value = double(value);console.log(value);
value = double(value);console.log(value);ヒント
double(3) は 6 を返します。その 6 が value に入り、次の double(value) では double(6) が実行されます。
6-d. 大きいほうを返す関数
Section titled “6-d. 大きいほうを返す関数”2 つの数値を引数で受け取り、大きいほうの値を返す関数 getMax を作成してください。2 つの値が等しい場合は、どちらを返しても構いません。
console.log(getMax(30, 45));console.log(getMax(100, 50));console.log(getMax(7, 7));出力例:
451007ヒント
本文 5-1 の getMax と同じです。if で比較して、大きいほうを return します。
6-e. 戻り値を使った計算
Section titled “6-e. 戻り値を使った計算”単価と個数から小計(単価 × 個数)を返す関数 calcSubtotal を作成してください。その関数の戻り値を別の計算に使い、以下の 2 種類の商品の合計金額に 10% の消費税を加えた税込み金額を計算して出力してください。
- 商品 A: 単価 500 円、3 個
- 商品 B: 単価 200 円、5 個
出力例:
2750ヒント
calcSubtotal(500, 3) と calcSubtotal(200, 5) の戻り値をそれぞれ変数に入れ、それらを足した値に消費税を加算します。本文 4-3 の calcSubtotal の例と同じ流れです。
6-f. 最小値を返す関数
Section titled “6-f. 最小値を返す関数”配列を引数として受け取り、最小値を返す関数 findMin を作成してください。
console.log(findMin([45, 12, 78, 34, 6, 91]));console.log(findMin([100, 200, 50]));出力例:
650ヒント
本文 5-2 の findMax と同じ構造です。比較の向きを逆にしてください。
6-g. 穴埋め: 最大値の初期化
Section titled “6-g. 穴埋め: 最大値の初期化”以下の関数 findMax は配列の最大値を返します。/* ??? */ に入るコードを、選択肢から選んでください。
function findMax(arr) { let max = /* ??? */;
for (let i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } }
return max;}選択肢:
- (ア)
0 - (イ)
arr.length - (ウ)
arr[0] - (エ)
arr[arr.length - 1]
ヒント
max は「今のところ一番大きい要素」を表す変数です。ループは i = 1 から始まるので、arr[0] は max の初期値を通してしか比較されません。以下の配列で各選択肢がどう動くか考えてみてください。
[-5, -3, -8](全要素が負の数)[99, 1, 2, 3](最初の要素が最大)
6-h. 配列の合計を返す関数
Section titled “6-h. 配列の合計を返す関数”配列を引数として受け取り、全要素の合計を返す関数 calcSum を作成してください。
console.log(calcSum([80, 65, 90, 70, 85]));console.log(calcSum([10, 20, 30]));出力例:
39060ヒント
本文 5-3 の calcSum と同じです。合計を保持する変数を 0 で初期化し、ループで各要素を足していきます。
6-i. 偶数の個数を返す関数
Section titled “6-i. 偶数の個数を返す関数”配列を引数として受け取り、偶数の個数を返す関数 countEven を作成してください。
console.log(countEven([1, 2, 3, 4, 5, 6]));console.log(countEven([7, 9, 11]));出力例:
30ヒント
カウント用の変数を 0 で初期化し、偶数が見つかるたびに 1 を足します。最後にカウントを return で返します。
6-j. 早期リターン
Section titled “6-j. 早期リターン”購入金額に応じた割引率(%)を返す関数 getDiscountRate を、早期リターンを使って作成してください。
| 条件 | 戻り値 |
|---|---|
| 金額が負の値 | -1(不正な値) |
| 3,000 円未満 | 0 |
| 10,000 円未満 | 5 |
| 10,000 円以上 | 10 |
console.log(getDiscountRate(-100));console.log(getDiscountRate(1500));console.log(getDiscountRate(5000));console.log(getDiscountRate(20000));出力例:
-10510ヒント
本文 4-4 の checkAge と同じパターンです。条件式を上から順に評価し、true になった時点で return で値を返します。return が実行されると関数はそこで終わるので else を書く必要はありません。
6-k. 戻り値の出力予測
Section titled “6-k. 戻り値の出力予測”以下のコードの出力結果を予測してから実行してください。
function mystery(arr) { let result = 0;
for (let i = 0; i < arr.length; i++) { if (arr[i] > 0) { result = result + arr[i]; } }
return result;}
console.log(mystery([3, -1, 4, -2, 5]));console.log(mystery([-3, -1, -4]));ヒント
arr[i] > 0 は「正の数かどうか」の判定です。配列の各要素を順に見て、この関数が何を計算しているかを考えてください。
6-l. 平均より高い値の個数
Section titled “6-l. 平均より高い値の個数”配列を引数として受け取り、配列の平均値より高い値の個数を返す関数 countAboveAverage を作成してください。
console.log(countAboveAverage([80, 65, 90, 70, 85]));console.log(countAboveAverage([50, 60, 70, 80, 90]));console.log(countAboveAverage([100, 100, 100]));出力例:
320ヒント
配列を 2 回走査します。1 回目のループで合計を求めて平均を計算し、2 回目のループで平均より大きい要素を数えます。平均の計算には本文 5-3 の calcSum と同じパターンが使えます。