前言
1.默認(rèn)的運(yùn)行流程
默認(rèn)情況下,程序的運(yùn)行流程是這樣的:運(yùn)行程序后,系統(tǒng)會(huì)按書(shū)寫(xiě)順序執(zhí)行程序中的每一行代碼。比如下面的程序
1
#include <stdio.h>
2
3
int
main()
4
{
5
6
printf(
"
Hello-1\n
"
);
7
printf(
"
Hello-2\n
"
);
8
printf(
"
Hello-3\n
"
);
9
10
return
0
;
11
}
程序運(yùn)行后,會(huì)按順序執(zhí)行第6、7、8行語(yǔ)句,于是輸出結(jié)果為:
2.其他運(yùn)行流程
但 很多時(shí)候,我們并不想要按照默認(rèn)的運(yùn)行流程去走,比如想在某個(gè)條件成立的情況下才執(zhí)行某一段代碼,否則不執(zhí)行。比如微信的這個(gè)界面:
如果用戶(hù)點(diǎn)擊了注冊(cè)按鈕,我們就執(zhí)行“跳轉(zhuǎn)到注冊(cè)界面”的代碼;如果用戶(hù)點(diǎn)擊了登錄按鈕,我們就執(zhí)行“跳轉(zhuǎn)到登錄界面”的代碼。如果用戶(hù)沒(méi)做出任何操作,就不執(zhí)行前面所說(shuō)的兩段代碼。要想實(shí)現(xiàn)這種功能,那就要學(xué)會(huì)如何去控制程序的運(yùn)行流程。
3.流程結(jié)構(gòu)
為了方便我們控制程序的運(yùn)行流程,C語(yǔ)言提供3種流程結(jié)構(gòu),不同的流程結(jié)構(gòu)可以實(shí)現(xiàn)不同的運(yùn)行流程。這3種流程結(jié)構(gòu)分別是:
- 順序結(jié)構(gòu):默認(rèn)的流程結(jié)構(gòu)。按照書(shū)寫(xiě)順序執(zhí)行每一條語(yǔ)句。
- 選擇結(jié)構(gòu):對(duì)給定的條件進(jìn)行判斷,再根據(jù)判斷結(jié)果來(lái)決定執(zhí)行哪一段代碼。
- 循環(huán)結(jié)構(gòu):在給定條件成立的情況下,反復(fù)執(zhí)行某一段代碼。
下面是這3種結(jié)構(gòu)的流程圖,大致預(yù)覽一下即可
一、順序結(jié)構(gòu)
順序結(jié)構(gòu)是3種結(jié)構(gòu)中最簡(jiǎn)單的,也是默認(rèn)的流程結(jié)構(gòu):程序中的語(yǔ)句是按照書(shū)寫(xiě)順序執(zhí)行的。在 文章開(kāi)頭 開(kāi)始列出的代碼段,就是順序結(jié)構(gòu),這里就不多介紹了。
二、選擇結(jié)構(gòu)1-if語(yǔ)句
C語(yǔ)言中選擇結(jié)構(gòu)的實(shí)現(xiàn)方式有兩種:if語(yǔ)句和switch語(yǔ)句。先來(lái)看下if語(yǔ)句的使用,而if語(yǔ)句的形式是有好多種的。
1.形式1
先來(lái)看看if語(yǔ)句最簡(jiǎn)單的形式
1> 簡(jiǎn)介
1
if
( 條件 )
2
{
3
語(yǔ)句1;
4
語(yǔ)句2;
5
....
6
}
如果if右邊小括號(hào)()中的條件成立,也就是為“真”時(shí),就會(huì)執(zhí)行第2~6行大括號(hào){}中的語(yǔ)句;如果條件為假,就不執(zhí)行大括號(hào){}中的語(yǔ)句。這里的if是關(guān)鍵字。
2> 舉例
1
int
a =
7
;
2
3
if
( a )
4
{
5
printf(
"
條件a成立\n
"
);
6
printf(
"
a的值為真
"
);
7
}
C語(yǔ)言規(guī)定所有非0值都為“真”,而a的值是7,因此第3行的條件是成立的,接著就會(huì)執(zhí)行第5、6行代碼。輸出結(jié)果如下:
1
條件a成立
2
a的值為真
如果將a的值改為0,那么第3行的條件就不成立,就不會(huì)執(zhí)行第5、6行代碼
3> 省略大括號(hào){}
如果if后面大括號(hào){}中只有一行代碼時(shí),可以省略大括號(hào)。形式如下:
if
( 條件 )
語(yǔ)句1;
注意:如果條件成立,只會(huì)執(zhí)行if后面的第1條語(yǔ)句;如果條件不成立,就不會(huì)執(zhí)行if后面的第1條語(yǔ)句。
1
int
a =
7
;
2
3
if
( a >
9
)
4
printf(
"
aaa
"
);
5
printf(
"
bbb
"
);
因?yàn)榈?行的a>9是不成立的,所以不會(huì)執(zhí)行第4行代碼。而第5行代碼跟if語(yǔ)句是沒(méi)有任何練習(xí)的,因此,第5行代碼照常執(zhí)行。于是會(huì)看到屏幕上只輸出:
。
由于第5行代碼跟if語(yǔ)句是沒(méi)有任何聯(lián)系的,所以一般會(huì)把代碼寫(xiě)成下面這樣:
1
int
a =
7
;
2
3
if
( a >
9
)
4
printf(
"
aaa
"
);
5
printf(
"
bbb
"
);
為了保證代碼的可讀性,不建議省略大括號(hào)!!!
4> 語(yǔ)句嵌套
if語(yǔ)句內(nèi)部是可以嵌套其他if語(yǔ)句的,如下面的例子
1
int
a =
7
;
2
3
if
( a >
0
)
4
{
5
printf(
"
a的值大于0\n
"
);
6
7
if
( a<
9
)
8
{
9
printf(
"
a的值小于9
"
);
10
}
11
}
第3行的a>0是成立的,因此會(huì)按順序執(zhí)行第4~11大括號(hào)中的代碼。執(zhí)行到第7行的時(shí)候,a<9也是成立的,因此會(huì)執(zhí)行第9行代碼。輸出結(jié)果:
1
a的值大于0
2
a的值小于9
5> 使用注意1
有些人習(xí)慣寫(xiě)完一行代碼就在后面加個(gè)分號(hào)";",于是寫(xiě)if語(yǔ)句的時(shí)候,他們可能會(huì)這樣寫(xiě):
1
int
a =
6
;
2
if
( a>
8
);
3
{
4
printf(
"
a大于8
"
);
5
}
如果第2行尾部的分號(hào),其實(shí)一個(gè)分號(hào)也是一條語(yǔ)句,這個(gè)叫做“空語(yǔ)句”。第2行的a>8不成立,所以不會(huì)執(zhí)行后面的“空語(yǔ)句”。而后面的大括號(hào){}跟if語(yǔ)句是沒(méi)有聯(lián)系的,因此會(huì)正常執(zhí)行,于是會(huì)看到輸出:
a大于8
所以要非常小心, 千萬(wàn)不要在if的小括號(hào)后面添加分號(hào) 。
第3~5行的內(nèi)容是一個(gè)獨(dú)立的“代碼塊”:
1
{
2
printf(
"
a大于8
"
);
3
}
6> 使用注意2
下面的寫(xiě)法從語(yǔ)法的角度看是對(duì)的:
int
a =
10
;
if
(a =
0
) {
printf(
"
條件成立
"
);
}
else
{
printf(
"
條件不成立
"
);
}
上述代碼是完全合理的,編譯器不會(huì)報(bào)錯(cuò),只是個(gè)警告而已。因 為a為0,所以為"假", 輸出結(jié)果是: " 條件不成立 "
這里隱藏著 很大的陷阱在:
假設(shè)你本來(lái)是想判斷a是否為0,那么本應(yīng)該寫(xiě)if (a == 0),若你誤寫(xiě)成了if (a = 0),那將是一件非常可怕的事情,因?yàn)榫幾g器又不報(bào)錯(cuò),這樣的BUG就難找了。因此, 像a==0這樣的表達(dá)式,最好寫(xiě)成0==a,若你誤寫(xiě)成0=a,編譯器會(huì)直接報(bào)錯(cuò)的 。
//
不推薦
if
(a ==
0
) {
}
//
推薦
if
(
0
==
a) {
}
7> 使用注意3
在C語(yǔ)言中,可以不保存關(guān)系運(yùn)算的結(jié)果。因此,下面的寫(xiě)法是合法的:
1
int
a =
10
;
2
a >
10
;
3
a ==
0
;
這里又是一個(gè)陷阱,假設(shè)你的本意是想給 a賦值為0,那么本應(yīng)該寫(xiě)a = 0; ,若你誤寫(xiě)成a == 0; ,那將又是一個(gè)非常難找的BUG,因?yàn)榫幾g器根本不會(huì)報(bào)錯(cuò)。在1993年的時(shí)候,這個(gè)BUG差點(diǎn)讓一樁價(jià)值2000萬(wàn)美元的硬件產(chǎn)品生意告吹,因?yàn)槿绻@個(gè)BUG不解決,這個(gè)產(chǎn)品就沒(méi)辦法正常使用
2.形式2
if還可以跟關(guān)鍵字else一起使用
1> 簡(jiǎn)介
1
if
( 條件 )
2
{
3
語(yǔ)句1;
4
}
5
else
6
{
7
語(yǔ)句2;
8
}
如果條件成立,就會(huì)執(zhí)行if后面大括號(hào){}中的語(yǔ)句;如果條件不成立,就會(huì)執(zhí)行else后面大括號(hào){}中的語(yǔ)句。總之,兩個(gè)大括號(hào)中一定會(huì)有1個(gè)被執(zhí)行,而且只能執(zhí)行的1個(gè)。
為了減少代碼行數(shù),你也可以寫(xiě)成下面的格式:
1
if
( 條件 ) {
2
語(yǔ)句1;
3
}
else
{
4
語(yǔ)句2;
5
}
當(dāng)然,也可以省略大括號(hào),寫(xiě)成下面的格式:
1
if
( 條件 )
2
語(yǔ)句1;
3
else
4
語(yǔ)句2;
如果條件成立,就執(zhí)行if后面的第1條語(yǔ)句;如果條件不成立,就執(zhí)行else后面的第1條語(yǔ)句。但還是不建議省略大括號(hào){}。
2> 舉例
1
int
a =
10
;
2
if
( a==
0
) {
3
printf(
"
a等于0
"
);
4
}
else
{
5
printf(
"
a不等于0
"
);
6
}
第2行的a==0不成立,所以會(huì)執(zhí)行第5行代碼,輸出結(jié)果:
a不等于0
3.形式3
if和else還有一種比較復(fù)雜的用法
1> 簡(jiǎn)介
1
if
( 條件1 )
2
{
3
語(yǔ)句1;
4
}
5
else
if
( 條件2 )
6
{
7
語(yǔ)句2;
8
}
9
else
if
( 條件3 )
10
{
11
語(yǔ)句3;
12
}
13
...
14
else
15
{
16
其他語(yǔ)句;
17
}
- 如果條件1成立,就執(zhí)行條件1后面大括號(hào){}中的內(nèi)容:第2~4行
- 如果條件1不成立,條件2成立,就執(zhí)行條件2后面大括號(hào){}中的內(nèi)容:第6~8行
- 如果條件1、條件2都不成立,條件3成立,就執(zhí)行條件3后面大括號(hào){}中的內(nèi)容:第10~12行
- 第13行的...表示可以有無(wú)限個(gè)else if
- 如果所有的條件都不成立,就會(huì)執(zhí)行else后面大括號(hào){}中的內(nèi)容:第15~17行
注意:這么多大括號(hào)中,只有1個(gè)大括號(hào)內(nèi)的代碼會(huì)被執(zhí)行。跟之前一樣,所有的大括號(hào)都可以省略,但是不建議省略。必要的時(shí)候,最后面的else那一段(第14~17行)是可以省略的。
2> 舉例
1
int
a =
10
;
2
if
( a==
0
) {
3
printf(
"
a等于0
"
);
4
}
else
if
( a>
0
) {
5
printf(
"
a大于0
"
);
6
}
else
{
7
printf(
"
a小于0
"
);
8
}
第2行中的a==0不成立,接著會(huì)檢查第4行。第4行的a>0成立,因此會(huì)執(zhí)行第5行代碼。輸出結(jié)果:
a大于0
如果a的值是負(fù)數(shù),那么第2、4行的條件都不成立,于是就會(huì)執(zhí)行第7行代碼。
三、選擇結(jié)構(gòu)2-switch語(yǔ)句
1.形式
先來(lái)看看switch語(yǔ)句的使用形式:
1
switch
(整型表達(dá)式)
2
{
3
case
數(shù)值1:
4
語(yǔ)句1;
5
break
;
6
case
數(shù)值2:
7
語(yǔ)句2;
8
break
;
9
... ...
10
case
數(shù)值n:
11
語(yǔ)句n;
12
break
;
13
default
:
14
語(yǔ)句n+
1
;
15
break
;
16
}
- 當(dāng)整型表達(dá)式的值等于“數(shù)值1”時(shí),就會(huì)執(zhí)行“語(yǔ)句1”,后面的break表示退出整個(gè)switch語(yǔ)句,也就是直接跳到第16行代碼;
- 當(dāng)整形表達(dá)式的值等于“數(shù)值2”時(shí),就會(huì)執(zhí)行“語(yǔ)句2”;后面的以此類(lèi)推。如果在數(shù)值1~數(shù)值n中,沒(méi)有一個(gè)值等于整型表達(dá)式的值,那么就會(huì)執(zhí)行default中的語(yǔ)句n+1。
- 由于所有的case后面都有個(gè)break,因此執(zhí)行完任意一個(gè)case中的語(yǔ)句后,都會(huì)直接退出switch語(yǔ)句
2.舉例
1
int
a =
10
;
2
3
switch
(a) {
4
case
0
:
5
printf(
"
這是一個(gè)0
"
);
6
break
;
7
case
5
:
8
printf(
"
這是一個(gè)5
"
);
9
break
;
10
case
10
:
11
printf(
"
這是一個(gè)10
"
);
12
break
;
13
default
:
14
printf(
"
什么也不是
"
);
15
break
;
16
}
因?yàn)閍的值剛好等于第10行case后面的10,所以會(huì)執(zhí)行第11行代碼,輸出結(jié)果:
這是一個(gè)10
3.break
break關(guān)鍵字的作用是退出整個(gè)switch語(yǔ)句。默認(rèn)的格式中,每個(gè)case后面都有個(gè)break,因此執(zhí)行完case中的語(yǔ)句后,就會(huì)退出switch語(yǔ)句。
1> 如果某個(gè)case后面沒(méi)有break,意味著執(zhí)行完這個(gè)case中的語(yǔ)句后,會(huì)按順序執(zhí)行后面所有case和default中的語(yǔ)句,直到遇到break為止
1
int
a =
0
;
2
3
switch
(a) {
4
case
0
:
5
printf(
"
這是一個(gè)0\n
"
);
6
case
5
:
7
printf(
"
這是一個(gè)5\n
"
);
8
case
10
:
9
printf(
"
這是一個(gè)10\n
"
);
10
break
;
11
default
:
12
printf(
"
什么也不是\n
"
);
13
break
;
14
}
- 由于變量a的值等于第4行case后面的0,因此肯定會(huì)執(zhí)行第5行代碼。
- 由于case 0中沒(méi)有break語(yǔ)句,就不會(huì)退出switch語(yǔ)句,繼續(xù)往下執(zhí)行代碼。
- 由于a的值已經(jīng)等于第4行case的值,接著不會(huì)再判斷a的值是否等于其他case的值了,直接按順序執(zhí)行第7、9行代碼。在第10行有個(gè)break,接著就會(huì)退出switch語(yǔ)句。
- 輸出結(jié)果為:
1
這是一個(gè)0
2
這是一個(gè)5
3
這是一個(gè)10
如果把a(bǔ)的值改為5,輸出結(jié)果為:
1
這是一個(gè)5
2
這是一個(gè)10
2> 在某些時(shí)候,我們確實(shí)沒(méi)有必要在每一個(gè)case后面添加break。下面舉一個(gè)例子:判斷分?jǐn)?shù)的優(yōu)良中差等級(jí)(100分滿(mǎn)分)。
1
int
score =
77
;
2
3
switch
(score/
10
) {
4
case
10
:
5
case
9
:
6
printf(
"
優(yōu)秀
"
);
7
break
;
8
9
case
8
:
10
printf(
"
良好
"
);
11
break
;
12
13
case
7
:
14
case
6
:
15
printf(
"
中等
"
);
16
break
;
17
18
default
:
19
printf(
"
差勁
"
);
20
break
;
21
}
- 當(dāng)score的范圍是90~100,score/10的值為10或9時(shí),就會(huì)執(zhí)行第6行代碼,然后退出switch語(yǔ)句;
- 當(dāng)score的范圍是80~89,score/10的值為8時(shí),就會(huì)執(zhí)行第10行代碼,然后退出switch語(yǔ)句;
- 當(dāng)score的范圍是60~79,score/10的值為7或6時(shí),就會(huì)執(zhí)行第15行代碼,然后退出switch語(yǔ)句;
- 當(dāng)score的范圍并不是60~100,score/10的值并不在6~10范圍內(nèi)時(shí),就會(huì)執(zhí)行第19行代碼,然后退出switch語(yǔ)句;
- score的值是77,所以score/10的值是7,輸出結(jié)果: 中等
4.在case中定義變量
有時(shí)候,我們可能會(huì)想在case中定義一些變量,這個(gè)時(shí)候,就必須用大括號(hào){}括住case中的所有語(yǔ)句。
1
int
a =
10
;
2
int
b =
4
;
3
4
char
op =
'
-
'
;
5
6
switch
(op)
7
{
8
case
'
+
'
:
9
{
10
int
sum = a +
b;
11
printf(
"
a+b=%d\n
"
, sum);
12
break
;
13
}
14
15
case
'
-
'
:
16
{
17
int
minus = a -
b;
18
printf(
"
a-b=%d\n
"
, minus);
19
break
;
20
}
21
22
default
:
23
printf(
"
不能識(shí)別的符號(hào)
"
);
24
break
;
25
}
在第10、17分別定義兩個(gè)變量。輸出結(jié)果:
a-b=
6
四、循環(huán)結(jié)構(gòu)1-while循環(huán)
假如要你在屏幕上重復(fù)輸出10次Hello World,你會(huì)怎么做?簡(jiǎn)單,把下面的代碼拷貝10份就行了。
1
printf(
"
Hello World\n
"
);
沒(méi)錯(cuò),把上次代碼寫(xiě)10遍,確實(shí)能實(shí)現(xiàn)功能。但是這樣的代碼太垃圾了,有很多的重復(fù)的代碼,這樣會(huì)使得代碼非常地臃腫,復(fù)用率低。因此,不建議這么做。
下次遇到像上面那樣重復(fù)執(zhí)行某個(gè)操作時(shí),首先要想到的應(yīng)該是循環(huán)結(jié)構(gòu)。所謂循環(huán),就是重復(fù)執(zhí)行某一個(gè)操作,C語(yǔ)言中有多種方式可以實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。先來(lái)看看while循環(huán)。
1.形式
1
while
( 條件 )
2
{
3
語(yǔ)句1;
4
語(yǔ)句2;
5
....
6
}
- 如果條件成立,就會(huì)執(zhí)行循環(huán)體中的語(yǔ)句(“循環(huán)體”就是while后面大括號(hào){}中的內(nèi)容)。然后再次判斷條件,重復(fù)上述過(guò)程,直到條件不成立就結(jié)束while循環(huán)
- while循環(huán)的特點(diǎn): 如果while中的條件一開(kāi)始就不成立,那么 循環(huán)體中的語(yǔ)句 永遠(yuǎn)不會(huì)被執(zhí)行
可以省略大括號(hào){},但是只會(huì)影響到while后面的第一條語(yǔ)句。不建議省略大括號(hào)。
1
while
( 條件 )
2
語(yǔ)句1;
2.舉例
在屏幕上重復(fù)輸出10次Hello World,每輸出一次的換行。
1
int
count =
0
;
2
while
( count <
10
)
3
{
4
printf(
"
Hello World\n
"
);
5
6
count++
;
7
}
如果省略第6行的count++,count就一直是0,那么count<10一直都是成立的,這個(gè)while循環(huán)將會(huì)陷入“死循環(huán)”,一直在重復(fù)執(zhí)行第4行代碼。
3.注意
如果寫(xiě)成下面這樣,也會(huì)讓程序進(jìn)入“死循環(huán)”
1
int
count =
0
;
2
3
while
( count <
10
);
4
{
5
printf(
"
Hello World\n
"
);
6
7
count++
;
8
}
- 注意第3行,while后面不小心加了個(gè)分號(hào); ,一個(gè)分號(hào)表示一條空語(yǔ)句。
- 可以看出:while循環(huán)只會(huì)影響到第3行的空語(yǔ)句,而第4~8行的代碼塊是不受while循環(huán)影響的
- 由于count是0,那么count<10一直都是成立的,程序?qū)?huì)一直重復(fù)執(zhí)行第3行的空語(yǔ)句,陷入死循環(huán)。
五、循環(huán)結(jié)構(gòu)2-do while循環(huán)
形式如下:
1
do
{
2
語(yǔ)句1;
3
語(yǔ)句2;
4
...
5
}
while
(條件);
- 注意第5行,后面是加上一個(gè)分號(hào);的
- 當(dāng)執(zhí)行到do-while循環(huán)時(shí),首先會(huì)執(zhí)行一遍循環(huán)體中的語(yǔ)句(“循環(huán)體”就是do后面大括號(hào){}中的內(nèi)容)。接著判斷while中的條件,如果條件成立,就執(zhí)行循環(huán)體中的語(yǔ)句。然后再次判斷條件,重復(fù)上述過(guò)程,直到條件不成立就結(jié)束while循環(huán)
- do-while循環(huán)的特點(diǎn): 不管while中的條件是否成立, 循環(huán)體中的語(yǔ)句 至少會(huì)被執(zhí)行一遍
- 其實(shí)do while循環(huán)的用法跟while循環(huán)是差不多的,這里就不舉例子了。
六、循環(huán)結(jié)構(gòu)3-for循環(huán)
1.形式
for循環(huán)是所有循環(huán)結(jié)構(gòu)中最復(fù)雜的。
1
for
(語(yǔ)句1
;
條件
;
語(yǔ)句2) {
2
語(yǔ)句3;
3
語(yǔ)句4;
4
...
5
}
- for循環(huán)開(kāi)始時(shí),會(huì)先執(zhí)行語(yǔ)句1,而且 在整個(gè)循環(huán)過(guò)程中只執(zhí)行一次語(yǔ)句1
- 接著判斷條件,如果條件成立,就會(huì)執(zhí)行循環(huán)體中的語(yǔ)句(“循環(huán)體”就是for后面大括號(hào){}中的內(nèi)容)
- 循環(huán)體執(zhí)行完畢后,接下來(lái)會(huì)執(zhí)行語(yǔ)句2,然后再次判斷條件,重復(fù)上述過(guò)程,直到條件不成立就結(jié)束for循環(huán)
2.舉例
1
for
(
int
i =
0
; i<
5
; i++
)
2
{
3
printf(
"
%d
"
, i);
4
}
輸出結(jié)果為:
0
1
2
3
4
需要注意的是:變量i的作用域是第1~4行。一旦離開(kāi)了這個(gè)for循環(huán),變量i就失效了。
3.補(bǔ)充
如果for循環(huán)的初始化語(yǔ)句和循環(huán)一次后執(zhí)行的語(yǔ)句是由多條語(yǔ)句組成的,就用逗號(hào),隔開(kāi)
1
for
(
int
x =
0
, y =
0
; x<
3
; x++, y+=
2
)
2
{
3
printf(
"
x=%d, y=%d \n
"
, x, y);
4
}
輸出結(jié)果:
x=
0
, y=
0
x
=
1
, y=
2
x
=
2
, y=
4
七、break和continue
接下來(lái),介紹兩個(gè)比較重要的語(yǔ)句:break和continue。
1.break
前面在switch語(yǔ)句中已經(jīng)用到了break,它的作用是跳出switch語(yǔ)句。它也可以用在循環(huán)結(jié)構(gòu)中,這時(shí)候它的作用是跳出整個(gè)循環(huán)語(yǔ)句。
1> 舉例
這里以for循環(huán)為例子,break也可以用在while循環(huán)、do-while循環(huán)中。
1
for
(
int
i =
0
; i<
5
; i++
) {
2
printf(
"
i=%d \n
"
, i);
3
4
if
(i>
2
) {
5
break
;
6
}
7
}
上面代碼的意思是當(dāng)i>2時(shí),就跳出整個(gè)for循環(huán),也就是結(jié)束for循環(huán),所以輸出結(jié)果是:
i=
0
i
=
1
i
=
2
i
=
3
2> for循環(huán)嵌套
先來(lái)看一個(gè)for循環(huán)嵌套的例子,嵌套的意思就是:for循環(huán)內(nèi)部又一個(gè)for循環(huán)
1
for
(
int
x =
0
; x<
2
; x++
) {
2
for
(
int
y =
0
; y<
2
; y++
) {
3
printf(
"
x=%d, y=%d \n
"
, x, y);
4
}
5
}
輸出結(jié)果是:
1
x=
0
, y=
0
2
x=
0
, y=
1
3
x=
1
, y=
0
4
x=
1
, y=
1
這個(gè)時(shí)候如果在for循環(huán)中加入一個(gè)break,那么這個(gè)break究竟是跳出里面還是外面的for循環(huán)呢?
1
for
(
int
x =
0
; x<
2
; x++
) {
2
for
(
int
y =
0
; y<
2
; y++
) {
3
printf(
"
x=%d, y=%d \n
"
, x, y);
4
5
break
;
6
}
7
}
注意第5行的break,這個(gè)break的作用是跳出里面的for循環(huán),并非外面的for循環(huán)。所以輸出結(jié)果是:
x=
0
, y=
0
x
=
1
, y=
0
如果改變一下break的位置
1
for
(
int
x =
0
; x<
2
; x++
) {
2
for
(
int
y =
0
; y<
2
; y++
) {
3
printf(
"
x=%d, y=%d \n
"
, x, y);
4
}
5
6
break
;
7
}
注意第6行的break,這個(gè)break的作用是跳出外面的for循環(huán),并非里面的for循環(huán)。所以輸出結(jié)果是:
x=
0
, y=
0
x
=
0
, y=
1
規(guī)律已經(jīng)很明顯了:break只會(huì)影響它所在的那個(gè)for循環(huán)
2.continue
continue只能使用在循環(huán)結(jié)構(gòu)中,它的作用是跳過(guò)這一次循環(huán),直接進(jìn)入下一次循環(huán)。
這里以for循環(huán)為例子,continue也可以用在while循環(huán)、do-while循環(huán)中。
1
for
(
int
x =
0
; x<
10
; x++
) {
2
if
(x%
2
==
0
) {
3
continue
;
4
}
5
6
printf(
"
x=%d \n
"
, x);
7
}
注意第2行,當(dāng)x%2==0,也就是當(dāng)x是2的倍數(shù)時(shí),就跳過(guò)這次循環(huán),不執(zhí)行第6行語(yǔ)句,直接進(jìn)入下一次循環(huán)。輸出結(jié)果:
1
x=
1
2
x=
3
3
x=
5
4
x=
7
5
x=
9
跟break一樣,continue只會(huì)影響它所在的那個(gè)for循環(huán)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

