目錄
1、while循環
1.1 if 和 while 的對比
1.2 while 語句的執行流程
6.3 while循環簡單例題
2、for 循環
2.1 語法形式
2.2 for循環與while循環對比
2.3?for循環的執行流程
2.4?for循環的簡單例題
2.5?擴展:for循環的初始化,判斷,調整三個部分都是可以省略的
3、do-while 循環
3.1 語法形式
3.2 do-while 循環的執行流程
3.3 do-while循環的簡單例題
4、break和continue語句
4.1 while循環中的break 和continue?
4.1.1 break舉例
4.1.2?continue舉例
4.2?for循環中的break 和continue?
4.2.1 break 舉例
4.2.1 continue舉例
?4.3 do-while循環中的break和continue
5、循環的嵌套
5.1 例題
5.2 題目分析:
5.3 代碼演示
6、goto語句
前言:
嗨嗨嗨!新的一篇來啦!這一次,我攜帶著滿滿的關于while、for和do-while等的精彩內容,準備與大家分享。希望你們喜歡這一頓知識的大餐,也希望我的文章能為你的編程之路增添一份樂趣。別忘了,這篇文章也意味著“分支與循環”板塊的完美收官哦!期待你們的閱讀,我們文末見分曉!
話不多說,直接上正文
1、while循環
C語言提供了3種循環語句,while 就是其中一種,接下來將要介紹一下while語句。
while語句的語法結構和 if 語句非常相似。
1.1 if 和 while 的對比
1 if(表達式)
2? ? ? ? ? 語句;
3
4? while(表達式)
5? ? ? ? ? 語句;//如果循環體想包含更多的語句,可以加上大括號
代碼演示:
//代碼 1 if#include <stdio.h>int main()
{if(1)printf("hehe \n");//if后邊條件滿足,打印一次hehereturn 0;
} //代碼 2 while#include <stdio.h>int main()
{while(1)printf("hehe \n");//while后邊條件滿足,循環打印hehereturn 0;
}
代碼結果:
代碼1:
代碼2 :
我們從上面代碼結果可以直觀的看到他們之間的區別,while語句時可以實現循環效果的。
while 和 if?一樣,想要控制多條語句需要加上?{}
代碼演示:
#include <stdio.h>
int main()
{while(1){printf("hello \n");printf("China \n");}return 0;
}
代碼結果:
1.2 while 語句的執行流程
?#include <stdio.h>
?int main()
{
? ? while(1)? ?//while后的表達式稱為判斷表達式
? ? ? ? ?printf("hehe \n");
? ? return 0;?
}?
首先上來就是執行判斷表達式,表達式的值為0,循環直接結束;表達式的值不為0,則執行循環語句,語句執行完后再繼續判斷,是否進行下一次判斷。
6.3 while循環簡單例題
?例:在屏幕上打印1~10的值
代碼演示:
#include <stdio.h>
int main()
{int i = 1;//初始化while (i<=10)//判斷{printf("%d\n",i);i++;//調整}return 0;
}
?代碼結果:
解讀:
i = 1進到while循環,由于i=1 <10,因此表達式為真,打印出1后再加1(后置++),然后 i = 2 再次進入到while 循環,打印出?2?后再加1,以此類推,當 i = 10進入循環然后打印出來再加 1,i= 11?不滿足 i <= 10 的表達式,結果為假,因此循環結束。
while循環落下帷幕,for循環的精彩即將上演
或許你會好奇,為何在擁有while的足智多謀后,我們還需要for的加入?別急,且聽我細細道來。?
2、for 循環
2.1 語法形式
for 循環時三種循環中使用最多的,for 循環的語法形式如下:
1 for (表達式1; 表達式2; 表達式3;)
2? ? ? 語句: //如果循環體想包含更多語句,可以加上大括號{}
表達式1?:用于循環變量的初始化
表達式2?:用于循環結束條件的判斷
表達式3 :用于循環變量的調整
2.2 for循環與while循環對比
while循環代碼格式:
#include <stdio.h>
int main()
{int i = 1;//初始化while (i<=10)//判斷{printf("%d\n",i);i++;//調整}return 0;
}
從上面代碼中,我們可以看到初始化,判斷,調整三塊是分開的,而且這三個數據無論哪一個變了,都會影響到循環結果。因此,在這個循環比較大的情況下,我們對循環的掌控就沒有那么全面,很容易出現錯誤。
我們在來看for 循環的代碼書寫格式
for (表達式1; 表達式2; 表達式3;)初始化 判斷 調整語句: //如果循環體想包含更多語句,可以加上大括號{}
for循環中,初始化,判斷,調整是整合在一起的。到這應該就明白了為什么for 循環的使用是最多的了吧!for循環在面對大型循環的時候,容錯會比while循環高。
總結:for和while在實現循環的過程中都有初始化、判斷、調整這三個部分,但是for循環的三個部分非常集中,便于代碼的維護,而如果代碼較多的時候while循環的三個部分就比較分散,所以從形式上 for循環要更優一些。
2.3?for循環的執行流程
解讀:
首先執行 表達式1 初始化循環變量,接下來就是執行 表達式2的判斷部分,表達式2的結果如果==0,則循環結束;表達式2的結果如果 !=0 則執行循環語句,循環語句執行完后,再去執行表達式3,調整循環變量,然后再去 表達式2 的地方執行判斷,表達式2的結果是否為0,決定循環是否繼續。
整個循環的過程中,表達式1初始化部分只被執行1次,剩下的就是表達式2、循環語句、表達式3在循環。
2.4?for循環的簡單例題
在屏幕上打印1~10的值
代碼演示:
int main()
{int i = 0;for(i = 1;i <= 10;i++){printf("%d",i);}return 0;
}
演示結果:?
可以看到和while循環結果是相同的,在嚴格意義上,沒有規定必須用哪一個,你可以根據自己的情況來選擇,哪一種順手就用哪一種。
2.5?擴展:for循環的初始化,判斷,調整三個部分都是可以省略的
代碼演示:
int maiin()
{for( ; ;){printf("hehe\n");}return 0;
}
for循環中的這三個可以同時省略,也可以單個省略。
但是:如果判斷部分被省略,那么判斷部分就恒為真,就會造成死循環。
for循環的旅程就此結束,接下來是do-while循環的低調亮相時刻。雖然它很少被重用,但它的存在仍然為程序世界增添了一份獨特的風采。讓我們期待它在特定場景下的精彩表現吧!
3、do-while 循環
3.1 語法形式
在循環語句中do-while 語句的使用最少,它的語法形式如下:
do語句;while(表達式);
while 和 for 這兩種循環都是先判斷,條件如果滿足就進入循環,執行循環語句,如果不滿足就跳出循環;
而 do while 循環則是先直接進入循環體,執行循環語句,然后再執行 while 后的判斷表達式,表達式為真,就會進行下一次,表達式為假,則不再繼續循環。
3.2 do-while 循環的執行流程
在do while循環中先執行圖上的“語句”,執行完語句,在去執行“判斷表達式”,判斷表達式的結果是 !=0,則繼續循環,執行循環語句;判斷表達式的結果 ==0,則循環結束。
所以在 do while語句中循環體是至少執行一次的,這是do while循環比較特殊的地方。
3.3 do-while循環的簡單例題
在屏幕上打印1~10的值
代碼演示:
int main()
{int i = 1;//初始化do{printf("%d ", i);i++;//變量} while (i <= 10);//判斷return 0;
}
代碼結果:?
4、break和continue語句
4.1 while循環中的break 和continue?
在循環執行的過程中,如果某些狀況發生的時候,需要提前終止循環,這是非常常見的現象。C語言中提供了 break 和 continue 兩個關鍵字,就是應用到循環中的。
break 的作用是用于永久的終止循環,只要break 被執行,直接就會跳出循環,繼續往后執行。? ? continue 的作用是跳過本次循環中 continue后邊的代碼,在for 循環和while循環中有所差異的。
4.1.1 break舉例
代碼演示:打印結果是多少?
int main()
{int i = 1;while (i <= 10){if (i == 5)break; //當i等于5后,就執行break,循環就終止了printf("%d",i);i++;}return 0;
}
?代碼結果:
1 2 3?4
?分析:打印了1,2,3,4后,當 i 等于5的時候,循環在break的地方終止,不再打印,不再循環。
所以 break 的作用就是永久的終止循環,只要break被執行,break外的第一層循環就終止了。
那以后我們在循環中,想在某種條件下終止循環,則可以使用break來完成我們想要的效果。
4.1.2?continue舉例
continue 是繼續的意思,在循環中的作用就是跳過本次循環中continue后邊的代碼,繼續進行下一次循環的判斷。
上面的代碼,如果把 break 換成 continue 會是什么結果呢?
代碼演示:打印結果是多少?
int main()
{int i = 1;while (i <= 10){i++;if (i == 5)continue;printf("%d",i);}return 0;
}
代碼結果:
2 3 4 6 7 8 9 10 11
?分析結果:
i=1 進來后遇到 i++ 變為 2,因為2!=5,continue未執行,打印?2,然后繼續循環,直到 i=5后執行continue,跳過printf,因此5不打印。再來到 i++ 這時 i 的值變為 6,continue未執行,繼續打印 6 直到i=10后再加1,循環結束。
??觀察continue 的這兩組代碼,你有發現什么不同嗎?
int main()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int main()? ? ? ? ? ? ? ? ? ? ?
{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??{
? ?int i = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int i = 1;
? ?while (i <= 10)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?while (i <= 10)
? ?{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?{
? ? ? if (i == 5)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? i++;
? ? ? ? ?break;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (i == 5)?
? ? ? printf("%d",i);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;?
? ? ? i++;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("%d",i);? ?
? ?}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??}
? ? ? return 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?return 0;
}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
沒錯!? i++ 的位置不同了。那么,為什么我們要將i++的位置調到continue的前面呢?
來,代碼結果展示:
這個代碼是還在運行的,不過打印完1 2 3 4 后死循環了。
解釋一下:continue 的作用是跳過本次循環中 continue后邊的代碼,因此當i=5進入while循環后continue被執行會直接跳過它后面的兩行代碼:
printf(“%d”,i);i++;
然后直接來到while( i<=10)這一行,繼續再次進入while循環,continue再次被執行...因此進入死循環。
現在應該明白i++為什么要放到continue前面了吧!
4.2?for循環中的break 和continue?
4.2.1 break 舉例
for和while里的break用法一樣,不管循環還需要循環多少次,只要執行到了break,循環就會徹底終止。
代碼演示:
int main()
{int i = 0;for(i = 1;i <= 10;i++){if(i == 5)break;printf("%d",i);}return 0;
}
代碼結果:
1 2 3 4
break的作用是永久終止循環,未來我們在每個條件發生的時候,不想再繼續循環的時候,就可以使用break來完成。
4.2.1 continue舉例
上面的代碼,如果把break換成continue會發生什么結果呢?
?代碼演示:
int main()
{int i = 0;for(i = 1;i <= 10;i++){if(i == 5)continue;printf("%d",i);}return 0;
}
?代碼結果:
2 3 4 6 7 8 9 10 11
?4.3 do-while循環中的break和continue
do-while語句中的break和continue的作用于while循環中幾乎一模一樣
#include <stdio.h>
int main()
{int i = 1;do{if(i == 5)break;printf("%d",i);i = i + 1;} while(i<=10);return 0;
}
#include <stdio.h>
int main()
{int i = 1;do{if(i == 5)continue;printf("%d",i);i = i + 1;} while(i<=10);return 0;
}
5、循環的嵌套
在前面,本文詳細介紹了三種循環while、for、do-while的使用方法,相信聰明的伙伴們已經掌握了這三種循環的單獨使用了把!!但是有句話說的好,人多力量大。當我們把這三種循環嵌套在一起使用時才能夠更好的解決問題。這也就是我們所說的:循環嵌套。我們用一道題目來學習循環嵌套。
5.1 例題
找出100~200之間的素數,并打印在屏幕上。
補充:素數又稱為質數,指的是只能被 1 和本身整除的數字。
5.2 題目分析:
1.要從100~200之前找出素數,首先需要有100~200之間的數,這里能夠使用循環來獲得。我們可以借助for 循環:for i = 100; i <= 200; i++
2.每次循環產生一個 i 的時候,需要判斷 i 是否為素數
怎么判斷 i 是否為素數呢?
拿2 ~ i-1 之間的數字去試除 i
如果2 ~ i-1 之間有數字能整除i,那么 i 就不是素數
如果2 ~ i-1 之間的所有數字都不能整除i,i 就是素數
要產生2~i-1之間的數字,這里也能夠使用 for 循環解決。
for(j=2; j<=i-1; j++)
{i%j == 0
}
5.3 代碼演示
#include <stdio.h>
int main()
{int i = 0;//循環變量for (i = 100; i <= 200; i++)//此for循環的目的:每次循環產生一個i,要判斷 i 是否是素數{int flag = 1;//假設i是素數int j = 0;//下面for循環的循環變量for (j = 2; j <= i - 1; j++){if (i % j == 0){flag = 0;//i 不是素數break;//為了直接跳出這次循環 例如:i = 100 進來后被2 整除后就不用在看后面的數字}}if (flag == 1)//如果 i%j !=o,則跳轉到這里,即 i為素數,然后打印{printf("%d\n", i);}}return 0;
}
代碼里都進行的注釋,如果還有不明白的可以私我!
代碼結果:
這只是關于求素數的一種方法,后面會專門寫一篇關于素數求解的文章 ,期待大家的到來!
這個例子里只用了for循環的循環嵌套,并沒有使用到三種循環的嵌套,但是相信聰明的伙伴們應該也能明白怎么使用循環嵌套了吧。!!!
6、goto語句
C語言中提供了一個非常特別的語法,就是goto語句和跳轉語句,goto語句可以實現在同一個函數內跳轉的設置好的標號處。
goto語句,也被稱為無條件轉移語句,是一種編程語言構造,它允許控制權直接跳轉到程序中指定的標簽標記處。
代碼演示:
#include <stdio.h>
int main()
{printf("China\n");goto next;printf("xly\n");
next:printf("strong\n");return 0;
}
代碼結果:
goto 語句如果使用的不當,就會導致在函數內部隨意亂跳轉,打亂程序的執行流程,所以我們的建議是能不用盡量不去使用;但是goto語句也不是一無是處,在多層循環的代碼中,如果想快速跳出,使用 goto 就非常的方便了。
for(...)
{ror(...){for(...){if(disaster)goto error;}}
}error;
本來 for 循環想提前退出得使用break,一個break 只能跳出一層for循環,如果3層循環嵌套就得使用3個break 才能跳出循環,所以在這種情況下我們使用 goto 語句就會更加的快捷。
結語:
分支與循環模塊的旅程即將告一段落,希望每位小伙伴都能帶著滿滿的收獲繼續前行。真誠地說,你們的進步是我最大的快樂源泉!咱們下一段學習之旅再見哦~
本篇文章可以和題目講解(2)一起食用,效果更佳!!
預告:下篇開始將開啟函數模塊,期待大家的到來!!!