2014-02-27 17 views
0

在C書中有一個真/假問題,其中以下兩個陳述被描述爲真。關於和開關的真/假

1)編譯器爲交換機中使用的情況實現了一個跳轉表。

2)for循環可用於如果我們希望循環中的語句至少執行一次。

我有一個關於這兩點以下問題:

  • 什麼是語句號1的含義是什麼?

  • 據我說,第二個陳述應該是錯誤的,因爲對於這個任務我們使用一個do while循環。我對嗎?

回答

0

第一點有些誤導,如果它的措辭就是這樣。當然,這可能只是重點。 :)

它指的是生成switch語句的快速代碼的一種常見方式,但絕對沒有要求編譯器這樣做。即使是那些做,也許不會這樣做總是,因爲必然會有折衷,可能只會使switch超過n情況值得。此外,案件本身通常必須是「緊湊的」,以便提供在表格中使用的良好索引。

是的,一個do循環是,如果你想至少一次迭代,因爲它在測試結束時,而這兩個forwhile在開始做它用什麼。

0

1)這意味着一個通用的優化是編譯器建立一個「跳轉表」,就像一個數組,其中的值是程序接下來要執行的指令的地址。該數組的構建方式使索引與正在打開的值相對應。使用像這樣的跳轉表是O(1),而級聯的「if/else」語句在案例數量上是O(n)。

2)當然,您可以使用「do-while」循環執行「至少一次」操作。但是你會發現do-while循環在大多數應用程序中是非常不常見的,而「for」循環是最常見的 - 部分原因是如果你省略了它們括號之間的第一和第三部分,它們實際上只是幻想「while」循環!例如:

for (; i < x;) // same as while (i < x) 
for (i = 0; i == 0 || i < x;) // like i = 0; do ... while (i < x) 
+0

對於你的觀點2:我們也可以使用'while'循環來執行至少一次。但只有一個'do-while'循環實際上會強制執行。 –

+0

你能否用一個小程序解釋你的第二點 – user3335653