Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【初心者向け】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)をインクリメントしながら管理する

ぜひ実際にコードを書いて、動作を確認してみてください。

  1. 【初心者向け】C言語のポインタを使って配列要素の合計を計算する方法

    ポインタとは?ポインタ(Pointer)とは、他の変数のアドレス(メモリ上の場所)を格納するための変数のことです。例えば、次のような変数宣言を見てみましょう。int qty = 179;この場合、変数 qty には値 179 が格納されています。ポインタは、この qty が配置されているメモリ上のアドレスを保持することができます。ポインタの宣言ポインタを宣言する構文は以下の通りです。int *p;ここで p はポインタ変数であり、他の int 型変数のアドレスを保持します。宣言時には、変数名の前に間接演算子 *(アスタリスク)を付けます。ポインタの初期化ポインタ変数を初期化するには、アドレス演

  2. C言語入門:ネストされたforループとbreak・continue・goto文の使い方を徹底解説

    ネストされたforループ(二重ループ)とは、forループの本体の中に、さらに別のfor文が含まれている構造のことです。表や行列の操作、九九のような組み合わせ処理など、「繰り返しの中でさらに繰り返しが必要な場面」でよく使われます。全体の繰り返し回数は、外側のループの繰り返し回数 × 内側のループの繰り返し回数で求められます。ネストされたforループのサンプルプログラム以下は、ネストされたforループを使用したC言語のプログラム例です。#include<stdio.h> main( ){     int i,j;   &nbs