在C書中有一個真/假問題,其中以下兩個陳述被描述爲真。關於和開關的真/假
1)編譯器爲交換機中使用的情況實現了一個跳轉表。
2)for循環可用於如果我們希望循環中的語句至少執行一次。
我有一個關於這兩點以下問題:
什麼是語句號1的含義是什麼?
據我說,第二個陳述應該是錯誤的,因爲對於這個任務我們使用一個
do while
循環。我對嗎?
在C書中有一個真/假問題,其中以下兩個陳述被描述爲真。關於和開關的真/假
1)編譯器爲交換機中使用的情況實現了一個跳轉表。
2)for循環可用於如果我們希望循環中的語句至少執行一次。
我有一個關於這兩點以下問題:
什麼是語句號1的含義是什麼?
據我說,第二個陳述應該是錯誤的,因爲對於這個任務我們使用一個do while
循環。我對嗎?
第一點有些誤導,如果它的措辭就是這樣。當然,這可能只是重點。 :)
它指的是生成switch
語句的快速代碼的一種常見方式,但絕對沒有要求編譯器這樣做。即使是那些做,也許不會這樣做總是,因爲必然會有折衷,可能只會使switch
超過n情況值得。此外,案件本身通常必須是「緊湊的」,以便提供在表格中使用的良好索引。
是的,一個do
循環是,如果你想至少一次迭代,因爲它在測試結束時,而這兩個for
和while
在開始做它用什麼。
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)
對於你的觀點2:我們也可以使用'while'循環來執行至少一次。但只有一個'do-while'循環實際上會強制執行。 –
你能否用一個小程序解釋你的第二點 – user3335653