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

ポインタを使用してユーザーが入力した配列の種類(偶数・奇数・混在)を判定するCプログラム


問題概要

C言語で、ポインタを使用しながら、配列に格納された要素が「すべて偶数」「すべて奇数」「偶数と奇数の混在」のどのタイプに該当するのかを判定し、その結果を出力するプログラムの作成方法を解説します。

解決方法

まずユーザーに整数の配列を入力してもらい、その後プログラムが配列の種類を自動的に判定して画面に表示します。

  • 例1: 入力「5 3 1」→ 出力「奇数の配列(Odd)」
  • 例2: 入力「2 4 6 8」→ 出力「偶数の配列(Even)」
  • 例3: 入力「1 2 3 4 5」→ 出力「混在の配列(Mixed)」

アルゴリズム

ポインタを使って、ユーザーが入力した配列の種類を判定するための手順は以下のとおりです。

  1. 実行時に配列のサイズを読み込む。
  2. 配列の各要素を入力する。
  3. ポインタ変数を宣言する。
  4. ポインタ変数を使って、配列のすべての要素が奇数かどうかを確認する。すべて奇数であれば「Odd」と出力する。
  5. 同様に、すべての要素が偶数かどうかを確認する。すべて偶数であれば「Even」と出力する。
  6. どちらにも当てはまらない場合は「Mixed」と出力する。

サンプルコード

以下が、ポインタを使用してユーザーが入力した配列の種類を判定するCプログラムの例です。

#include<stdio.h>
#include<stdlib.h>

int *createArray(int);
void readArray(int, int *);
void findType(int, int *);

int main(void){
    int *a = NULL;
    int n;

    printf("Enter the size of array\n");
    scanf("%d", &n);

    printf("Enter the elements of array\n");
    a = createArray(n);
    readArray(n, a);
    findType(n, a);

    free(a);
    return 0;
}

int *createArray(int n){
    int *a;
    a = (int *)malloc(n * sizeof(int));
    return a;
}

void readArray(int n, int *a){
    for(int i = 0; i < n; i++){
        scanf("%d", (a + i));
    }
}

void findType(int n, int *a){
    int even = 0, odd = 0;

    for(int i = 0; i < n; i++){
        if(*(a + i) % 2 == 0){
            even++;
        } else {
            odd++;
        }
    }

    if(even == n){
        printf("The array type is Even\n");
    }
    if(odd == n){
        printf("The array type is Odd\n");
    }
    if(even != n && odd != n){
        printf("The array type is Mixed\n");
    }
}

コードのポイント

  • createArray() 関数では malloc() を使って、入力された要素数分のint型メモリ領域を動的に確保し、その先頭アドレスを返しています。
  • readArray() 関数では、ポインタ演算 (a + i) によって各要素のアドレスを計算し、そこへ直接値を読み込みます。
  • findType() 関数では、間接参照 *(a + i) で各要素の値を取り出し、2で割った余りを調べることで偶数・奇数の個数をカウントし、配列全体のタイプを判定します。
  • 使用後のメモリは free() で解放し、メモリリークを防いでいます。

実行結果

上記のプログラムをコンパイルして実行すると、次のような出力が得られます。

Enter the size of array
4
Enter the elements of array
12
14
16
18
The array type is Even

この例では、入力された4つの要素(12, 14, 16, 18)がすべて偶数であるため、プログラムは「Even(偶数の配列)」と正しく判定しています。もし入力がすべて奇数なら「Odd」、偶数と奇数が混ざっていれば「Mixed」と表示されます。

  1. C言語の線形探索で配列内の最小値を見つける方法を徹底解説

    C言語の探索アルゴリズムの種類C言語で使われる代表的な探索手法は、大きく分けて以下の2つです。線形探索(リニアサーチ)二分探索(バイナリサーチ)線形探索とは線形探索は、配列の先頭から順番に要素を一つずつ比較しながら目的のキーを探す、最も基本的な探索アルゴリズムです。データがソート(整列)されていなくても使用できる実装が非常にシンプルで理解しやすい欠点:データ数が多いほど処理時間が長くなり、システムの効率を低下させる可能性がある入出力のイメージは以下の通りです。入力:ソートされていない要素のリスト、探索キー出力:・成功 … キーが見つかった場合・失敗 … キーが見つからなかった場合例1:線形探索

  2. C言語で配列の全要素の積を求めるプログラム

    n個の要素を含む配列 arr[n] が与えられたとき、その配列内のすべての要素の積を求めることが課題となります。例えば、7つの要素からなる配列 arr[7] の場合、積は以下のように計算されます。例入力: arr[] = { 10, 20, 3, 4, 8 } 出力: 19200 説明: 10 × 20 × 3 × 4 × 8 = 19200 入力: arr[] = { 1, 2, 3, 4, 3, 2, 1 } 出力: 144解き方のアプローチ配列を入力として受け取る。配列のサイズを求める。配列を反復処理しながら、各要素を掛け合わせる。結果を表示する。アルゴリズム開始 関数 int pro