c語言入門:[14]while循環
上節我們學習的goto個人認爲是初學者最好理解的循環語句,使用起來也很方便,goto語句使用起來非常靈活,但是就是因爲太靈活了所以許多有編程的人都覺得goto往往會使程序難於閱讀造成邏輯混亂,有的時候寫代碼多了一會跳轉到這一會跳轉到那往往會把編程者自己都搞糊塗了更別說別人了,還有一點就是在c基礎上發展起來的c#和java編程語言裏不支援goto,所以我們還是要學習能夠替代goto的其它循環的寫法,這節我們來學習while循環,while循環有兩種形式下面分別作介紹。
while循環的第一種形式:
上節goto的例子如果用while寫就是這樣。
int main()
{
int i=0;
printf("一個循環語句的例子n");
do
{
printf("*");
i=i+1;
}while(i<10);//注意這裏必須寫分號
printf("hellon");
}
對比上節的goto我們可以這樣認爲:
1>do相當於原來的標記,用來表示循環開始的地方,只不過這個是c語言裏的關鍵字不能自己隨便起了只能用do,另外do後面也不要加冒號。
2>while(i<10);是循環的判斷,相當於goto裏的if判斷,如果條件爲真轉到do的位置重複執行,條件爲假則循環終止。
3>用大括號括起來的部分是要重複執行的代碼,這個大括號不能省略。爲了敘述方便以後我們管這部分代碼就叫循環體。
4>while(i<10);必須加分號,來表示語句結束。當你看到while的第二種寫法時你就會知道如果不加分號那while(i<10) printf("hellon");也能構成一個循環,所以爲了避免歧義要求第一種寫法的循環條件後必須加分號。
我們可以看到對比goto,這樣寫更簡潔明瞭,結構清晰。
while循環的第二種形式:
此種形式是在第一種形式的基礎上進一步簡化,省略了do,上面的例子用這種形式寫法如下:
int main()
{
int i=0;
printf("一個循環語句的例子n");
while(i<10)
{
printf("*");
i=i+1;
}
printf("hellon");
}
要點解析:
1>此種寫法就跟if語句的寫法類似,大括號可以省略,如果不寫大括號那循環體就是while後面的第一條語句,你如果在while(i<10)後面直接加分號也可以,那樣循環體就爲空。
2>while(i<10)不是判斷一次就拉倒,而是循環重複判斷,每次判斷只要條件爲真就執行一次循環體。什麼時候判斷爲假了while語句就結束,循環終止。像這個例子循環體被重複執行了10次而i<10這個條件卻判斷了11次,正是因爲第11次判斷結果爲假循環才終止了。
while的這兩種寫法是有區別的
第一種寫法是:先執行一遍循環體,然後再判斷
第二種寫法是:先判斷,條件不符合則直接退出,循環體可能一次都不被執行
用第一種寫法寫的程序都能修改成第二種寫法的形式。
透過下面的兩個例子來講解下
例題1:不停地從鍵盤輸入字元直到輸入q結束。
char ch;//用來存儲每次從鍵盤輸入的字元
scanf("%c",&ch);//重複執行這句話能夠實現“不停地從鍵盤輸入字元”的要求,而第一個字元總是要輸入的,也就是說這句話至少要執行一遍,適合do while
int main()
{
char ch;
do
{
scanf("%c",&ch);
}while(ch!='q'); //只要輸入的不是q就循環,重複執行scanf("%c",&ch);
}
執行這個例子當你從鍵盤輸入字元的時候最好輸入一個一回車,如下圖。
如果用第二種寫法改寫,我們就可以給ch一個初始值讓第一次循環判斷肯定成立,這樣scanf("%c",&ch);就至少會執行一次
int main()
{
char ch='a';
while(ch!='q')
{
scanf("%c",&ch);
}
}
第一次判斷ch!='q'肯定爲真,因爲ch裏初始存放的是'a'這個字元,所以scanf("%c",&ch);得到執行,ch裏的值變成了執行程序的人從鍵盤上輸入的一個字元
第二次判斷ch!='q' 結果就不一定了,因爲我們也不知道ch裏存儲的是什麼,這要看執行程序的人從鍵盤輸入了什麼字元。
很顯然這種改寫的方式沒有第一種寫法好懂,而且寫起來還費事。
例題2:從鍵盤輸入一個自然數,輸入幾就輸出幾個星號。
分析下問題,如果我們輸入的是0,那一個星號都不輸出,所以我們需要先判斷,這種情況就適合用第二種寫法。
int main()
{
int i=0;
int n;//表示從鍵盤輸入的整數
printf("請輸入一個自然數:");
scanf("%d",&n);
while(i
{
printf("*");
i=i+1;
}
printf("n");
}
-
電腦顯示屏幕不亮 筆記本不能開機啓動
電腦非正常關機或者用久了,再次開啟,突然打不開了,屏幕顯示不亮,連繫統都進不了怎麼回事?何種情況下,需要維修?操作方法(01)第一檢視信號指示燈。先是判斷實際能否開機,若開機了指示燈會有閃爍。黑屏有時並非全黑屏,仔細看是灰屏,此時信號燈開機時有閃爍。說明硬件沒有問題...
-
stdole32.tlb丟失或損壞怎麼辦
Excel是我們辦公時候最常用的辦公軟件之一,但是有些win7專業版用戶在使用Excel的過程中出現了“某個對象程序庫丟失或損壞”的警告,這究竟是怎麼回事呢?雖然有這個錯誤提示,但是Excel大部分功能還是可以正常使用的。下面由小編給大家介紹一下丟失或損壞的解決方法...
-
Steam錯誤代碼118最新解決方案
Steam商店錯誤代碼118怎麼解決?Steam商城進不去,提示錯誤代碼118應該怎麼解決呢?大家不用擔心,Steam錯誤代碼118是電腦自身網絡解析出現了問題,我們改下網絡設定即可解決問題。那麼,具體要怎麼操作呢?接下來小編就給大家詳細說說Steam錯誤代碼118的解決方法,趕緊GET起...
-
如何將CorelDraw檔案轉爲jpg圖片
CorelDraw儲存的源檔案是CDR格式,將檔案轉爲jpg格式的圖片。操作方法(01)準備好CorelDraw檔案(02)然後開啟CorelDraw軟件進入介面,選擇選單欄中的-檔案-開啟,(03)找到準備好的cdr檔案,將檔案置入到文檔中(04)當匯出時,點擊選單欄中的-檔案-匯出(05)在儲存類型中找到jpg格式,點...