Ⅰ 死循環是什麼意思
「死循環」的意思:單一程序在某一環節由於未滿足脫離循環的條件而出現的持續進行循環操作的現象。它能讓程序運行陷入停滯,嚴重時會拖慢電腦速度,是讓程序員頭疼的故障情況之一。
讀音:sǐ xún huán
詞性:通常在句中用作名詞,作為主語或賓語。
例句:如果他們不一遍又一遍的提高自己編寫保齡球游戲代碼的技巧,他們很可能會讓資料庫陷入死循環。
近義詞介紹:循環往復
讀音:xún huán wǎng fù
表達意思:意思是轉了一圈又一圈,一次又一次地循環。
詞性:通常在句中用作動詞,修飾主語或賓語。
例句:時間是生命的通行證,來也匆匆,去也匆匆,每一個季節的更迭,生命都在不斷地消失,新的生命又在不斷地降臨。循環往復,生命的河流生生不息,獲得了永恆。
Ⅱ 測試當中什麼是死循環
死循環是一種現象
原理: 在while循環中,沒有修改循環變數的值, 導致while後面條件判斷一直成立,
一直執行縮進部分代碼, 無法退出循環的一種現象
注意: 要避免死循環, 修改循環變數,便於下一次循環,最終退出循環
(拓展:死循環也有妙用,比如Windows桌面一直運行, 就是死循環實現的,但死循環也要有退出口,使用break退出死循環)
想要相關實現的操作和源碼,參考黑馬程序員的相關教程,官網都有配套資料,資料當中就含有課件+筆記+源碼了。總之非常適合小白學習,想要學習的可以去看看。
Ⅲ 聽說程序員應該永遠不使用continue語句,這是真的嗎
無稽之談,雖然用的地方不多,但是也不可能永遠也不用啊!
有些時候去需要的!比如本次循環經過判斷不需要執行下面的語句,需要執行下次循環這個時候就要continue了
Ⅳ 死循環的舉例
以下是一些死循環的例子。
C++的例子
#include<iostream.h>
int main()
{
for(int i=0;;i++)
{
cout<<char(i);
}
return 0;
}
C語言的死循環:
#include <stdio.h>
main()
{
int a = 0;
while (a < 10)
{
printf(%d
, a);
if (a = 5) {
printf(a equals 5!
);
}
a++;
}
return 0;
}
上述程序會一直顯示Infinite Loop字元串。
BASIC語言的死循環:
10 PRINTInfinite Loop
20 GOTO10'跳到行號=10的位置
X86匯編語言的例子:
loop:
; Code to loop here
jmploop
Python的例子:
whileTrue:
print(Infinite Loop) 以下是一個Visual Basic死循環的例子:
dimxasintegerdountilx > 5'根本不會有x>5的情形x = 1 x = x + 1loop
每一次運行循環時x會先設置為1,然後變為2,因為數值未大於5,所以永遠不會退出。若將x = 1由循環內部移到循環之前即可以改善此一情形。
有些程序員可能因為不熟悉特定編程語言的語法而造成死循環,例如以下是一段C語言的程序:
#include <stdio.h>
main()
{
int a=0;
while(a<10)
{
printf(%d
,a);
if(a=5){//a設定為5,進入無窮迴圈printf(a equals 5!
);}
a++;
}
return0;
}
其預期輸出是數字0至9,其中5和6中間會顯示a equals 5!,但程序員在編寫程序時將設置用的=運算符及判斷相同的==運算符弄混了,因此程序會在每次運行循環時都會將a設置為5,因此變數a永遠無法到達10,此循環就變成了死循環。 有時不適當的循環退出條件也可能會造成無預期的死循環,例如以下C語言的例子:
float x=0.1;
while(x!=1.1)
{
//可能會因為浮點運算的誤差而出現問題
printf(x = %f
,x);
x=x+0.1;
}
在有些操作系統中,上述程序會運行10次循環然後退出,但有些系統中,上述程序卻可能會一直運行,無法退出,問題主要在循環的退出條件(x != 1.1)要在二個浮點數相等時才退出,結果會依系統處理浮點數的方式而定,只要系統運行10次循環後的結果和1.1差一點點,上述程序就會變成死循環。
若將退出條件改為(x < 1.1)就沒有這個問題,程序可能會多運行一次循環,但不會變成死循環。另一種解決方式則是用一個整數變數作為循環變數,再依此變數判斷是否要退出循環。
在數值分析程序中也可能會出現無預期的死循環,例如程序需一直迭代到誤差小於某特定值為止,但若因為運算中的捨去誤差,使得誤差一直無法小於該特定值,就會產生死循環。 奧爾德森循環(Alderson loop)是指一個循環有設置退出條件,但因為程序的寫法(多半是編程錯誤),造成永遠無法滿足退出條件,在針對用戶界面程序調試時最容易出現這類的問題。
以下C的偽代碼中有一個奧爾德森循環,程序是要計算用戶輸入一串數字的和,用戶輸入0時退出循環,但程序中用了不正確的運算符:
sum=0;while(true){printf(Input a number to add to the sum or 0 to quit);i=getUserInput();if(i*0){// 若i乘0為真,則使sum加上i的值sum+=i;// 但這不可能發生,因為不論i為何值(i * 0)都是0。如果條件中用的是!=而非*,代碼就能正常運行}if(sum>100){break;// 終止循環。結束條件存在,但從來沒有達到過,因為sum永遠不會增加}}
「奧爾德森循環」是來自一個Microsoft Access的程序員,他編寫的程序產生一個有模式的對話框,用戶需要回應,程序才能繼續運作,但對話框沒有OK鍵或取消鍵,因此只要此對話窗出現,Access程序就無法繼續運作。 無窮遞歸是一種由遞歸造成的死循環。例如以下計算階乘的C語言程序
unsigned int fac(unsigned int a){
//n!=n*(n-1)!
return(fac(a-1)*a);
}
一般遞歸的程序會有一特定條件,此條件成立時直接計算結果,而不是通過遞歸來計算結果,若程序中未定義此條件,就會出現無窮遞歸。
無窮遞歸會造成堆棧溢出,而無窮遞歸不會退出,因此也是死循環的一種。不過若遞歸程序是使用尾部遞歸的處理方式,在有些編程語言(如Scheme)中會優化成循環,因此不會造成堆棧溢出。
上述的程序可以修改成沒有無窮遞歸的程序。
unsigned int fac(unsigned int a){
if(a==0)
{//定義0!=1
return1;
}
else
{
return(fac(a-1)*a);
}
}
Ⅳ 死循環,死遞歸和死鎖對CPU的消耗有什麼異同點
死循環,死遞歸和死鎖對CPU的消耗基本相同,但是產生的原因是不一樣的。
一、死循環。
例如在VB語言程序中,下列語句:
Do While i=1
print "*"
Loop
就是一個死循環,運行它將無休止地列印*號。
不存在一種演算法,對任何一個程序及相應的輸入數據,都可以判斷是否會出現死循環。因此,任何編譯系統都不做死循環檢查。
在設計程序時,若遇到死循環,我們可以通過按下Ctrl+Pause/Break的方法,結束死循環。
然而,在編程中死循環並不是一個需要避免的問題,相反,在實際應用中,經常需要用到死循環。例如,我們使用的Windows操作系統下的窗口程序中的窗口都是通過一個叫消息循環的死循環實現的。在單片機、嵌入式編程中也經常要用到死循環。在各類編程語言中,死循環都有多種實現的方法,以C語言為例,可分別使用while.for,goto實現。
二、死鎖。
兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
計算機系統中,如果系統的資源分配策略不當,更常見的可能是程序員寫的程序有錯誤等,則會導致進程因競爭資源不當而產生死鎖的現象。
在兩個或多個任務中,如果每個任務鎖定了其他任務試圖鎖定的資源,此時會造成這些任務永久阻塞,從而出現死鎖。例如:事務A 獲取了行 1 的共享鎖。事務 B 獲取了行 2 的共享鎖。
排他鎖,等待事務 B 完成並釋放其對行 2 持有的共享鎖之前被阻塞。
排他鎖,等待事務 A 完成並釋放其對行 1 持有的共享鎖之前被阻塞。
事務 B 完成之後事務 A 才能完成,但是事務 B 由事務 A 阻塞。該條件也稱為循環依賴關系:事務 A 依賴於事務 B,事務 B 通過對事務 A 的依賴關系關閉循環。
三、死機及其對策。
無論是死循環還是死鎖,都會造成電腦死機現象。
電腦系統在工作中,有時候會出現滑鼠停滯、鍵盤不能輸入命令等情況,這時的系統已經不能接收任何命令,這種情況被稱為死機,死機可能是多種原因造成的,比如同時運行了過多的應用程序,程序的使用方法錯誤,電腦中某一硬體的損壞(比如硬碟或者內存)等都可能引起死機。解決的常用方法有:
同時按下鍵盤上的控制鍵加換檔鍵加刪除鍵,在顯示的列表中單擊【啟動任務管理器】命令,彈出【任務管理器】對話框,單擊出現問題的程序,再單擊【結束任務】按鈕,所選程序立即結束運行。在大多數情況下,都可以通過上述方法關閉已經失去響應的程序,並且可以繼續在Windows10中操作。
如果鍵盤已經不能輸入任何命令,可按下機箱上的復位鍵,幾秒鍾後電腦將重新啟動。
如果機箱上沒有復位鍵,可以直接按住機箱上的電源開關幾秒鍾,關閉電腦電源,稍後,再按機箱上的電源開關重新啟動電腦即可。