練習 [3] プログラムの流れの分岐(5/5)

練習 5(提出プログラム名:p0305.c)※必須ではない

この練習問題は必須ではない(提出しなくてもよい)が適切に解けていれば加点の対象とする.

サンプルプログラム 5 (sample5.c)p0305.c という別の名前のファイルにコピーしなさい.そして,p0305.c を編集して以下の例のように実行できるプログラムを作りなさい.

このプログラムでは入力される 2 人の成績の差(絶対値)を a として,
 (1) a == 0 ならば:「全く同じですね」と表示する.
 (2) (1) ではないが a < 10 ならば:「ほぼ同じですね」と表示する.
 (3) (1), (2) ではないが a < 20 ならば:「差がつきましたね」と表示する.
 (4) 上のいずれもでもない場合:「勝負になりませんね」と表示する

絶対値 a を求めるにあたって,C 言語にはあらかじめ abs という関数が用意されていますが,これを使ってはいけません

【ヒント1】絶対値 |x-y| の求め方
a = x-y;
if ( a < 0 )

{
   a = -a;
}

【ヒント2】
この問題のように複数の if – else が必要な場合は以下のように書くと良いです:

 if ( a == 0 )
 {
   ....... ← 条件(1)が成り立つときの処理
 }
 else if ( a < 10 )
 ← ここを (a < 10) && (a != 0) と書く人がいますが,&& (a != 0) は不要です.
            1番目の if の条件が成立していないので,この時点で a != 0 なのは明らかです.
 {
   ...... ← 条件(1)は成り立たないが,条件(2)は成り立つときの処理
 }
 else if ( 条件(3) )

 {
   ...... ← 条件(1),(2) は成り立たないが,条件(3)
成り立つときの処理
 }
 else

 {
   ...... ← いずれも成り立たないときの処理
 }

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
2 人の成績を入力してください:70 70
全く同じですね
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
2 人の成績を入力してください:75 70
ほぼ同じですね
  • 【プログラムの実行例】(その3)赤字は実行時にキーボードから入力する内容
2 人の成績を入力してください:75 85
差がつきましたね
  • 【プログラムの実行例】(その4)赤字は実行時にキーボードから入力する内容
2 人の成績を入力してください:60 80
勝負になりませんね

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 上に示した4通りの実行例を試していない
ヒントを見落としていて,プログラムが必要以上にごちゃごちゃしている.
■ 条件として「a < 10」と書くべきところを「a <= 10」と書いてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


第3回(Cプログラミング;3 限目の方)の練習問題は以上の5問です.
p0301.c ~ p0305.c を Moodle から提出してください.※ただし,p0305.c は必須ではないです.
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.例年,講義資料や注意書きをよく読まずに提出する人が(ごく一部ですが)いて大変困っています
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.

【要注意】
例年,この第 3 回ではインデントの不備を指摘される受講生が非常に多いです.
自分は大丈夫だと過信せず,VSCode での自動インデントチェックを確実に行ってから提出してください.