問 4(提出プログラム名:ex0904.c)
このプログラム(ex0904.c)をダウンロードし,その中の関数 is_square を完成させなさい.
関数 is_square では,引数として与えられた整数 n が平方数かどうか,つまり,n がある整数の 2 乗になっているかどうかを判定するものとし,平方数ならば 1 を,そうでない場合は 0 を返すものとする.
なお,この関数の中で if 文は 1 回だけしか使ってはいけません.
ただし,関数 main の内容は一切書き換えないこと.
また,n は 1 以上の整数であると仮定してプログラムを作ってよい.
【注意】C 言語には,平方根を計算する sqrt という関数が標準ライブラリ関数として用意されているが(※ネットで検索すると出てくる),これを使ってはいけません.
【ヒント】
ここでは比較的単純な方法を紹介します(他にも方法はいろいろあります).
int 型変数 k を用意しておき,for 文で k の値を 1 以上 n 以下の範囲で 1 ずつ増やしていきます.
その繰り返しの中で,k の 2 乗が n に等しければ(n が平方数と分かったので) return 1; を実行して関数そのものの実行を終了させます(break ではなく return を用います).
一方,上の for 文が終わった後には return 0; とだけ書いておきます.
「for 文の繰り返しが最後まで続いた」ということは,n は平方数ではなかったことになりますので,最後に 0 を判定結果として返すというわけです.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
正の整数を入力してください:16 16 は平方数です⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
正の整数を入力してください:17 17 は平方数ではありません⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
※作り方に微妙なミスがあると,この実行例 3 だけ結果が違っていることがあります.
正の整数を入力してください:1 1 は平方数です⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
例えば,実行例3だけ結果が違っている.
■ main 関数を書き換えてしまっている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
ミスが無いことを確認したら次の問題へ → [ 問5 (ex0905.h) ]