課題 [12] ポインタ②(1/9)

問 1(提出プログラム名:ex1201.c)
(これまでの復習:この問題は今回の「ポインタ」とは関係ありません)

(この問題は前回までに学んできた内容の復習問題であり,今回学んだ「ポインタ」とは関係ない.
解き方は各自の自由だが,
「配列を使ってはいけない」というルールは必ず守ること.)


まず,このプログラム(ex1201.c)をダウンロードしなさい.
そして,それを編集し,次の動作をするプログラムとして仕上げなさい.

【目的の動作】
最初に整数 n を読み込み(ただし,n は 1 以上と仮定してよい),
続いて n 人分の成績を読み込んで成績が「不可」に該当する人数を数えたい.
ただし,「評価しない」は「不可」とは異なるので間違えないこと.
成績は -1 以上 100 以下の整数として与えられ,それぞれ次のように解釈される.
   合格:60 以上 100 以下
   不可:0 以上 60 未満
   評価しない:-1

【注意】

この問題では n の値に上限が与えられていないので,配列を使ってはいけません
それから,次のような間違いをする人が比較的多いのでこれについても注意せよ:
最初に人数 nscanf で読み込んだ後,成績 x の読み込み scanf("%d", &x);n 回繰り返すことになるわけであるが,その繰り返しを for 文で作るにあたって
  for ( i = 0; i <= n; i++ )
と書いたり
  for ( i = 1; i < n; i++ )
と書いたりする人がたまにいる(どちらも間違い).上の for 文では n+1 回の繰り返しになっており,下の for 文では n-1 回の繰り返しになってしまっている点に注意せよ.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
5 60 -1 48 100 59
不可の人数 = 2
この場合は最初の「5」が人数を意味し,その後の 5 個の数字がそれぞれの成績を意味している.
a < data1201.txt
不可の人数 = 56

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 出力結果が上の実行例と違うきちんと確認していない).
■ プログラムの中で配列が使われてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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