課題 [6] 配列(6/9)

問 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 を代入する.)
④ 最後に,配列 xy の内容を実行例のかたちで出力する.

この問題では,入力される整数はすべて 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 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問7 (ex0607.c) ]