2011-01-25 12 views
1

次の2つのステートメントが同等かどうかを知りたかったのですが、そうでない場合はどうしたらよいでしょうか。ありがとう。Cの本からの演習

1)

if (score >= 90) 
    printf("A"); 
else if (score >= 80) 
    printf("B"); 
else if (score >= 70) 
    printf("C"); 
else if (score >= 60) 
    printf("D"); 
else 
    printF("F"); 

2)バージョン1

if (score < 60) 
    printf("F"); 
else if (score > 70) 
    printf("D"); 
else if (score > 80) 
    printf("C"); 
else if (score > 90) 
    printf("B"); 
else 
    printf("A"); 


2)バージョン2

if (score < 60) 
    printf("F"); 
else if (score < 70) 
    printf("D"); 
else if (score < 80) 
    printf("C"); 
else if (score < 90) 
    printf("B"); 
else 
    printf("A"); 

私は申し訳ありませんが、私は2番目のオプションで記号をmispelled。彼らは今は同等ですか?

+0

スコアが65の場合はどうなりますか? – bhups

答えて

7

等価ではありません。

たとえば、あなたが95の「スコア」を持っていると言う - 最初のオプションでは、あなたが「A」を印刷しますが、2番目に、あなたは「D」を印刷します...今

私は上記に誤字があると思う。 2番目の例のすべての比較を>の代わりに<に切り替えると、両方とも同じ答えが出力されます。

しかし、(少なくともコンパイラの最適化の前には)同等ではありません。微妙な違いがあります。たとえば、2番目のものは最初のものよりも "D"の方が速く戻りますが、最初のほうが "B"の方が速く戻ります。確かに、これは非常に微妙な違いですが、それらは異なっています。


編集:上記の誤字の疑いは、編集に基づいて真実でした。後半にまだ残っている相違については、参照してください。

これらは同じ値を出力しますが、同等ではありません。

+0

ありがとう!いい答えだ! –

2

これらはありません。 70,80、および90回目のテストの2番目のセットで比較を逆にします。

3

いいえ、値99を入力して、両方の場合に何が起こるかを確認します。

最初はA、次はDと表示されます。

さて、これらすべての>場合は別の話かもしれコードの2番目の部分で<あった(ウインク、ウインク、微調整、微調整は、うなずきのブラインドバットにウインクと同じくらい良い、と言うこれ以上)ありません。


今、あなたの編集に基づいて、(提案されているよう<>を変更する)、彼ら同等です。とにかく、出力に関しては。

しかし、私は出力があなたが興味を持っていたものと仮定しています。

+0

私はそれらが同等の結果を生み出すと主張したいと思いますが、2つのアルゴリズムは同等ではありません...それらは異なるランタイム特性を持っています。 –

+0

誰もパンダが好きではない、@Reed :-)それを明確にした。 – paxdiablo

+0

それは依存している - 私は思っているCの本なら、これは "トリックの質問"かもしれないと思う...著者がこれらのタイプの違いを強調しようとしているところがいくつかある。しかし、ええ、一般的に、私はちょうど不快である;) –

0

いいえ、スコアが95の場合、2番目の例では "D"が印刷され、最初の例では "A"が印刷されます。

関連する問題