★基本制御文(while18)★


累乗(るい乗)または冪乗(べき乗)とは、簡単に言うと、2の3乗とか5の2乗といった計算です。

詳しくは「こちら」を見てください。


aのb乗という計算は、aをb回乗算することで出来ます。

まずは下のような計算が出来るプログラムを考えてみてください。

<実行結果>

元の数を入力してください:2
何乗するか入力してください:3
計算結果は8です。
続行するには何かキーを押してください・・・









































解答例を書く前に、皆さんの作ったプログラムがどこまで動作するか試してみましょう。

テストデータとして、次のような結果になるか試してみてください。

<実行結果>

元の数を入力してください:2
何乗するか入力してください:0
計算結果は1です。
続行するには何かキーを押してください・・・

これは、上のリンク先でも書いたようにどんな数の0乗も1になるという考えです。

もし、この答えが出ないようであればもう一度プログラムを考え直してみてください。









































解答例です。


<sample program 045-01>

#include <stdio.h>

int main(void)
{
    int input1;
    int input2;
    int answer;
    int counter;

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

    printf("何乗するか入力してください:");
    scanf("%d", &input2);

    counter = 0;

    answer = 1;

    while (counter < input2) {
        answer *= input1;
        counter++;
    }

    printf("計算結果は%dです。\n", answer);

    return 0;
}

<実行結果>

元の数を入力してください:2
何乗するか入力してください:0
計算結果は1です。
続行するには何かキーを押してください・・・

以前、合計を求めるプログラムを作りましたが、合計を求める際に必要なことは、合計を求めるための変数を「0」で初期化することでした。

「0」に様々な数を加算していくことで合計を求めていた訳です。

同じように累乗の計算をする際には、累乗を求めるための変数を「1」で初期化すれば上手くいきます。

このプログラムは次のような数を入力しても正しく結果が得られます。

<実行結果>

元の数を入力してください:-2
何乗するか入力してください:3
計算結果は-8です。
続行するには何かキーを押してください・・・

負の数の○乗という計算も負の数を「1」に乗算していくことで求められます。

もちろん、一回乗算する度に符号も変化していきます。

では、次の例はどうでしょうか。

<実行結果>

元の数を入力してください:2
何乗するか入力してください:-3
計算結果は1です。
続行するには何かキーを押してください・・・

これは正しい計算結果が得られませんね。

2の−3乗の正しい結果は「0.125」です。

2の−3乗とは、1/2(2分の1)を3回乗算するという意味ですから、1/8(8分の1)つまり「0.125」となります。

−○乗の場合、元の数の逆数を乗算することになりますので、これを踏まえたプログラムを考えてみましょう。

ちょっと難しいかも知れませんが、自分なりの解答を考えてみてください。

結果は小数になりますので、int型ではなくdouble型を使ってください。









































解答例です。


<sample program 045-02>

#include <stdio.h>

int main(void)
{
    double input1;
    double input2;
    double answer;
    int counter;

    double work1;
    double work2;

    printf("元の数を入力してください:");
    scanf("%lf", &input1);

    printf("何乗するか入力してください:");
    scanf("%lf", &input2);

    counter = 0;

    answer = 1;

    if (input2 < 0) {
        work1 = 1.0 / input1;
        work2 = -input2;
    }
    else {
        work1 = input1;
        work2 = input2;
    }

    while (counter < work2) {
        answer *= work1;
        counter++;
    }

    printf("計算結果は%fです。\n", answer);

    return 0;
}

<実行結果>

元の数を入力してください:2
何乗するか入力してください:-3
計算結果は0.125です。
続行するには何かキーを押してください・・・

解答例では、「work1」「work2」という作業用の変数を追加しています。

そして、何乗するかという数値が入っている「input2」が負数かどうかを調べています。

負数であった場合、「work1」に元の数の逆数を代入し、「work2」には「input2」からマイナス符号を除いたものを代入しています。

負数でない場合、「work1」には元の数をそのまま代入し、「work2」には何乗するかという数をそのまま代入しています。

こうすることによって、「work1」の数を「work2」の数だけ繰り返し乗算することが可能になります。

実行結果では、2の−3乗を行っていますが、「2」の逆数は1/2(2分の1)つまり「0.5」です。

「0.5」を3回乗算すると「0.125」になるという訳です。


3回に渡って、「乗算」「除算」「累乗」という基本的な計算を「加算」「減算」「乗算」を繰り返すことで行うということを行いました。

「累乗」以外は「*」や「/」という記号で簡単に行えますので、このようなプログラムを組む必要はないと書きました。

「累乗」に関しても、今後簡単に行う方法は説明していきます。

ですから、このようなプログラムを実際に組む必要はありませんし、このプログラムでは、「2の0.5乗」というような計算は出来ません。

あくまでも「繰り返し」を理解する一環としての課題だと思ってください。


次へ

戻る

目次へ