3

次のロジックを使用して、三角形が二等辺三角形、正三角形、不等辺三角形、直角三角形のいずれであるかをテストします。

if (side1 == side2 || side2 == side3 || side1 == side3)
    printf("Isosceles triangle.");
else if (side1 == side2 && side2 == side3 && side3 == side1)
    printf("equilateral triangle");

辺 3 3 3 の出力を二等辺として取得しますが、等辺ではありませんが、等辺のロジックを最初に書くロジックを交換すると、等辺になります。何が起こっているのか理解できませんか?

4

5 に答える 5

4

この場合は使用elseしないでください。

コード:

if (condition)
     code
else if (condition2)
     code2

条件が真かどうかをチェックします。その場合、コードを実行します。conditionが false の場合のみ、 condition2がチェックされ、code2が実行される可能性があります。

于 2013-07-11T13:14:30.780 に答える
3

最初のコードが falseifの場合にのみ、コードは 2 番目のコードを「チェック」します。 論理的には、2 番目の if は、最初の if が true の場合にのみtrue になります...if
if

コードを次のように変更します。

if (side1 == side2 || side2 == side3 || side1 == side3)
{
    printf("Isosceles triangle.");
    if (side1 == side2 && side2 == side3 && side3 == side1)
        printf("equilateral triangle");
}
于 2013-07-11T13:22:16.433 に答える
2

Side1 = 3、side2 = 3、side = 3、つまり side1 == side2 が true です。そのため、プログラムは "Iosceles" を出力します。最初が true の場合、2 番目はチェックされないためです。最初のものが偽だった場合のみです。

于 2013-07-11T13:17:17.073 に答える
2

elseが実行されない場合にのみif実行されます。このような場合は、削除するだけelseで両方のステートメントを印刷できます。

于 2013-07-11T13:15:29.340 に答える
1

if ステートメントの順序を入れ替えるだけです。すべての正三角形は二等辺三角形であるため、elseif に入れることはありません。コードを次のようにします。

if (side1 == side2 && side2 == side3 && side3 == side1)
    printf("Equilateral triangle");
else if (side1 == side2 || side2 == side3 || side1 == side3)
    printf("Isosceles triangle.");

または、両方の結果を出力したい場合は、二等辺の if ブロック内に等辺の if ブロックを入れ子にすることができます。

if (side1 == side2 || side2 == side3 || side1 == side3){
    if (side1 == side2 && side2 == side3 && side3 == side1){
        printf("Equilateral triangle");
    }
    printf("Isosceles triangle.");
}

考慮すべきもう 1 つの最適化は、等辺チェックで等値へのチェックが 2 つしか必要ないことです。すなわち:

(side1 == side2 && side2 == side3) => (side1 == side3)

したがって、if ステートメントは次のように読むことができます。

if (side1 == side2 && side2 == side3)
于 2013-07-11T13:30:38.713 に答える