【初心者向け】C言語のforループで配列内の偶数と奇数を分離する方法
配列(Array)とは、関連性のある複数のデータ項目を、たった一つの名前でまとめて管理できるデータ構造のことです。
例えば「int student[30];」と宣言すると、studentという名前の配列変数ひとつで、30個分のデータを格納できます。
配列に対する主な操作
検索(Searching) − 特定の要素が配列内に存在するかどうかを調べる操作です。
ソート(Sorting) − 配列内の要素を昇順または降順に並べ替える操作です。
走査(Traversing) − 配列内のすべての要素を先頭から順番に処理していく操作です。
挿入(Inserting) − 配列に新しい要素を追加する操作です。
削除(Deleting) − 配列から不要な要素を取り除く操作です。
偶数を取り出すロジック
配列の中から偶数だけを抽出するには、剰余演算子「%」を使い、各要素を2で割った余りが0かどうかを判定します。具体的には以下のように記述します。
for(i = 0; i < size; i ++){
if(a[i] % 2 == 0){
even[Ecount] = a[i];
Ecount++;
}
}奇数を取り出すロジック
同様に、奇数だけを抽出する場合は、2で割った余りが0以外であるかどうかで判定します。ロジックは次の通りです。
for(i = 0; i < size; i ++){
if(a[i] % 2 != 0){
odd[Ocount] = a[i];
Ocount++;
}
}結果の表示方法
偶数を画面に表示するには、以下のように表示用のdisplay関数を呼び出します。
printf("no: of elements comes under even are = %d \n", Ecount);
printf("The elements that are present in an even array is: ");
void display(int a[], int size){
int i;
for(i = 0; i < size; i++){
printf("%d \t ", a[i]);
}
printf("\n");
}奇数を表示する場合も、同じdisplay関数を使って以下のように呼び出すだけでOKです。
printf("no: of elements comes under odd are = %d \n", Ocount);
printf("The elements that are present in an odd array is : ");
void display(int a[], int size){
int i;
for(i = 0; i < size; i++){
printf("%d \t ", a[i]);
}
printf("\n");
}プログラム全体
以下は、forループを使用して配列内の偶数と奇数を分離するC言語の完全なサンプルプログラムです。ユーザーから配列のサイズと各要素を入力してもらい、偶数・奇数それぞれの個数と内容を出力します。
#include<stdio.h>
void display(int a[], int size);
int main(){
int size, i, a[10], even[20], odd[20];
int Ecount = 0, Ocount = 0;
printf("enter size of array :\n");
scanf("%d", &size);
printf("enter array elements:\n");
for(i = 0; i < size; i++){
scanf("%d", &a[i]);
}
for(i = 0; i < size; i ++){
if(a[i] % 2 == 0){
even[Ecount] = a[i];
Ecount++;
}
else{
odd[Ocount] = a[i];
Ocount++;
}
}
printf("no: of elements comes under even are = %d \n", Ecount);
printf("The elements that are present in an even array is: ");
display(even, Ecount);
printf("no: of elements comes under odd are = %d \n", Ocount);
printf("The elements that are present in an odd array is : ");
display(odd, Ocount);
return 0;
}
void display(int a[], int size){
int i;
for(i = 0; i < size; i++){
printf("%d \t ", a[i]);
}
printf("\n");
}実行結果
上記のプログラムをコンパイルして実行すると、以下のような結果が出力されます。
enter size of array: 5 enter array elements: 23 45 67 12 34 no: of elements comes under even are = 2 The elements that are present in an even array is: 12 34 no: of elements comes under odd are = 3 The elements that are present in an odd array is : 23 45 67
入力された5つの値のうち、偶数は「12」と「34」の2個、奇数は「23」「45」「67」の3個として正しく振り分けられていることが確認できます。
まとめ
このように、forループとif文を組み合わせ、剰余演算子「%」で各要素を2で割った余りを調べることで、配列内の偶数と奇数を簡単に分離できます。ポイントは以下の2つです。
「a[i] % 2 == 0」なら偶数、それ以外なら奇数として別々の配列へ格納する
それぞれの個数カウンター(Ecount / Ocount)をインクリメントしながら管理する
ぜひ実際にコードを書いて、動作を確認してみてください。
-
【初心者向け】C言語のポインタを使って配列要素の合計を計算する方法
ポインタとは?ポインタ(Pointer)とは、他の変数のアドレス(メモリ上の場所)を格納するための変数のことです。例えば、次のような変数宣言を見てみましょう。int qty = 179;この場合、変数 qty には値 179 が格納されています。ポインタは、この qty が配置されているメモリ上のアドレスを保持することができます。ポインタの宣言ポインタを宣言する構文は以下の通りです。int *p;ここで p はポインタ変数であり、他の int 型変数のアドレスを保持します。宣言時には、変数名の前に間接演算子 *(アスタリスク)を付けます。ポインタの初期化ポインタ変数を初期化するには、アドレス演
-
C言語入門:ネストされたforループとbreak・continue・goto文の使い方を徹底解説
ネストされたforループ(二重ループ)とは、forループの本体の中に、さらに別のfor文が含まれている構造のことです。表や行列の操作、九九のような組み合わせ処理など、「繰り返しの中でさらに繰り返しが必要な場面」でよく使われます。全体の繰り返し回数は、外側のループの繰り返し回数 × 内側のループの繰り返し回数で求められます。ネストされたforループのサンプルプログラム以下は、ネストされたforループを使用したC言語のプログラム例です。#include<stdio.h> main( ){ int i,j; &nbs