【C言語】abs関数を使わずに絶対値を計算するプログラムを自作する方法

C言語ではabs関数やfabs関数などを使うことでカンタンに絶対値を計算することができます。

ですが、abs関数を使わずに絶対値を計算したい場合はどうでしょうか?

プログラミング初心者でどういう処理を組んだりんだか分からないっていう方は参考にしてみてくださいね。

 
int abs(int a) {
    if (a < 0) {
        a *= -1;
    }
    return a;
}
クリップボードにコピーする

絶対値を求めるプログラムを作成する

絶対値を求めるプログラムを組む前に、どういう要件を満たせばいいのか整理しましょう。

  • 数値が正の値なら、変換する必要なし
  • 数値が負の値なら、正の値に変換する

この2つの要件を満たす必要があります。

一番カンタンなプログラム

絶対値を求める一番簡単な方は、if文を使ってマイナスの値だけ符号を変換する方法です。

 
int abs(int a) {
    if (a < 0) {
        a *= -1;
    }
    return a;
}
クリップボードにコピーする

プラスマイナスは、-1を掛けることによって入れ替えることができるので、if文を使ってマイナスの値だけ-1を掛けるようにすると絶対値を計算できます。

マクロを活用する

やっていることは先ほどのプログラムと同じですが、マクロを使うことでも絶対値を計算することが可能です。

 
#define abs(a) ((a)<0 ? -(a) : (a))

こちらの方法は型に依存しないため、int型でもfloat型でも関係なく利用できます。

最初の紹介した方法はint型の引数を受け取る関数にしているため、double型やfloat型の絶対値を計算することができません。

そのため、それぞれの型に対応した絶対値計算用関数を作成するとなると、このようになってしまいます。

 
int abs_i(int a) {
    if (a < 0) {
        a *= -1;
    }
    return a;
}
int abs_d(double a) {
    if (a < 0) {
        a *= -1;
    }
    return a;
}
int abs_f(float a) {
    if (a < 0) {
        a *= -1;
    }
    return a;
}
クリップボードにコピーする

ですが、マクロ使えばそれぞれの方に対応した関数を作らずとも、1つのabsマクロ関数だけで問題ありません。

 
abs(10); //OK
abs(3.14); //OK
abs(2.0f); //OK
クリップボードにコピーする

行数を減らせる賢い方法ですので、C言語標準ライブラリーのabs関数を使いたくないのであれば、絶対値を求めるマクロ関数を作成すると良いでしょう。

【ピックアップ】スッキリわかるC言語入門

ピックアップ

対象読者  プログラミング未経験~C言語初心者
どんな人に向いている? C言語の基礎を身につけたい方
おすすめ度 5
備考 ベストセラー1位獲得

C言語で最も挫折しやすいポインタを含む基礎をこれでもかというくらい丁寧に解説されているC言語入門書。

Amazonでベストセラー1位を獲得した実績もあり、C言語初心者全員におすすめできる一冊です。

まだ入門書を持っておらず、ネットの情報だけで独学しているという方は、「スッキリわかるC言語入門」を使えばもっと効率よくC言語が身につくでしょう。

コメント

タイトルとURLをコピーしました