問 4(提出プログラム名:ex0604.c)
整数 n を読み込み,その値を以下の手順に従って 2 進法で出力するプログラムを作りなさい.
(以下の手順に従っていない場合,正しく動作しても不正解と見なされるので注意せよ.)
ただし,出力する 2 進数のビット長はマクロ SIZE で定義されるものとする.
この問題ではマクロ SIZE の値を 8 と定義し,整数 n は 1 以上 256 未満であると仮定してプログラムを作ってよい.
提出するソースファイル(ソースプログラム)のファイル名は ex0604.c としなさい.
なお,プログラムの中ではマクロ定義部分を除いて 8 や 7 と直接書いてはいけません.必要ならば SIZE や SIZE-1 と書きなさい.
【手順】
ここでは,2 進法表記を格納するための int 配列を bin とする.
① 最初に読み込んだ n を別の int 型変数 x にコピーする.(x = n;)
② for ( i = 0; i < SIZE; i++ ){ ... } として③,④の処理を繰り返す:
③ x を 2 で割った余りを bin[i] に代入する( bin[i] = x % 2;)
④ x を x/2 で上書きする( x /= 2; )※小数点以下は切り捨てるのでキャストは不要.
⑤ 上の for 文が終わった後に配列 bin の内容を逆順に出力する.
(※表示するだけです.
数字を逆順に入れ替えたり,別の配列へ逆順にコピーしたりしてはいけません.)
※なぜ上の手順で 2 進法表記が得られるのかについては,
1 年生の「情報リテラシー入門」の教科書を参照せよ.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
※ 2 進法表記での 0 や 1 は途中に空白を入れずにくっつけて表示させること
(01101100 を 0 1 1 0 1 1 0 0 としないこと)
n を入力してください:108 108 は 2 進法表記で 01101100 になります⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
n を入力してください:254 254 は 2 進法表記で 11111110 になります⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
n を入力してください:7 7 は 2 進法表記で 00000111 になります⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)「▲ は 2 進法表記で」の「▲」が実際に入力した n の値になっていない.
(例2)出力された 2 進数が間違っている(逆順になっていない,1 個ずれている等).
(例3)出力された 2 進数の前後に不要な空白が入っている
(実行例1の場合: 01101100 になっておらず 0 1 1 0 1 1 0 0 となっている).
■ 問題文で指示された手順に従っていない.
■ マクロ SIZE を使わずに for 文の繰り返し条件で 8 や 7 といった数字を直接書いている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
ミスが無いことを確認したら次の問題へ → [ 問5 (ex0605.c) ]