中間試験の復習,配列の課題

中間試験の答案・解答例・採点結果を確認し,復習問題に取り組もう. また,前回の授業の続きとして,課題にも取り組もう.


中間試験の答案返却

この授業時間中に解答例を提示します. 返却された答案と比較し,間違えた部分については復習しておこう.

もし,採点ミスがあれば,この授業時間中に申し出てください.


実習の準備

いつもの通り,作業用ディレクトリを準備しよう:

$  cd
$  mkdir  mtr-0622
$  cd  mtr-0622

ソースファイル編集方法:

$  vim  ソース.c
または
$  gedit  ソース.c  &

コンパイル・実行方法:

$  cc  ソース.c  -o  プログラム
$  ./プログラム

中間試験の復習問題

次の仕様・注意・実行例に従うプログラム sqrt.c を作成せよ.

前期中間試験の問4の類題です.

要求仕様:

注意事項:

実行例:

$  ./sqrt
非負整数 x > 0
√0 = 0
非負整数 x > 2
√2 = およそ 1
非負整数 x > 4
√4 = 2
非負整数 x > 10
√10 = およそ 3
非負整数 x > -1
終了.

本日の課題

試験成績(0 〜 100 の整数)を入力すると, 得点分布表を出力するプログラム histogram.c を作成せよ. ただし,得点欄には1桁目を切り捨てた点数を表示すること. (たとえば,得点 76 を入力すると,70 点台の人数としてカウントされる.) また,人数(データの個数)は無制限とする.

実行例:

$  ./histogram
得点(最後に -1)>  76  83  91  77  ...  -1

得点 人数
100 :  2
 90 :  6
 80 :  8
  .
  .
  .                                             
 10 :  1
  0 :  0        
ヒント:
  • 各得点範囲の人数データを記録するための配列を用意する.
  • 得点範囲が 0 点台,10 点台,20 点台,...,100 点の 11 段階なので, 配列は int count[11]

  • 人数が無制限なので,得点を記録するための配列は使わない.
  • ...というか,使えない. 得点を配列に記録しようとすると, 要素数(人数の上限)を事前(ソース作成時)に 固定しなければならなくなる.

  • 階級値(得点÷10 の整数値)が得点配列の要素番号となるので, その配列要素をインクリメントする.
  • 詳しく...得点の変数を int point とすると, count[point/10]++ すればよい. これは,たとえば point = 65 のとき, point/10 → 6 なので, つまり,count[6]++ となる. これで 60 点台が 1 人増えることになる. これを全入力データに対して繰り返す.

  • 配列要素の操作では,バッファオーバランに注意すること.
  • 配列要素は count[0]~count[10] だけ. count[11] とか count[-1] などの範囲外の要素を変更しようとはしないこと.

  • 結果表示の得点欄で1桁目を切捨てるには? この場合,割り算(得点÷10)ではなく,掛け算(階級値×10)を使えばよい. (逆転の発想.)
  • 結果表示では,変換指定子("%...")を工夫し レイアウトを整えよう.

余裕のある人は,人数を棒グラフ表示してみては?

得点 人数 グラフ
100 :  2 : **
 90 :  6 : ******
 80 :  8 : ********
  .
  .
  .
 10 :  1 : * 
  0 :  0 : 

提出:


(c) 2018, yanagawa@kushiro-ct.ac.jp