はじめに
プログラミングの世界では、整数という概念は不可欠な存在です。
特に、プログラミング言語であるC言語では、様々な計算や操作を行うために、整数の判定が頻繁に行われます。
本記事では、C言語における整数判定の手法を10のステップで学んでいきましょう。
それぞれのステップでは、サンプルコードを用いた詳細な説明を行い、実際にどのように動作するのかをご理解いただきます。
●整数とは
整数とは、0、1、-1、2、-2といったように、数直線上で負の無限大から正の無限大まで連続的に並んだ数字のことを指します。
これらは日常生活で頻繁に用いられる数値であり、プログラミングでも同様に頻繁に扱われます。
●C言語での整数の表現方法
C言語では、整数を表現するために「int」型を用います。
int型は整数を表現するための基本的な型であり、通常、-2147483648から2147483647までの範囲の整数を表現することができます。
なお、この範囲はコンパイラや環境により異なる場合があることを覚えておきましょう。
C言語で整数を宣言し、初期化する基本的なコードを紹介します。
このコードでは整数変数「num」を宣言し、その値を10に設定しています。
int num = 10;
このようにして整数はC言語内で表現され、様々な演算や処理に使用されます。
●整数の判定方法の基本
C言語で整数の判定を行う基本的な方法は、比較演算子を使う方法です。
比較演算子には、「==」(等しい)、「!=」(等しくない)、「<」(より小さい)、「>」(より大きい)、「<=」(以下)、「>=」(以上)などがあります。
○サンプルコード1:整数の判定
例えば、ある変数が特定の値と等しいかどうかを判定するためには、「==」演算子を用います。
次のサンプルコードでは、整数変数「num」が10であるかどうかを判定しています。
int num = 10;
if (num == 10) {
printf("numは10です。\n");
} else {
printf("numは10ではありません。\n");
}
このコードを実行すると、「numは10です。」と表示されます。
なぜなら、「num」の値は10であり、「num == 10」の条件が真と評価されるためです。
○サンプルコード2:負の整数の判定
また、ある変数が負の値であるかどうかを判定するには、「<」演算子を使用します。
次のサンプルコードでは、整数変数「num」が負の値であるかどうかを判定しています。
int num = -5;
if (num < 0) {
printf("numは負の整数です。\n");
} else {
printf("numは負の整数ではありません。\n");
}
このコードを実行すると、「numは負の整数です。」と表示されます。
なぜなら、「num」の値は-5であり、「num < 0」の条件が真と評価されるためです。
○サンプルコード3:正の整数の判定
正の整数を判定するには、「>」演算子を使用します。
次のサンプルコードでは、整数変数「num」が正の値であるかどうかを判定しています。
int num = 5;
if (num > 0) {
printf("numは正の整数です。\n");
} else {
printf("numは正の整数ではありません。\n");
}
このコードを実行すると、「numは正の整数です。」と表示されます。
なぜなら、「num」の値は5であり、「num > 0」の条件が真と評価されるためです。
これらのように、比較演算子を使うことで、様々な整数の判定を行うことができます。
●整数の判定の応用例
基本的な判定方法を理解したところで、それを応用した判定方法について見ていきましょう。
これから紹介する判定方法は、より具体的な条件を設けるための方法です。
○サンプルコード4:奇数と偶数の判定
C言語では、整数が奇数か偶数かを判断するために、「%」(モジュロ)演算子を使います。
モジュロ演算子は、一方の数値を他方の数値で割った余りを返します。
偶数を2で割ったときの余りは0になるため、この性質を利用して判定します。
下記のコードは、整数が奇数か偶数かを判定する例を表しています。
#include <stdio.h>
int main(void) {
int num;
printf("数字を入力してください:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("入力した数字%dは偶数です。\n", num);
} else {
printf("入力した数字%dは奇数です。\n", num);
}
return 0;
}
このコードでは、ユーザーからの入力を待つために「scanf」関数を使用しています。
そして、入力された数値が偶数であるかどうかを「if」ステートメントとモジュロ演算子を用いて判定しています。
もし入力された数値が偶数であれば、「printf」関数を使ってその旨をユーザーに通知し、そうでなければ数値が奇数であることをユーザーに通知します。
次にこのコードを実行してみましょう。
例えば、5を入力した場合の結果は次のようになります。
数字を入力してください:5
入力した数字5は奇数です。
このように、「%」演算子と「if」ステートメントを組み合わせることで、簡単に整数の奇数・偶数判定を行うことができます。
○サンプルコード5:範囲指定での整数判定
次に、特定の範囲内に整数が存在するかどうかを判定する方法を見てみましょう。
この判定方法は、数値がある範囲内にあるか、あるいは範囲外にあるかを確認する場合に非常に便利です。
下記のコードは、指定した範囲内に整数が存在するかどうかを判定する例を表しています。
#include <stdio.h>
int main(void) {
int num;
printf("数字を入力してください:");
scanf("%d", &num);
if (num >= 10 && num <= 20) {
printf("入力した数字%dは10から20の間に存在します。\n", num);
} else {
printf("入力した数字%dは10から20の範囲外に存在します。\n", num);
}
return 0;
}
このコードでは、「&&」(AND)演算子を使って10から20までの範囲に数値があるかどうかを判定しています。
「&&」演算子は、その左右の条件が両方とも真である場合に真を返します。
この場合、入力された数値が10以上かつ20以下であるとき、その数値は指定された範囲内に存在すると判定されます。
実行結果を見てみましょう。
15を入力すると、次のような結果が得られます。
数字を入力してください:15
入力した数字15は10から20の間に存在します。
このように、「&&」演算子を使うことで、ある範囲内に特定の数値が存在するかどうかを容易に判定できます。
○サンプルコード6:0と非0の判定
C言語では、0は偽、それ以外の数字は真として解釈されます。
したがって、0と非0の判定は非常に簡単に行うことができます。
その方法を次のサンプルコードで示します。
#include<stdio.h>
int main() {
int num;
printf("数字を入力してください:");
scanf("%d", &num);
if(num) {
printf("入力した数字は0ではありません。\n");
} else {
printf("入力した数字は0です。\n");
}
return 0;
}
このコードではscanf関数を使ってユーザーから整数の入力を受け付け、その数値が0か非0かを判定しています。
if文では、数値が0の場合には偽、それ以外の場合には真と解釈されます。
よって、この例ではnumが0でなければ”入力した数字は0ではありません。”を、numが0であれば”入力した数字は0です。”を出力します。
このコードを実行すると次のような結果になります。
まずは数値”5″を入力してみます。
数字を入力してください:5
入力した数字は0ではありません。
続いて、”0″を入力してみます。
数字を入力してください:0
入力した数字は0です。
このように、C言語では整数の0と非0の判定を直感的に記述することができます。
●C言語における整数の取り扱いの注意点
C言語では整数の扱いにいくつか注意が必要です。
特に、次の3点は覚えておきましょう。
①整数のオーバーフロー
C言語では整数の範囲が限定されています。
たとえば、int型の場合、通常は-2147483648から2147483647までの値を扱うことができます。
これを超えるとオーバーフローと呼ばれ、予期せぬ結果をもたらす可能性があります。
②符号なし整数
C言語にはunsignedというキーワードがあります。
これを利用すると、符号なしの整数、つまり0以上の整数を扱うことができます。
③型変換
異なる型の整数同士で演算を行う場合、型変換に注意が必要です。
例えば、int型の数値をfloat型の数値で割ると、結果もfloat型になります。
●整数判定のカスタマイズ方法
既存のC言語の機能を利用すれば、さまざまな方法で整数の判定を行うことが可能です。
○サンプルコード7:関数化でスッキリ!自作整数判定関数
一般に、特定の処理を何度も行う場合、それを関数として定義しておくとコードがスッキリします。
ここでは整数が正か負かを判定する関数を自作してみましょう。
#include<stdio.h>
// 関数の定義
int is_positive(int num) {
if(num > 0) {
return 1; // 正の場合は1を返す
} else {
return 0; // 0以下の場合は0を返す
}
}
int main() {
int num;
printf("数字を入力してください:");
scanf("%d", &num);
if(is_positive(num)) {
printf("入力した数字は正です。\n");
} else {
printf("入力した数字は0または負です。\n");
}
return 0;
}
このコードでは、まずis_positiveという関数を定義しています。
この関数は引数として整数を一つ取り、その整数が正であれば1を、それ以外であれば0を返します。
そして、main関数内でこのis_positive関数を使用しています。ユーザーから入力を受け取った後、その数値が正であるかをis_positive関数で判定し、結果に応じてメッセージを出力しています。
このコードを実行すると次のような結果になります。
まずは数値”5″を入力してみます。
数字を入力してください:5
入力した数字は正です。
続いて、”-3″を入力してみます。
数字を入力してください:-3
入力した数字は0または負です。
このように、関数を用いることでコードがスッキリし、再利用性も向上します。
○サンプルコード8:ユーザー入力による整数判定
次に、ユーザーからの入力を整数かどうか判定するためのコードをご紹介します。
このコードでは、scanf関数を使ってユーザーからの入力を受け取り、その入力が整数かどうかを判断します。
#include <stdio.h>
int main() {
int num;
printf("数値を入力してください:");
scanf("%d", &num);
if (num >= 0) {
printf("%dは整数です。\n", num);
} else {
printf("%dは整数ではありません。\n", num);
}
return 0;
}
このコードでは、まず数値を入力してもらうために、printf関数を使用してメッセージを表示しています。
次に、scanf関数を使ってユーザーの入力を受け取ります。
この時、受け取った入力が整数かどうかをif文を使って判断しています。
このコードを実行すると、まずユーザーに数値の入力を求めるメッセージが表示されます。
ユーザーが数値を入力しエンターを押すと、その数値が整数かどうかの判定結果が表示されます。
●整数の判定方法を生かしたプログラム作成
これまで学んできた整数の判定方法は、実際のプログラム作成において大変重要なスキルです。
その応用例として、素数判定プログラムとソートプログラムの作成方法をご紹介します。
○サンプルコード9:素数判定プログラム
下記のコードは、ユーザーが入力した数が素数(1とその数自身以外の数で割り切れない数)かどうかを判定するプログラムです。
#include <stdio.h>
int main() {
int num, i, flag = 0;
printf("数値を入力してください:");
scanf("%d", &num);
for(i = 2; i <= num / 2; i++) {
if(num % i == 0) {
flag = 1;
break;
}
}
if (flag == 0) {
printf("%dは素数です。\n", num);
} else {
printf("%dは素数ではありません。\n", num);
}
return 0;
}
このコードでは、入力された数値を2からその数の半分までの整数で順番に割り、割り切れるものがあれば素数ではないと判断します。
割り切れるものがなければ、その数は素数と判定します。
○サンプルコード10:ソートプログラム
最後に、複数の数値を整数として判定し、それらをソート(並べ替え)するプログラムを見てみましょう。
ここでは、C言語でよく使われるバブルソートのアルゴリズムを使用します。
#include <stdio.h>
void bubbleSort(int array[], int size) {
for (int step = 0; step < size - 1; ++step) {
for (int i = 0; i < size - step - 1; ++i) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
}
int main() {
int data[] = {-2, 45, 0, 11, -9};
int size = sizeof(data) / sizeof(data[0]);
bubbleSort(data, size);
printf("Sorted Array in Ascending Order:\n");
for (int i = 0; i < size; ++i) {
printf("%d ", data[i]);
}
return 0;
}
このプログラムでは、まずbubbleSortという関数を定義しています。
この関数は、引数として渡された配列をソートします。
そして、main関数ではこのbubbleSort関数を呼び出し、ソートした結果を表示します。
これらのコードは、学んだ整数の判定方法を実際のプログラム作成に生かした例です。
自分自身で色々なコードを書いて試し、理解を深めていくことが重要です。
まとめ
以上、C言語における整数判定の基本から応用までを学びました。
これらの知識は、C言語だけでなく他のプログラミング言語でも役立つことでしょう。
特に、整数判定はプログラムの安全性を高めるために必要不可欠なスキルです。
今回学んだ内容を忘れずに、これからもプログラミングの学習を進めていきましょう。