C 言語でべき乗と指数を計算する方法

CBeginner
オンラインで実践に進む

はじめに

この実験では、C プログラミングでべき乗と指数を計算する方法を学びます。この実験は、主に 2 つのステップから構成されます。ユーザーから底と指数値を読み込み、次に手動ループまたは組み込みの pow() 関数を使用してべき乗を計算します。この実験の終わりまでに、多くの数学的および科学的なアプリケーションで基本的な操作である、C 言語でべき乗計算を実行する方法をしっかりと理解しているはずです。

底と指数の入力

このステップでは、C プログラムでべき乗を計算するために、底と指数値を入力する方法を学びます。ユーザーにこれらの値を入力するように促すシンプルなプログラムを作成します。

まず、~/project ディレクトリに新しい C ファイルを作成しましょう。

cd ~/project
nano power_calculation.c

次に、底と指数を入力するための以下のコードを入力します。

#include <stdio.h>

int main() {
    int base, exponent;

    // ユーザーに底の入力を促す
    printf("底の数を入力してください:");
    scanf("%d", &base);

    // ユーザーに指数の入力を促す
    printf("指数を入力してください:");
    scanf("%d", &exponent);

    // 入力された値を出力する
    printf("底:%d\n", base);
    printf("指数:%d\n", exponent);

    return 0;
}

プログラムをコンパイルして実行してみましょう。

gcc power_calculation.c -o power_calculation
./power_calculation

実行例:

底の数を入力してください: 5
指数を入力してください: 3
底: 5
指数: 3

コードの説明:

  • scanf() 関数は、ユーザーから整数を入力を読み取るために使用されます。
  • %d は整数のフォーマット指定子です。
  • &base&exponent は、入力値が格納されるメモリアドレスを渡します。
  • このプログラムは、単に底と指数値を読み取って表示するだけです。

このステップでは、ユーザーから必要な入力を取得することで、べき乗の計算のための基礎を築きます。

ループまたは pow() 関数を使用する

このステップでは、C 言語でべき乗を計算する 2 つの方法、手動ループと、math ライブラリから提供される組み込み関数 pow() を使用する方法を学びます。

まず、前の power_calculation.c ファイルを修正してべき乗計算を実装しましょう。

cd ~/project
nano power_calculation.c

方法 1: ループを使用する

#include <stdio.h>

int calculate_power_loop(int base, int exponent) {
    int result = 1;
    for (int i = 0; i < exponent; i++) {
        result *= base;
    }
    return result;
}

int main() {
    int base, exponent;

    printf("底の数を入力してください:");
    scanf("%d", &base);

    printf("指数を入力してください:");
    scanf("%d", &exponent);

    int power_result = calculate_power_loop(base, exponent);

    printf("%d の %d 乗は:%d\n", base, exponent, power_result);

    return 0;
}

方法 2: pow() 関数を使用する

#include <stdio.h>
#include <math.h>

int main() {
    int base, exponent;

    printf("底の数を入力してください:");
    scanf("%d", &base);

    printf("指数を入力してください:");
    scanf("%d", &exponent);

    // 注意:pow() は double を返します。int にキャストします
    int power_result = (int)pow(base, exponent);

    printf("%d の %d 乗は:%d\n", base, exponent, power_result);

    return 0;
}

プログラムをコンパイルする際は、math ライブラリもリンクする必要があります。

gcc power_calculation.c -o power_calculation -lm

実行例:

底の数を入力してください: 2
指数を入力してください: 3
2 の 3 乗は: 8

コードの説明:

  • ループメソッドは、底を指数回数掛け合わせることでべき乗を計算します。
  • math.hpow() 関数は、組み込みのべき乗計算を提供します。
  • コンパイル時に -lm フラグが必要になります。これは、math ライブラリをリンクするためです。
  • pow() の戻り値は double なので、int にキャストしています。

結果の出力

このステップでは、C 言語で結果を様々なフォーマットで表示する方法を示し、べき乗計算プログラムの出力をより詳細でフォーマットされたものにする方法を学びます。

power_calculation.c ファイルを修正しましょう。

cd ~/project
nano power_calculation.c

以下の包括的なコードを追加します。

#include <stdio.h>
#include <math.h>

void print_power_result(int base, int exponent, int result) {
    // 基本的な出力フォーマット
    printf("基本的な結果:%d^%d = %d\n", base, exponent, result);

    // 整列されたフォーマット出力
    printf("フォーマットされた結果:%2d の %2d 乗は %5d\n",
           base, exponent, result);

    // 大きな数値の場合の科学的表記
    printf("科学的表記:%d^%d = %.2e\n", base, exponent, pow(base, exponent));
}

int calculate_power_loop(int base, int exponent) {
    int result = 1;
    for (int i = 0; i < exponent; i++) {
        result *= base;
    }
    return result;
}

int main() {
    int base, exponent;

    printf("底の数を入力してください:");
    scanf("%d", &base);

    printf("指数を入力してください:");
    scanf("%d", &exponent);

    int power_result = calculate_power_loop(base, exponent);

    // 結果を出力する関数呼び出し
    print_power_result(base, exponent, power_result);

    return 0;
}

プログラムをコンパイルします。

gcc power_calculation.c -o power_calculation -lm

プログラムを実行します。

./power_calculation

実行例:

底の数を入力してください: 5
指数を入力してください: 3
基本的な結果: 5^3 = 125
フォーマットされた結果:  5 の  3 乗は  125
科学的表記: 5^3 = 1.25e+02

コードの説明:

  • print_power_result() は複数の出力フォーマットを示しています。
  • 基本的な出力は、単純な計算を示します。
  • フォーマットされた出力は、整列のために幅指定子を使用します。
  • 科学的表記は、大きな数値の場合に便利です。
  • %.2e は、2 つの小数点以下の精度で科学的表記で数値を表示します。

まとめ

この実験では、ユーザーから底と指数を入力を受け取り、手動ループと組み込みの pow() 関数の 2 つの異なる方法を使用してべき乗を計算する方法を学びました。ループベースのべき乗計算関数と pow() 関数呼び出しを実装し、その結果を比較しました。これにより、C プログラミングにおけるべき乗と指数を計算する異なるアプローチを理解することができました。