はじめに
この実験では、C プログラミング言語を使用して、ある数が完全平方数であるかどうかを判断する方法を学びます。完全平方数とは、整数を自身で乗じた積として表すことができる数のことです。たとえば、16 は 4 × 4 と等しいため完全平方数であり、25 は 5 × 5 と等しいため完全平方数です。
この実験の終了時には、完全平方数の概念を理解し、ユーザーが入力した数が完全平方数であるかどうかをチェックする C プログラムを書けるようになります。
完全平方数の理解
コーディングを始める前に、完全平方数とは何か、そしてある数が完全平方数であるかどうかを判断する方法を理解しましょう。
完全平方数とは、整数の 2 乗になる数のことです。言い換えると、n が整数であるとき、n² として書ける数です。
完全平方数の例:
- 1 = 1² (1 × 1)
- 4 = 2² (2 × 2)
- 9 = 3² (3 × 3)
- 16 = 4² (4 × 4)
- 25 = 5² (5 × 5)
ある数が完全平方数であるかどうかを判断するには、その数がある整数の 2 乗に等しいかどうかを調べます。
プロジェクト用のディレクトリを作成し、そのディレクトリに移動しましょう:
mkdir -p ~/project/perfect-square
cd ~/project/perfect-square

次に、プログラム用の新しい C ファイルを作成しましょう:
- WebIDE で、左側のファイルエクスプローラーパネルに移動します。
perfect-squareフォルダを右クリックし、「新しいファイル」を選択します。- ファイル名を
perfect_square.cとして、Enter キーを押します。
基本的なプログラム構造の作成
では、C プログラムの基本構造を作成しましょう。必要なヘッダーファイルをインクルードし、メイン関数を設定する必要があります。
ファイルエクスプローラーパネルで perfect_square.c ファイルをクリックして WebIDE で開きます。次に、以下のコードを追加します。
#include <stdio.h>
int main() {
int number;
// Prompt user for input
printf("Enter a number to check if it's a perfect square: ");
scanf("%d", &number);
// We will add code to check for perfect square in the next step
return 0;
}
コードを理解しましょう。
#include <stdio.h>- これは標準入出力ライブラリをインクルードします。このライブラリにはprintfやscanfなどの関数が用意されています。int main()- これはプログラムの実行が始まるメイン関数です。int number;- ユーザーの入力を格納するための整数型変数を宣言します。printf("Enter a number...");- これはユーザーにプロンプトを表示します。scanf("%d", &number);- これはユーザーから整数型の入力を読み取り、number変数に格納します。&演算子は入力が格納される変数のメモリアドレスを取得するために使用されます。
Ctrl + S を押すか、「ファイル」>「保存」をクリックしてファイルを保存します。
完全平方数チェックアルゴリズムの実装
では、ユーザーが入力した数が完全平方数であるかどうかをチェックするロジックを実装しましょう。ある数が完全平方数であるかどうかをチェックする方法はいくつかあります。ここでは、1 からその数までの整数の中に、その数と等しい 2 乗を持つものがあるかどうかをチェックする簡単なアプローチを使います。
perfect_square.c ファイルを以下のコードで更新します。
#include <stdio.h>
int main() {
int number;
int isPerfectSquare = 0; // Flag to indicate if number is perfect square
// Prompt user for input
printf("Enter a number to check if it's a perfect square: ");
scanf("%d", &number);
// Check if number is negative
if (number < 0) {
printf("%d is negative, and negative numbers cannot be perfect squares.\n", number);
return 0;
}
// Check if the number is a perfect square
for (int i = 0; i <= number; i++) {
if (i * i == number) {
isPerfectSquare = 1;
printf("%d is a perfect square. It is %d squared.\n", number, i);
break; // Exit the loop once we find the answer
}
// Optimization: If i*i exceeds number, no need to check further
if (i * i > number) {
break;
}
}
// If not a perfect square, inform the user
if (isPerfectSquare == 0) {
printf("%d is not a perfect square.\n", number);
}
return 0;
}
新しいコードを理解しましょう。
- 数が完全平方数であるかどうかを追跡するために、
isPerfectSquareフラグを追加しました。 - 負の数は完全平方数になり得ないため、数が負であるかどうかをチェックします。
forループを使って 0 からその数までを繰り返します。- ループの中で、
i * iがその数と等しいかどうかをチェックします。等しい場合、フラグを設定し、メッセージを表示してループを抜けます。 - 最適化として、
i * iがその数を超えた場合、以降の値もすべてその数を超えるため、チェックを中止します。 - 最後に、フラグがまだ 0 の場合、その数が完全平方数ではないことをユーザーに通知します。
ファイルを保存します(Ctrl + S または「ファイル」>「保存」)。
プログラムのコンパイルとテスト
完全平方数をチェックするコードが完成したので、コンパイルしてテストしましょう。C プログラムのコンパイルには GCC コンパイラを使用します。
コードが格納されているディレクトリに移動します(すでにそのディレクトリにいる場合は不要です)。
cd ~/project/perfect-square
プログラムをコンパイルします。
gcc perfect_square.c -o perfect_square
このコマンドは perfect_square.c をコンパイルし、perfect_square という名前の実行可能ファイルを作成します。コンパイルが成功すると、何も出力されません。
では、プログラムを実行しましょう。
./perfect_square

プログラムは数値の入力を求めます。異なる入力でテストしてみましょう。
完全平方数を入力します。例えば 16 を入力します。 出力は次のようになるはずです。
16 is a perfect square. It is 4 squared.完全平方数ではない数を入力します。例えば 10 を入力します。 出力は次のようになるはずです。
10 is not a perfect square.負の数を入力します。例えば -4 を入力します。 出力は次のようになるはずです。
-4 is negative, and negative numbers cannot be perfect squares.
異なる入力でテストするために、プログラムを複数回実行することができます。
エッジケースである 0 も試してみましょう。
./perfect_square
プロンプトが表示されたら 0 を入力します。
出力は次のようになるはずです。0 is a perfect square. It is 0 squared.
おめでとうございます!数が完全平方数であるかどうかをチェックする C プログラムを成功させました。
まとめ
この実験では、数が完全平方数であるかどうかを判定する C プログラムの作成方法を学びました。以下にカバーされた主要な概念をまとめます。
- 完全平方数は、整数の 2 乗として表すことができる数です。
- 変数、条件文、ループなどの基本的な C プログラミングの概念。
scanfを使用してユーザー入力を取得し、printfを使用して出力を表示する方法。- 各可能な値をテストすることで、数が完全平方数であるかどうかをチェックするためにループを使用する方法。
- 必要に応じてループを抜けることで、ソリューションを最適化する方法。
- 負の数やゼロなどのエッジケースを処理する方法。
この実験では、数学的な概念をプログラミングで実装する方法を示しました。与えられた数の次の完全平方数を見つける、または数が平方ではなく立方(n³)であるかどうかをチェックするなど、さらに多くの機能を追加することで、このプログラムを拡張することができます。



