2017-03-30 3 views
1

Cでは、aとbの積を計算する関数を持っています。 <bがfalseを返す場合はfalseを返し、そうでない場合はtrueを返します。関数がbooleanとして定義されている場合、どのようにして製品を返すことができますか?ブール値を返すと同時に倍増する方法boolとdoubleを同時に返す方法は?

bool multiplication(int a, int b) 
{ 
    int c = a*b; 
    if (a < b) 
     return false; 
    else 
     return true; 
} 
+1

あなたの関数名は、誤解を招くほどのものです。 'multiplication'という名前の関数は、それが乗算されることを意味し、ブール値の等価性テストを返しません。 –

+2

または、いくつかの 'int *'パラメータを出力パラメータとして使うことができます。 – Holsety

+0

これは再帰関数です。したがって、終了時を指定するブール値を返します。 –

答えて

1

ありますが、同時に、ブールとダブルを返すために使用できることを心に来るいくつかの方法があります。

  1. 戻り、戻り値としてブール値と出力パラメータとしてdoubleを返します。
  2. ブール値を1つのフィールドに、double値を別のフィールドとして持つ構造体を返します。
  3. ブール値を戻り値として返し、グローバル変数を使用してdouble値を返します。

    bool multiplication(int a, int b, double* product) 
    { 
        *product = a * b; 
        return a >= b; 
    } 
    

    そして:

    struct retval { 
        bool b; 
        double p; 
    } 
    
    struct retval multiplication(int a, int b) 
    { 
        struct retval result; 
        result.b = a >= b; 
        result.p = a * b; 
        return result; 
    } 
    

    そして最後に:これらの

    double product; 
    
    bool multiplication(int a, int b) 
    { 
        product = a * b; 
        return a >= b; 
    } 
    

    、二ここ

は、これらのソリューションのためのコードは、それぞれどのように見えるかですソリューションは、 boolを返さないように正確に質問に合ってください(代わりに、Cで他の弱点を持つことができるstructを返します)。第3の解決策は、私が大域的な使用を強く嫌うためです。(グローバルは単体テストをより困難にし、use関数を純粋な関数にすることができ、スレッドの問題を引き起こします。

これで最初の解決策が残ります。

これはあなたの質問にお答えします。

2

関数には1つの戻り値の型しか指定できません。しかし、コメントの1つに述べたように、boolとintメンバーを含むstructを使用する回避策を使用できます。

int multiplication(int a, int b) { 
    if(b <= 1) return a; 
    return a + multiplication(a, --b); 
} 
+1

再帰的メソッドが適切かどうかわかりません。 OPは '*'演算子を使用する関数でコンテンツのように見えます。 –

+0

@KeithThompson、ええ、私は正確にOPが望んでいるか分かりません。しかし、将来のユーザーに役立つかもしれないので、私はここで私の答えを残しておきます。 – VHS

0
  1. は、あなたが出力として新しいパラメータを定義することができます。

    あなたも再帰ロジックで次のように正の整数の乗算機能を書いて、あなたの目標を達成することができます。

  2. boolとintデータを含む構造体を定義します。 構造体を開始し、それを返します。
+1

あなたは何を意味するのかの例を教えてもらえますか? –

関連する問題