從這一課開始,終於可以愉快地編碼了.
C語言是一種編程語言,就像其他語言一樣,也是一句一句的表達.
C語言習慣用小寫字母,大小寫敏感,不使用行號,無程序行概念,可使用空行和空格,常用鋸齒形書寫格式.
int main(int argc, char *argv[] ) { int i=0,j=0,sum=0; sum=10; for(i=1; i<10;i++) { for(j=1;j<10;j++) { sum+=i*j ; } } printf(“%d\n”,sum); return 0; }?C語言結構特點 ?程序由一個或多個函數組成 ?必須有且只能有一個主函數main(),可以放在程序中任一位置 ?程序執行從main開始,在main中結束,其它函數通過嵌套調用得以執行。 ?C程序由語句組成 ?用“;”作為語句終止符 ?注釋 ?/* */為注釋,不能嵌套,不產生編譯代碼 ======================================================== 在C語言中,共有三大常用的程序結構:
<一> 空語句
只有分號“;”組成的語句稱為空語句。 空語句是什麼也不執行的語句。在程序中空語句可用來作空循環體。
適用的場合是語法上要求出現一個完整的語句,但並不需要執行任何任務的情況.
<二> 表達式語句
賦值語句是由賦值表達式再加上分號構成的表達式語句。其一般形式為: 變量=表達式; 賦值語句的功能和特點都與
賦值表達式相同。
int a=3;//變量定義並初始化a=100;//賦值語句,將變量a賦值為100
以上都是順序結構,也就是說代碼一句一句自上而下開始執行.
選擇結構:
if 和 else 是兩個新的關鍵字,if 意為“如果”,else 意為“否則”,用來對條件進行判斷,並根據判斷結果執行不同的語句。總結起來,if else 的結構為:
if(判斷條件){
語句塊1
}else{
語句塊2
}
{ }包圍的一個或多個語句的集合。如果語句塊中只有一個語句,也可以省略{ },例如:
if(age>=18) printf("恭喜,你已經成年!\n");
else printf("抱歉,你還未成年!\n");
由於if else 語句可以根據不同的情況執行不同的代碼,所以也叫分支結構或選擇結構,上面的代碼中,就有兩個分支。
求兩個數中的較大值:
#include
int main()
{
int a, b, max;
printf("輸入兩個整數:");
scanf("%d %d", &a, &b);
if(a>b) max=a;
else max=b;
printf("%d和%d的較大值是:%d\n", a, b, max);
return 0;
}
運行結果:
輸入兩個整數:34 28↙
34和28的較大值是:34
本例中借助變量max,用max來保存較大的值,最後將max輸出。
只使用if語句
有的時候,我們需要在滿足某種條件時進行一些操作,而不滿足條件時就不進行任何操作,這個時候我們可以只使用 if 語句。也就是說,if else 不必同時出現。
單獨使用 if 語句的形式為:
if(判斷條件){
語句塊
}
意思是,如果判斷條件成立就執行語句塊,否則直接跳過。其執行過程可表示為下圖:
只使用 if 語句來求兩個數中的較大值:
#include
int main()
{
int a, b, max;
printf("輸入兩個整數:");
scanf("%d %d", &a, &b);
max=b; // 假設b最大
if(a>b) max=a; // 如果a>b,那麼更改max的值
printf("%d和%d的較大值是:%d\n", a, b, max);
return 0;
}
運行結果:
輸入兩個整數:34 28
34和28的較大值是:34
本例程序中,輸入兩個數a、b。把b先賦予變量max,再用 if 語句判別max和b的大小,如max小於b,則把b賦予max。因此max中總是大數,最後輸出max的值。
多個if else語句
if else 語句也可以多個同時使用,構成多個分支,形式如下:
if(判斷條件1){
語句塊1
}else if(判斷條件2){
語句塊2
}else if(判斷條件3){
語句塊3
}else if(判斷條件m){
語句塊m
}else{
語句塊n
}
意思是,從上到下依次檢測判斷條件,當某個判斷條件成立時,則執行其對應的語句塊,然後跳到整個 if else 語句之外繼續執行其他代碼。如果所有判斷條件都不成立,則執行語句塊n,然後繼續執行後續代碼。
也就是說,一旦遇到能夠成立的判斷條件,則不再執行其他的語句塊,所以最終只能有一個語句塊被執行。
例如,使用多個 if else 語句判斷輸入的字符的類別:
#include
int main(){
char c;
printf("Input a character:");
c=getchar();
if(c<32)
printf("This is a control character\n");
else if(c>='0'&&c<='9')
printf("This is a digit\n");
else if(c>='A'&&c<='Z')
printf("This is a capital letter\n");
else if(c>='a'&&c<='z')
printf("This is a small letter\n");
else
printf("This is an other character\n");
return 0;
}
運行結果:
Input a character:e↙
This is a small letter
本例要求判別鍵盤輸入字符的類別。可以根據輸入字符的ASCII碼來判別類型。由ASCII碼表可知ASCII值小於32的為控制字符。在“0”和“9”之間的為數字,在“A”和“Z”之間為大寫字母, 在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個多分支選擇的問題,用多個 if else 語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“e”,輸出顯示它為小寫字符。
在使用 if 語句時還應注意以下兩點:
在 if 語句中,判斷條件必須用括號括起來。語句塊由{ }包圍,但要注意的是在}之後不需要再加分號;(當然加上也沒錯)。
if語句的嵌套
if 語句也可以嵌套使用,例如:
運行結果:
Input two numbers:12 68
a
if 語句嵌套時,要注意 if 和 else 的配對問題。C語言規定,else 總是與它前面最近的 if 配對,例如:
- if(a!=b) // ①
- if(a>b) printf("a>b\n"); // ②
- else printf("a ③和②配對,而不是和①配對。
C語言雖然沒有限制 if else 能夠處理的分支數量,但當分支過多時,用 if else 處理會不太方便,而且容易出現 if else 配對出錯的情況。例如,輸入一個整數,輸出該整數對應的星期幾的英文表示:
- #include
- int main(){
- int a;
- printf("Input integer number:");
- scanf("%d",&a);
- if(a==1){
- printf("Monday\n");
- }else if(a==2){
- printf("Tuesday\n");
- }else if(a==3){
- printf("Wednesday\n");
- }else if(a==4){
- printf("Thursday\n");
- }else if(a==5){
- printf("Friday\n");
- }else if(a==6){
- printf("Saturday\n");
- }else if(a==7){
- printf("Sunday\n");
- }else{
- printf("error\n");
- }
- return 0;
- }
運行結果:
Input integer number:3↙
Wednesday
對於這種情況,實際開發中一般使用 switch 語句代替,請看下面的代碼:
- #include
- int main(){
- int a;
- printf("Input integer number:");
- scanf("%d",&a);
- switch(a){
- case 1: printf("Monday\n"); break;
- case 2: printf("Tuesday\n"); break;
- case 3: printf("Wednesday\n"); break;
- case 4: printf("Thursday\n"); break;
- case 5: printf("Friday\n"); break;
- case 6: printf("Saturday\n"); break;
- case 7: printf("Sunday\n"); break;
- default:printf("error\n"); break;
- }
- return 0;
- }
運行結果:
Input integer number:4↙
Thursday
switch是另外一種選擇結構的語句,用來代替簡單的、擁有多個分枝的 if else 語句,基本格式如下:
switch(表達式){
case 整型數值1: 語句 1;
case 整型數值2: 語句 2;
......
case 整型數值n: 語句 n;
default: 語句 n+1;
}
它的執行過程是:
1) 首先計算“表達式”的值,假設為 m。
2) 從第一個 case 開始,比較“整型數值1”和 m,如果它們相等,就執行冒號後面的所有語句,也就是從“語句1”一直執行到“語句n+1”,而不管後面的 case 是否匹配成功。
3) 如果“整型數值1”和 m 不相等,就跳過冒號後面的“語句1”,繼續比較第二個 case、第三個 case……一旦發現和某個整型數值相等了,就會執行後面所有的語句。假設 m 和“整型數值5”相等,那麼就會從“語句5”一直執行到“語句n+1”。
4) 如果直到最後一個“整型數值n”都沒有找到相等的值,那麼就執行 default 後的“語句 n+1”。
需要重點強調的是,當和某個整型數值匹配成功後,會執行該分支以及後面所有分支的語句。例如:
- #include
- int main(){
- int a;
- printf("Input integer number:");
- scanf("%d",&a);
- switch(a){
- case 1: printf("Monday\n");
- case 2: printf("Tuesday\n");
- case 3: printf("Wednesday\n");
- case 4: printf("Thursday\n");
- case 5: printf("Friday\n");
- case 6: printf("Saturday\n");
- case 7: printf("Sunday\n");
- default:printf("error\n");
- }
- return 0;
- }
運行結果:
Input integer number:4↙
Thursday
Friday
Saturday
Sunday
error
輸入4,發現和第四個分支匹配成功,於是就執行第四個分支以及後面的所有分支。這顯然不是我們想要的結果,我們希望只執行第四個分支,而跳過後面的其他分支。為了達到這個目標,必須要在每個分支最後添加break;語句。
break是C語言中的一個關鍵字,專門用於跳出 switch 語句。所謂“跳出”,是指一旦遇到 break,就不再執行 switch 中的任何語句,包括當前分支中的語句和其他分支中的語句;也就是說,整個 switch 執行結束了,接著會執行整個 switch 後面的代碼。
使用 break 修改上面的代碼:
#include
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
運行結果:
Input integer number:4↙
Thursday
由於 default 是最後一個分支,匹配後不會再執行其他分支,所以也可以不添加break;語句。
最後需要說明的兩點是:
1) case 後面必須是一個整數,或者是結果為整數的表達式,但不能包含任何變量。請看下面的例子:
case 10: printf("..."); break; //正確
case 8+9: printf("..."); break; //正確
case 'A': printf("..."); break; //正確,字符和整數可以相互轉換
case 'A'+19: printf("..."); break; //正確,字符和整數可以相互轉換
case 9.5: printf("..."); break; //錯誤,不能為小數
case a: printf("..."); break; //錯誤,不能包含變量
case a+10: printf("..."); break; //錯誤,不能包含變量
2) default 不是必須的。當沒有 default 時,如果所有 case 都匹配失敗,那麼就什麼都不執行。
在上邊例子中,if 的判斷條件中使用了<=、>、!=等符號,它們專門用在判斷條件中,讓程序決定下一步的操作,稱為關系運算符(Relational Operators)。
關系運算符在使用時,它的的兩邊都會有一個表達式,比如變量、數值、加減乘除運算等,關系運算符的作用就是判明這兩個表達式的大小關系。注意,是判明大小關系,不是其他關系。
C語言提供了以下關系運算符:
關系運算符
含 義
數學中的表示
<
小於
<
<=
小於或等於
≤
>
大於
>
>=
大於或等於
≥
==
等於
=
!=
不等於
≠
關系運算符都是雙目運算符,其結合性均為左結合。關系運算符的優先級低於算術運算符,高於賦值運算符。在六個關系運算符中,<、<=、>、>=的優先級相同,高於==和!=,==和!=的優先級相同。
在C語言中,有的運算符有兩個操作數,例如 10+20,10和20都是操作數,+ 是運算符。我們將這樣的運算符稱為雙目運算符。同理,將有一個操作數的運算符稱為單目運算符,將有三個操作數的運算符稱為三目運算符。
常見的雙目運算符有 +、-、*、/ 等,單目運算符有 ++、-- 等,三目運算符只有一個,就是 ? :,
關系運算符的兩邊可以是變量、數據或表達式,例如:
1) a+b > c-d
2) x > 3/2
3) 'a'+1 < c
4) -i-5*j == k+1
關系運算符也可以嵌套使用,例如:
1) a > (b > c)
2) a != (c == d)
關系運算符的運算結果只有 0 或 1。當條件成立時結果為 1,條件不成立結果為 0。例如:
5>0 成立,其值為1;34-12>100 不成立,其值為 0;(a=3)>(b=5) 由於3>5不成立,故其值為0。
我們將運算結果 1 稱為“真”,表示條件成立,將 0 稱為“假”,表示條件不成立。
下面的代碼會將關系運算符的結果輸出:
運行結果:
1, 0
1, 1
0, 0
對於含多個關系運算符的表達式,如 k==j==i+5,根據運算符的左結合性,先計算k==j,該式不成立,其值為0,再計算0==i+5,也不成立,故表達式值為0。
需要提醒的是,==才表示等於,而=表示賦值,大家要注意區分,切勿混淆。
&&是一個新的運算符,稱為邏輯運算符,表示age>=18和score>=60兩個條件必須同時成立才能執行 if 後面的代碼,否則就執行 else 後面的代碼。
在高中數學中,我們就學過邏輯運算,例如p為真命題,q為假命題,那麼“p且q”為假,“p或q”為真,“非q”為真。在C語言中,也有類似的邏輯運算:
運算符
說明
結合性
舉例
&&
與運算,雙目,對應數學中的“且”
左結合
1&&0、(9>3)&&(b>a)
||
或運算,雙目,對應數學中的“或”
左結合
1||0、(9>3)||(b>a)
!
非運算,單目,對應數學中的“非”
右結合
!a、!(2<5)
邏輯運算的結果
在編程中,我們一般將零值稱為“假”,將非零值稱為“真”。邏輯運算的結果也只有“真”和“假”,“真”對應的值為 1,“假”對應的值為 0。
1) 與運算(&&)
參與運算的兩個表達式都為真時,結果才為真,否則為假。例如:
5&&0
5為真,0為假,相與的結果為假,也就是 0。
(5>0) && (4>2)
5>0 的結果是1,為真,4>2結果是1,也為真,所以相與的結果為真,也就是1。
2) 或運算(||)
參與運算的兩個表達式只要有一個為真,結果就為真;兩個表達式都為假時結果才為假。例如:
10 || 0
10為真,0為假,相或的結果為真,也就是 1。
(5>0) || (5>8)
5>0 的結果是1,為真,5>8 的結果是0,為假,所以相或的結果為真,也就是1。
3) 非運算(!)
參與運算的表達式為真時,結果為假;參與運算的表達式為假時,結果為真。例如:
!0
0 為假,非運算的結果為真,也就是 1。
!(5>0)
5>0 的結果是1,為真,非運算的結果為假,也就是 0。
邏輯運算符和其它運算符優先級從低到高依次為:
賦值運算符(=) < &&和|| < 關系運算符 < 算術運算符 < 非(!)
&& 和 || 低於關系運算符,! 高於算術運算符。
按照運算符的優先順序可以得出:
#include
int main(){
char c='k';
int i=1, j=2, k=3;
float x=3e+5, y=0.85;
int result_1 = 'a'+5 printf( "%d, %d\n", result_1, -i-2*j>=k+1 );
printf( "%d, %d\n", 1 printf( "%d, %d\n", i+j+k==-2*j, k==j==i+5 );
return 0;
}
a>b && c>d 等價於 (a>b)&&(c>d)!b==c||dc&&x+yc)&&((x+y) 另外,邏輯表達式也可以嵌套使用,例如a>b && b || 9>c,a || c>d && !p
循環結構
所謂循環(Loop),就是重復地執行同一段代碼,例如要計算 1+2+3+……+99+100 的值,就要重復進行99次加法運算。
while循環
while循環的一般形式為:
while(表達式){
語句塊
}
意思是,先計算“表達式”的值,當值為真(非0)時, 執行“語句塊”;執行完“語句塊”,再次計算表達式的值,如果為真,繼續執行“語句塊”……這個過程會一直重復,直到表達式的值為假(0),就退出循環,執行 while 後面的代碼。
我們通常將“表達式”稱為循環條件,把“語句塊”稱為循環體,整個循環的過程就是不停判斷循環條件、並執行循環體代碼的過程。
用 while 循環計算1加到100的值:
#include
int main(){
int i=1, sum=0;
while(i<=100){
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
運行結果:
5050
代碼分析:
1) 程序運行到 while 時,因為 i=1,i<=100 成立,所以會執行循環體;執行結束後 i 的值變為 2,sum 的值變為 1。
2) 接下來會繼續判斷 i<=100是否成立,因為此時 i=2,i<=100 成立,所以繼續執行循環體;執行結束後 i 的值變為 3,sum 的值變為3。
3) 重復執行步驟 2)。
4) 當循環進行到第100次,i 的值變為 101,sum 的值變為5050;因為此時 i<=100 不再成立,所以就退出循環,不再執行循環體,轉而執行while循環後面的代碼。
while 循環的整體思路是這樣的:設置一個帶有變量的循環條件,也即一個帶有變量的表達式;在循環體中額外添加一條語句,讓它能夠改變循環條件中變量的值。這樣,隨著循環的不斷執行,循環條件中變量的值也會不斷變化,終有一個時刻,循環條件不再成立,整個循環就結束了。
如果循環條件中不包含變量,會發生什麼情況呢?
1) 循環條件成立時的話,while 循環會一直執行下去,永不結束,成為“死循環”。例如:
#include
int main(){
while(1){
printf("1");
}
return 0;
}
運行程序,會不停地輸出“1”,直到用戶強制關閉。
2) 循環條件不成立的話,while 循環就一次也不會執行。例如:
#include
int main(){
while(0){
printf("1");
}
return 0;
}
運行程序,什麼也不會輸出。
再看一個例子,統計從鍵盤輸入的一行字符的個數:
#include
int main(){
int n=0;
printf("Input a string:");
while(getchar()!='\n') n++;
printf("Number of characters: %d\n", n);
return 0;
}
運行結果:
Input a string:c.biancheng.net↙
Number of characters: 15
本例程序中的循環條件為getchar()!='\n',其意義是,只要從鍵盤輸入的字符不是回車就繼續循環。循環體n++;完成對輸入字符個數計數。
do-while循環
除了while循環,在C語言中還有一種 do-while 循環。
do-while循環的一般形式為:
do{
語句塊
}while(表達式);
do-while循環與while循環的不同在於:它會先執行“語句塊”,然後再判斷表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while 循環至少要執行一次“語句塊”。
用do-while計算1加到100的值:
#include
int main(){
int i=1, sum=0;
do{
sum+=i;
i++;
}while(i<=100);
printf("%d\n", sum);
return 0;
}
運行結果:
5050
注意while(i<=100);最後的分號;,這個必須要有。
while循環和do-while各有特點,大家可以適當選擇,實際編程中使用while循環較多。
除了while循環,C語言中還有for循環,它的使用更加靈活,完全可以取代 while 循環。
上節我們使用 while 循環來計算1加到100的值,代碼如下:
#include
int main(){
int i, sum=0;
i = 1; //語句①
while(i<=100 /*語句②*/ ){
sum+=i;
i++; //語句③
}
printf("%d\n",sum);
return 0;
}
可以看到,語句①②③被放到了不同的地方,代碼結構較為松散。為了讓程序更加緊湊,可以使用 for 循環來代替,如下所示:
#include
int main(){
int i, sum=0;
for(i=1/*語句①*/; i<=100/*語句②*/; i++/*語句③*/){
sum+=i;
}
printf("%d\n",sum);
return 0;
}
在 for 循環中,語句①②③被集中到了一起,代碼結構一目了然。
for 循環的一般形式為:
for(表達式1; 表達式2; 表達式3){
語句塊
}
它的運行過程為:
1) 先執行“表達式1”。
2) 再執行“表達式2”,如果它的值為真(非0),則執行循環體,否則結束循環。
3) 執行完循環體後再執行“表達式3”。
4) 重復執行步驟 2) 和 3),直到“表達式2”的值為假,就結束循環。
上面的步驟中,2) 和 3) 是循環條件,會重復判斷
“表達式1”僅在第一次循環時執行,以後都不會再執行,可以認為這是一個初始化語句。“表達式2”一般是一個關系表達式,決定了是否還要繼續下次循環,稱為“循環條件”。“表達式3”很多情況下是一個帶有自增或自減操作的表達式,以使循環條件逐漸變得“不成立”。
for循環的執行過程可用下圖表示:
我們再來分析一下“計算從1加到100的和”的代碼:
#include
int main(){
int i, sum=0;
for(i=1; i<=100; i++){
sum+=i;
}
printf("%d\n",sum);
return 0;
}
運行結果:
5050
代碼分析:
1) 執行到 for 語句時,先給 i 賦初值1,判斷 i<=100 是否成立;因為此時 i=1,i<=100 成立,所以執行循環體。循環體執行結束後(sum的值為1),再計算 i++。
2) 第二次循環時,i 的值為2,i<=100 成立,繼續執行循環體。循環體執行結束後(sum的值為3),再計算 i++。
3) 重復執行步驟 2),直到第101次循環,此時 i 的值為101,i<=100 不成立,所以結束循環。
由此我們可以總結出for循環的一般形式:
for(初始化語句; 循環條件; 自增或自減){
語句塊
}
for 循環中的三個表達式
for 循環中的“表達式1(初始化條件)”、“表達式2(循環條件)”和“表達式3(自增或自減)”都是可選項,都可以省略(但分號;必須保留)。
1) 修改“從1加到100的和”的代碼,省略“表達式1(初始化條件)”:
int main(){
int i = 1, sum = 0;
for( ; i<=100; i++){
sum+=i;
}
可以看到,將i=1移到了 for 循環的外面。
2) 省略了“表達式2(循環條件)”,如果不做其它處理就會成為死循環。例如:
for(i=1; ; i++) sum=sum+i;
相當於:
i=1;
while(1){
sum=sum+i;
i++;
}
所謂死循環,就是循環條件永遠成立,循環會一直進行下去,永不結束。死循環對程序的危害很大,一定要避免。
3) 省略了“表達式3(自增或自減)”,就不會修改“表達式2(循環條件)”中的變量,這時可在循環體中加入修改變量的語句。例如:
for( i=1; i<=100; ){
sum=sum+i;
i++;
}
4) 省略了“表達式1(初始化語句)”和“表達式3(自增或自減)”。例如:
for( ; i<=100 ; ){
sum=sum+i;
i++;
}
相當於:
while(i<=100){
sum=sum+i;
i++;
}
5) 3個表達式可以同時省略。例如:
for( ; ; ) 語句
相當於:
while(1) 語句
6) “表達式1”可以是初始化語句,也可以是其他語句。例如:
for( sum=0; i<=100; i++ ) sum=sum+i;
7) “表達式1”和“表達式3”可以是一個簡單表達式也可以是逗號表達式。
for( sum=0,i=1; i<=100; i++ ) sum=sum+i;
或:
for( i=0,j=100; i<=100; i++,j-- ) k=i+j;
8) “表達式2”一般是關系表達式或邏輯表達式,但也可是數值或字符,只要其值非零,就執行循環體。例如:
for( i=0; (c=getchar())!='\n'; i+=c );
又如:
for( ; (c=getchar())!='\n' ; )
printf("%c",c);
使用while或for循環時,如果想提前結束循環(在不滿足結束條件的情況下結束循環),可以使用break或continue關鍵字。
break關鍵字
當 break 關鍵字用於 while、for 循環時,會終止循環而執行整個循環語句後面的代碼。
使用 while 循環計算1加到100的值:
#include
int main(){
int i=1, sum=0;
while(1){ //循環條件為死循環
sum+=i;
i++;
if(i>100) break;
}
printf("%d\n", sum);
return 0;
}
運行結果:
5050
while 循環條件為 1,是一個死循環。當執行到第100次循環的時候,計算完i++;後 i 的值為 101,此時 if 語句的條件 i> 100 成立,執行break;語句,結束循環。
在多層循環中,一個 break 語句只向外跳一層。例如,輸出一個4*4的整數矩陣:
#include
int main(){
int i=1, j;
while(1){ // 外層循環
j=1;
while(1){ // 內層循環
printf("%-4d", i*j);
j++;
if(j>4) break; //跳出內層循環
}
printf("\n");
i++;
if(i>4) break; // 跳出外層循環
}
-
return 0;
}
運行結果:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
當 j>4 成立時,執行break;,跳出內層循環;外層循環依然執行,直到 i>4 成立,跳出外層循環。內層循環共執行了4次,外層循環共執行了1次。
continue語句
continue 語句的作用是跳過循環體中剩余的語句而強制進入下一次循環。continue語句只用在 while、for 循環中,常與 if 條件語句一起使用,判斷條件是否成立。
來看一個例子:
#include
int main(){
char c = 0;
while(c!='\n'){ //回車鍵結束循環
c=getchar();
if(c=='4' || c=='5'){ //按下的是數字鍵4或5
continue; //跳過當次循環,進入下次循環
}
putchar(c);
}
return 0;
}
運行結果:
0123456789↙
01236789
程序遇到while時,變量c的值為'\0',循環條件c!='\n'成立,開始第一次循環。getchar() 使程序暫停執行,等待用戶輸入,直到用戶按下回車鍵才開始讀取字符。
本例我們輸入的是 0123456789,當讀取到4或5時,if 的條件c=='4'||c=='5'成立,就執行 continue 語句,結束當前循環,直接進入下一次循環,也就是說putchar(c);不會被執行到。而讀取到其他數字時,if 的條件不成立,continue 語句不會被執行到,putchar(c);就會輸出讀取到的字符。
break與continue的對比:break 用來結束所有循環,循環語句不再有執行的機會;continue 用來結束本次循環,直接跳到下一次循環,如果循環條件成立,還會繼續循環。
goto 語句, 好多人都是主張慎用,禁用的,這裡就不講了,基本上也用不到.
#include
int main(){
int a,b;
printf("Input two numbers:");
scanf("%d %d",&a,&b);
if(a!=b){ //!=表示不等於
if(a>b) printf("a>b\n");
else printf("a }else{
printf("a=b\n");
}
return 0;
}