条件文を使わずに偶数・奇数を判定して表示するC言語プログラム
この記事では、比較演算子(<、<=、!=、>、>=、==)などの条件文を一切使わずに、数値が偶数か奇数かを判定して表示する方法を解説します。
通常、偶数・奇数の判定は条件文を使えば簡単に行えます。数値を2で割り、余りが0であれば偶数、そうでなければ奇数と判定できます。また、数値と1のビットごとのAND演算を行い、結果が0なら偶数、1なら奇数と判定する方法も一般的です。
しかし今回は条件文が使えないため、少し工夫が必要です。ここでは、条件文なしで偶数・奇数を判定する2つの方法を紹介します。
方法1:配列のインデックスを利用する
まず、文字列の配列を作成します。インデックス0には「Even(偶数)」、インデックス1には「Odd(奇数)」という文字列を格納しておきます。数値を2で割った余り(n % 2)は必ず0または1になるため、これをそのまま配列のインデックスとして使えば、条件分岐なしで結果を直接取得できます。
サンプルコード
#include<stdio.h>
main() {
int n;
char* arr[2] = {"Even", "Odd"};
printf("Enter a number: "); //ユーザーから数値を入力
scanf("%d", &n);
printf("The number is: %s", arr[n%2]); //余りをインデックスとして文字列を選択
}
実行結果1
Enter a number: 40 The number is: Even
実行結果2
Enter a number: 89 The number is: Odd
方法2:論理演算子とビット演算を組み合わせる
次に、2つ目の方法です。この方法では、論理演算子とビット演算子を組み合わせたテクニックを使用します。まず、数値と1のビットごとのAND演算(n & 1)を行います。最下位ビット(LSb)が1であれば演算結果は1になり、その数は奇数だと判定できます。
その後、論理AND(&&)を使って結果を表示します。ビットANDの結果が1の場合のみ論理ANDが真となり「odd(奇数)」が表示され、そうでなければ「even(偶数)」が表示されます。これはショートサーキット評価の仕組みを利用したテクニックです。
サンプルコード
#include<stdio.h>
main() {
int n;
char *arr[2] = {"Even", "Odd"};
printf("Enter a number: "); //ユーザーから数値を入力
scanf("%d", &n);
(n & 1 && printf("odd"))|| printf("even"); //n & 1は最下位ビットが1のとき1になるため、奇数と判定できる
}
実行結果1
Enter a number: 40 even
実行結果2
Enter a number: 89 odd
このように、条件文を使わなくても配列のインデックスや論理演算の特性を活かすことで、偶数・奇数の判定プログラムを簡潔に実装できます。ビット演算やショートサーキット評価の理解を深める良い練習例として、ぜひ参考にしてください。
-
【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装
はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題の概要 2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。 入力例 N = 10 K = 4 出力例 10 6 2 -2 2 6 10 アルゴリズムの考え方 N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。 加算と減算は同じ1つの関数
-
ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法
本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに