Final2022comment

From Prog0

Jump to: navigation, search

問1

全般的に、出来不出来が二極化していました。

問題文をよく読んで、問題文にある定義や式を理解することが重要です。

(2), (6)の問題は、1つの浮動小数点変数の絶対値を計算する関数の定義に関する問題ですが、 相対誤差の定義と混同して、2つの値を引数とする関数定義をした解答が比較的多くありました。 絶対値の定義を誤解した、この類似の解答は、(2),(6)とも0点になります。

(3) 方程式の解をプログラムとして書く問題です。括弧の対応があっていない解答が比較的多くありました。

(4) 相対誤差の計算が間違っている解答が非常に多かったです。問題文の定義通りに記述するだけです。

(5) a + 1/a とした誤りが多くありました。

問2

  • 全体的によくできていました.
  • 22行目の複雑な式に惑わされている人が散見されました.
  • 戻り値や仮引数の型,変数名が整合しているか注意してコードを見るようにしましょう.

問3

全体的に、かなり出来が良くなかったようです。

(1) 出来ている人もいましたが、scanf の戻り値の意味が分かっていないと思われる答案も多かったです。==0 はファイル末尾で真にならないので誤りです。 (戻り値 0 は、入力終了ではなく、数字を入れるべき所に文字を入力した場合などに発生します)

(3) は & の付け忘れが多いです。演習でも試験でも、非常によくあるミスなので、scanf 使用時はいつも注意が必要です。

(4) は意外に出来が良くなかったです。num++ としている人が結構いましたが、(4)はループの外なので、 ここでカウンタを +1 しても入力数をカウントできません。ループ脱出時にループカウンタ( i )がループ内で処理を行った回数に等しくなる、 というのは頻出するテクニックなので、ぜひ覚えて下さい。

(6) score[i][j] とすべきところを score[i-1][j] としている人が結構いました。i が 1 から始まっているのに引きずられたのだと思いますが、 それだと score[num-1][j] が比較されないままになってしまいます。

また、 hind[j]=i; のところを hind[j]=sid[i]; として、(7) で hind[j] を出力している答案も多かったです。 これは一見うまく行きそうですが、最初の学生が最高得点のときは if 文の { } 内が一度も実行されないので、hind[j] は初期値 0 のままで、学生番号の出力になりません。

なお、(6) で forループを使わず3科目分書き下している答案については、合っている程度に応じて部分点を出しています。

Personal tools