課題 [9] 関数②(4/9)

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) ]