網站首頁 編程語言 正文
總述
生活中不止處處是選擇,還時常面臨著重復做某事,比如呢,我們日復一日的學習、敲代碼、
C語言中提供了 —while循環—for循環—do-while循環來表達循環
接下來,對三種循環進行分別介紹
while循環
while循環的流程圖大致就是這樣子
語法結構
while( expression ) ? //判斷表達式是否成立,成立就執行循環體,不成立則不進入
循環體;
接下來我們使用一下while循環,打印1-10的數字
#include <stdio.h>
int main(){
int i = 1;
while(i < 11)
printf("%d ",i++);
return 0;
}
這便是while最簡單的用法,接下來看一下while中的break和continue
while循環中break和continue
break
看到break大家肯定不陌生,選擇結構中的switch-case就要搭配著break使用哦
#include <stdio.h>
int main(){
int i = 1;
while(i < 11)
{
if( 5 == i)
break;
printf("%d ",i++);
}
return 0;
}
可以看出,當i=5的時候,直接跳出了整個循環不再執行
break是直接跳出循環,也是直接跳出switch-case
continue
在英語中,continue是繼續的意思 ,在循環中,表示跳過這次循環進行下一次循環
#include <stdio.h>
int main() {
int i = 1;
while (i < 11)
{
if (5 == i)
continue; // 把break換成continue試一下
printf("%d ", i++);
}
return 0;
}
大家可以猜一下,可想而知,大家可能會認為結果是 1 2 3 4 6 7 8 9 10 跳過5,我們來分析一下
光標一直在閃爍,死循環,那怎么樣才能達到跳過5的效果呢,
核心問題在于**這樣i的值沒辦法變化,那我們把i放在continue前面來試試**
#include <stdio.h>
int main() {
int i = 0;
while (i < 11)
{
i++;
if (5 == i)
continue;
printf("%d ", i);
}
return 0;
}
這樣continue就不會跳過循環因子 -i 的變化,所以不會死循環,來看結果
成功跳過了5,大家在while循環中使用continue時一定要注意循環因子的問題
continue 在while循環中的作用就是:
- 本次循環中continue后邊的代碼不會再執行而是直接跳轉到while語句的判斷部分。
- 進行下一次循環的入口判斷。
for循環
語法結構
for( 表達式1 ; 表達式2 ; 表達式3)
循環體;
- 表達式1為**初始化部分,用于初始化循環變量的**。
- 表達式2為_條件判斷部分_,用于**判斷循環時候終止**。
- 表達式3為_調整部分_,用于**_循環條件的調整 _**。
for循環中break和continue
break
for循環中break與while循環中break完全相同,表示跳出循環
#include <stdio.h>
int main() {
int i = 0;
for (i = 1; i < 10; i++) {
if (5 == i)
break;
printf("%d ", i);
}
return 0;
}
break基本沒啥區別,就是跳出循環
continue
for循環中continue跳出的依然是此次循環,但是并不會跳過表達式3
#include <stdio.h>
int main() {
int i = 0;
for (i = 1; i < 10; i++) {
if (5 == i)
continue;
printf("%d ", i);
}
return 0;
}
依然是跳過5,continue不會跳過表達式3,意味著i++可以執行,不會造成死循環
當然,一個人想寫bug誰也攔不住他
比如:
for循環中省略表達式的問題
for循環中有3個表達式,都可以省略,但是分號一個不能少
int main(){
int i = 0;
//可以寫成這樣
for (i=0;i<10;)
;
//還可以這樣
for(i = 0;;)
;
//甚至是這樣
for(;;); //三分號一個也不能少
}
for(;??; 這樣的代碼,如果循環體中沒有break,基本就是妥妥死循環,并不建議大家這樣使用
for循環嵌套
當出現兩個for循環的時候,需要考慮循環控制的問題,行列,內外循環都代表什么?大家需要想清楚
寫一個九九乘法表
#include <stdio.h>
int main() {
int i = 0;
int j = 0;
for (i = 1; i < 10; i++) { //控制行
for (j = 1; j <= i; j++) {
printf("%d * %d = %d ", j, i, i * j); //控制列
}
printf("\n");
}
return 0;
}
一般情況下,內層循環因子的控制條件都和外層循環因子有關系
下面給大家幾個for循環的注意事項
- 不可在for 循環體內修改循環變量,防止 for 循環失去控制。
- 建議for語句的循環控制變量的取值采用“前閉后開區間”寫法
#include <stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//數組下標從0到9
int i = 0;
for(;i <=9;i++) //前閉后閉
printf("%d ",arr[i]);
for(;i < 10;i++)//前閉后開
printf("%d ",arr[i]);
return 0;
}
前閉后開區間的寫法,可能使數字有了某種含義,比如例子中的10,剛好是打印元素的個數,也是數組的長度
給大家補充一個小知識
警惕for循環后邊直接跟分號的題,學校愛出這玩意,懂得都懂
do-while循環
do-while循環與其他兩種循環有很大不同,而也是使用頻率最小的循環
do
? ? 循環體
while(判斷條件);
do-while循環最大的特點就是無論如何,循環體一定會執行一次
只有在對應場景中,才應該使用do-while循環
do-while循環中,break以及continue的用法與while循環中一樣,本文不在贅述。
goto語句
對于goto語句,是一種跳轉,其實沒必要說,因為能用它解決的用循環都能解決
簡單介紹一下,但是并不推薦大家使用
#include <stdio.h>
int main()
{
printf("hehe\n");
goto flag;
printf("haha\n");
flag:
printf("heihei\n");
return 0;
}
goto 會直接跳轉到flag標記處,跳過打印haha
這只是goto語句的語法
goto語句真正使用在多層循環嵌套中,跳出循環,使用break達不到,只能跳出一次,這些后續碰到再說
總結
- for循環對于初始化、條件、循環因子的控制都在一起
- do-while循環的循環體至少執行一次
- goto不推薦大家使用
各種循環各有千秋,大家要根據對應的場景,選擇對應的循環,達到需求
本文只是對循環語法進行了介紹,對于循環,大家要勤加練習, 多思考
原文鏈接:https://blog.csdn.net/weixin_54580407/article/details/125916937
相關推薦
- 2022-11-10 Android使用popupWindow仿微信彈出框使用方法_Android
- 2022-04-16 C語言棧之順序棧_C 語言
- 2022-08-26 利用Python實現自動化監控文件夾完成服務部署_python
- 2023-07-08 echarts 數值差距過大,有些數據會顯示不全
- 2021-11-16 linux系統下用戶管理相關介紹_Linux
- 2023-02-26 詳解Golang時間處理的踩坑及解決_Golang
- 2022-02-12 asp.net 報錯 “/”應用程序中的服務器錯誤。 String or binary data w
- 2022-08-06 Golang使用Consul詳解_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支