問 4(提出プログラム名:ex0404.c)
1 つの整数 n を読み込み,n の階乗(n!),つまり,1 から n までの整数をすべてかけた値を出力するプログラムを作成しなさい.ただし,必ず while 文を使うこと(do – while 文ではない)ならびに if 文は使わないこと.
なお,n は 0 以上 10 以下の整数であると仮定してプログラムを作ってよい.
提出するソースファイル(ソースプログラム)のファイル名は ex0404.c としなさい.
【ヒント】
階乗を求める手順(アルゴリズム)としては以下が考えられます:
(これから求める階乗を fact として)
① fact と k をいずれも 1 とする(ただし,fact と k は int 型の変数)
② k <= n である限り以下の③,④を繰り返す(while 文を使用):
③ fact *= k;
④ k++;
⑤ 最後に fact を出力する.
【注意】fact を 0 ではなく 1 で初期化している点に注意してください.
なぜなら,この場合は足し算ではなく掛け算を繰り返していくので, 0 を初期値にしていると答えはずっと 0 のままになってしまいます.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
以下のように表示は n! ではなく 6! になっている点に注意せよ.
n を入力してください:6 6! = 720⏎階乗の計算結果を出力した後の改行(\n)を入れ忘れないこと!
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
n を入力してください:10 10! = 3628800⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
n を入力してください:0 0! = 1⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)出力に入力値を使っておらず「n! =」のようにアルファベット表記になっている.
(例2)出力される数値が違っている.
■ 問題文の指示を見落としていて do-while 文で作ってしまっている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
ミスが無いことを確認したら次の問題へ → [ 問5 (ex0405.c) ]