練習 4(提出プログラム名:p1404a.c)
まず,このプログラム(p1404a.c)をダウンロードしなさい.
p1404a.c ではデータファイルに記載されている成績データを処理し,
そのヒストグラムを別のファイルへ出力しようとしている.
具体的には,main で入力データファイルの名前と出力ファイル名を読み込んだ後,
それぞれのファイルを読み込みモード及び書き出しモードでオープンする.
そして,関数 make_hist を使って,入力データファイルから成績(0~100 の整数)を読み込み,
ヒストグラムの元となる度数分布データを配列 hist[] へ格納する.
ただし,データファイルには何人分の成績が書かれているかは事前には分からず,
データの末尾に -1 が記載されていることしか知らされていない.
続いて,関数 print_hist を使って,配列 hist の内容を実行例のように
ヒストグラムのかたちで出力ファイルへ書き出す.
関数 make_hist と print_hist を完成させなさい.
なお,配列 hist は長さ 11 の int 配列となっており,
hist[0] には 0~9 点の人数,
hist[1] には 10~19 点の人数,
…
hist[9] には 90~99 点の人数,
hist[10] には 100 点の人数が入るものとする.
【ヒント】
点数を x としたとき,x/10 の値が配列 hist の添字として使えます
(ただし,小数点以下は切り捨て).
例えば,x=27 の場合,hist[2] の値を +1 することになりますが,
この添字の 2 というのは x/10 で求まります.
- 【プログラムの実行例】(その1)※赤字は実行時にキーボードから入力する内容
※データファイル(data1404a1.txt)はここからダウンロード
データファイル名を入力してください(64文字未満)⏎ > data1404a1.txt 出力先のファイル名を入力してください(64文字未満)⏎ > hist1.txt以下は hist1.txt の内容
0 -- 9: *⏎ 10 -- 19: *⏎ 20 -- 29: *⏎ 30 -- 39: *⏎ 40 -- 49: ⏎ 50 -- 59: ***⏎ 60 -- 69: ⏎ 70 -- 79: *⏎ 80 -- 89: *⏎ 90 -- 99: **⏎ 100: *⏎
- 【プログラムの実行例】(その2)※赤字は実行時にキーボードから入力する内容
※データファイル(data1404a2.txt)はここからダウンロード
データファイル名を入力してください(64文字未満)⏎ > data1404a2.txt 出力先のファイル名を入力してください(64文字未満)⏎ > hist2.txt以下は hist2.txt の内容
0 -- 9: ⏎ 10 -- 19: ⏎ 20 -- 29: ⏎ 30 -- 39: *⏎ 40 -- 49: **************⏎ 50 -- 59: **********************⏎ 60 -- 69: *********************************⏎ 70 -- 79: **************************⏎ 80 -- 89: **********************⏎ 90 -- 99: *********⏎ 100: **⏎
【過去にあったミス(減点となり,やり直しを命じられる)】
■ 2種類の実行例を確認せずに提出してしまっている.
■ 出力されるヒストグラムが実行例とは違っている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 練習3 (p1403a.c) ]
ミスが無いことを確認したら次の問題へ → [ 練習5 (p1405a.c) ]