-4

nを入力し、小数点以下2桁を保持してf(n)を計算します。 区分的関数

例:入力5出力:15.00

(以下のコードの改善/提案を歓迎します)これが私がこれまでに思いついたものです。

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

int main() {
    float m;

    scanf("%f", &m);
    if (m < 0)
        m = abs(m);

    else if (m < 2)
        m = sqrt(m + 1);

    else if (m < 4)
        m = pow(m + 2, 5);

    else if (m >= 4)
        m = (m * 2);
    m = m + 5;

    printf("%1.2f", m);
}
4

3 に答える 3

6

あなたの最後のif声明は間違っています、

else if (m >= 4)
{
    m = (m * 2);
    m = m + 5;
}

それ以外の場合は、の「本体」のm = m + 5;外にあり、各状況で実行されます(すべての条件で)if

または、あなたはただ書くことができます

else if (m >= 4)
    m = m * 2 + 5;
于 2012-08-17T12:36:54.377 に答える
4

あなたはあなたの他の最後の周りに中かっこが必要です

 else if (m >= 4) {
    m = (m * 2);
    m = m + 5;
 }

それ以外の

 else if (m >= 4)
    m = (m * 2);
m = m + 5;
于 2012-08-17T12:37:36.103 に答える
2

ifすべてのブロックに中括弧を使用する必要があります。そうすれば、最後のケースのような間違いを避けることができます。

} else if (m >= 4) {
    m = (m * 2);
    m = m + 5;
}

またはさらに良い:

} else if (m >= 4) {
    m = (m * 2) + 5;
}

さらに、最初のケースは次のように書くことができます。

if (m < 0) {
    m = -m;
} else if ...

ただし、これは実際には元の式に対する最適化であり、コンパイラとそのオプションによっては、パフォーマンスが向上する場合とそうでない場合があります。

于 2012-08-17T12:42:29.780 に答える