問 6(提出プログラム名:ex0606.c)
まず,このプログラムをダウンロードして ex0606.c として保存しなさい.そして,これを編集して以下の処理①,②,③,④を実行するプログラムに仕上げなさい.
(ただし,ダウロードしたプログラムにおいて,処理④に対応する部分だけは既に完成している)
【実現したい処理】
① 長さ SIZE の int 配列 x と,同じく長さ SIZE の double 配列 y を用意する.
② 「数列(長さ5)を入力してください:」とメッセージを表示した後,
SIZE 個の整数を読み込んで,それらを配列 x へ格納する.
③ 配列 x 内の各要素がそれぞれ全体に対して占める割合を算出し,それぞれの割合を配列 y へ格納する.(例えば,配列 x 内の整数の合計が 20 であり,x[0] が 5 であったならば,それが占める割合は 25% なので y[0] には 0.25 を代入する.)
④ 最後に,配列 x と y の内容を実行例のかたちで出力する.
この問題では,入力される整数はすべて 1 以上であると仮定してプログラムを作ってよいものとする.
なお,プログラム中ではマクロの定義を除いて 5 や 4 という数字を直接書いてはいけません.
もちろん,合計値を x[0]+x[1]+x[2]+x[3]+x[4] と書いて求めるなどは論外である.
【ヒント】
処理②で SIZE 個の整数を読み込む際に,一緒に合計値も求めておくとよいです(合計を求める前に合計値のための変数を 0 に初期化するのも忘れないこと).
そして処理③では,x[i] をその合計値で割れば y[i] へ代入すべき割合が求まります.ただし,x[i] と合計値はいずれも int 型なので,x[i] の方を double 型へキャストして小数点以下切り捨てを防ぐ必要があります.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
数列(長さ5)を入力してください:5 3 2 4 6 ⏎ 配列内の各要素とその割合:⏎ [0] 5 (0.25)⏎ [1] 3 (0.15)⏎ [2] 2 (0.10)⏎ [3] 4 (0.20)⏎ [4] 6 (0.30)⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
数列(長さ5)を入力してください:1 1 1 1 100 ⏎ 配列内の各要素とその割合:⏎ [0] 1 (0.01)⏎ [1] 1 (0.01)⏎ [2] 1 (0.01)⏎ [3] 1 (0.01)⏎ [4] 100 (0.96)⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
数列(長さ5)を入力してください:5 5 5 5 5 ⏎ 配列内の各要素とその割合:⏎ [0] 5 (0.20)⏎ [1] 5 (0.20)⏎ [2] 5 (0.20)⏎ [3] 5 (0.20)⏎ [4] 5 (0.20)⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)処理④に該当する部分を書き換えてしまっている.
(例2)割り算でのキャストを忘れている.
■ マクロ SIZE を使わずに 5 や 4 と直接書いてしまっているところがある.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 5 (ex0605.c) ]
ミスが無いことを確認したら次の問題へ → [ 問7 (ex0607.c) ]