目錄
1. 什么是陳述句?
2. 分支陳述句(選擇結構)
2.1 if陳述句
2.1.1 懸空else
2.1.2 if書寫形式的對比
2.2 switch陳述句
2.2.1 在switch陳述句中的 break
2.2.2 default子句
3. 回圈陳述句 while,for,do…while()
3.1 while回圈
3.1.1 while陳述句中的break和continue
3.2 for回圈
3.2.1 語法
3.2.2 break和continue在for回圈中
3.2.3 for陳述句的回圈控制變數
3.3 break陳述句和continue陳述句的區別
3.4 do...while()回圈
3.4.1 do陳述句的語法:
3.4.2 do陳述句的特點
4.goto陳述句
5.幾種回圈的比較
本章重點講解分支陳述句和回圈陳述句的使用
1. 什么是陳述句?
C語言中由一個分號 ; 隔開的就是一條陳述句,
如下圖:
int a = 0;
printf("Hei Tuo");
1+2;
2. 分支陳述句(選擇結構)
選擇結構用于判斷給定的條件,根據判斷的結果判斷某些條件,根據判斷的結果來控制程式的流程,
2.1 if陳述句
if陳述句的一般語法結構形式如下兩種:
//第一種
if(運算式)
陳述句;
//第二種
if(運算式)
陳述句2;
else
陳述句3;
//第三種,多分支
if(運算式1)
陳述句1;
else if(運算式2)
陳述句2;
else
陳述句3;
講解:如果滿足運算式中的條件,行該if條件下的陳述句,不滿足則執行else下的陳述句,
if陳述句使用示例:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("中年\n");
}
else if(age>=50 && age<80)
{
printf("老年\n");
}
else
{
printf("老壽星\n");
}
}
注意: 如果運算式的結果為真,則陳述句執行,
在C語言中,0表示假,非0表示真,
如果條件成立,則執行該條件下的多條陳述句,行使代碼塊中的功能,
#include <stdio.h>
int main()
{
if(運算式)
{
陳述句1;
}
else
{
陳述句2;
}
return 0;
}
注意:這里的一對 { } 就是一個代碼塊,
說明:
(1)整個if陳述句可以寫在多行上,也可以寫在一行上,如:
if(x>0) y=0;else y=-1;
但是,為了程式清晰,提倡寫成鋸齒形式,
(2)if陳述句無論寫在幾行上,都是一個整體,不要誤認為if部分是一個陳述句,else部分是另一個陳述句,不要一看到分號,就以為是if陳述句結束了,在系統對if陳述句編譯時,若發現內嵌陳述句(出現分號),還要檢查其后有無else,如果無else,就認為整個if陳述句結束,如果有else,則把else子句作為if陳述句的一部分,
注意else子句不能作為陳述句單獨使用,必須是if陳述句的一部分與if配對使用,
2.1.1 懸空else
如下代碼,缺少{}使代碼的邏輯模糊,不能清楚展現;導致代碼整體的風格不好,
#include <stdio.h>
int main()
{
int a = 0;
int b = 3;
if(a == 1)
if(b == 3)
printf("Hei Tuo\n");//問題1
else//問題2
printf("hei tuo\n");
return 0;
}
正確參考{},改正:
#include <stdio.h>
int main()
{
int a = 0;
int b = 3;
if(a == 1)
{
if(b == 3)
{
printf("Hei Tuo\n");
}
}
else
{
printf("hei tuo\n");
}
return 0;
}
注意else的匹配:else是和它離的最近的if進行匹配
2.1.2 if書寫形式的對比
試看如下舉例四個代碼:
//代碼1
if (condition) {
return x;
}
return y;
//代碼2
if(condition)
{
return x;
}
else
{
return y;
}
//代碼3
int num = 1;
if(num == 5)
{
printf("hehe\n");
}
//代碼4
int num = 1;
if(5 == num)
{
printf("hehe\n");
}
不難看出來,代碼2和代碼4更好,表現的邏輯更加清晰,整體更合理,不容易出錯,
2.2 switch陳述句
if陳述句只有兩個分支可供選擇,而實際問題中出常常需要用到多分支的選擇,C語言提供switch陳述句直接出了多分支選擇,
switch陳述句的作用是根據運算式的值,使流程跳轉到不同的陳述句,switch陳述句語法結構形式如下:
switch(整型運算式)
{
陳述句項;
}
陳述句項:是表示一些case陳述句
case 整形常量運算式:
陳述句;
2.2.1 在switch陳述句中的 break
在switch陳述句中,是不能直接實作分支的,必須要搭配break使用才能實作真正的分支,
在C語言的 switch(開關陳述句)中, break可使程式跳出switch而執行switch以后的陳述句;如果沒有break陳述句,則會從滿足條件的地方(即與switch(運算式))括號中運算式匹配的case)開始執行,直到switch結構結束,
如下要滿足條件:
1. 輸入1-5輸出的是“weekday”;
2. 輸入6-7輸出“weekend”,
#include <stdio.h>
//switch代碼演示
int main()
{
int day = 0;
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
由此可知break實際效果是把陳述句串列劃分為不同的部分,
注意:在最后一個 case 陳述句的后面加上一條 break陳述句,(這樣寫是可以避免出現在以前的最后 一個 case 陳述句后面忘了添加 break陳述句),
2.2.2 default子句
當 switch運算式的值并不匹配所有case標簽的值時,這個default子句后面的陳述句就會執行, 所以,每個switch陳述句中只能出現一條default子句,但是它可以出現在陳述句串列的任何位置,而且陳述句流會像貫穿一個case標簽一樣貫穿default子句,
如果你并不想忽略不匹配所有標簽的運算式的值時該怎么辦呢? 你可以在陳述句串列中增加一條default子句,把下面的標簽 :
default:
break;
不要忘記最后的default分支,即使程式真的不需要default處理,也應該保留陳述句: default : break
舉例switch:
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允許嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
注意:
(1)上面switch一般形式中括號內的“運算式”,其值的型別應為整數型別(包括字符型);
(2)每個case常量必須互不相同;否則就會出現互相矛盾的現象(對switch運算式的同一個值,有兩種或多種執行方案);
(3)case和常量運算式之間要有空格;
(4)case和default出現可以在任何位置,其先后次序不影響執行結果,但習慣上將default放在switch-case結構的底部;
(5)case提供了執行某一陳述句序列的入口,起著標號的作用;多個case可以執行同一陳述句序列;
case 'a':
case 'b':
case 'c':priintf(">60\n");
break;
(6)每個case陳述句的結尾不要忘了加break,否則將導致多個分支重疊,
(7)一般情況下,在執行一個case子句后,應當用break陳述句使流程跳出switch結構,即終止switch陳述句的執行,
3. 回圈陳述句 while,for,do…while()
回圈結構是指在程式中需要反復執行某個功能而設定的一種c結構,它由回圈體中程式的條件,判斷繼續執行某個功能還是退出回圈,根據判斷條件,回圈結構又可細分為以下兩種形式:先判斷后執行的回圈結構和先執行后判斷的回圈結構,
3.1 while回圈
針對同一件事情我們需要完成很多次的情況, C語言中給我們引入了:while陳述句,當滿足條件時進入回圈,進入回圈后,當條件不滿足時,跳出回圈,
while陳述句一般形式如下:
//while 語法結構
while(運算式)
回圈陳述句;
while使用舉例:
#include<stdio.h>
int main()
{
int a= 0;
while(a<10)
{
a++;//自加
if(a>5)//不等while退出回圈,直接判斷回圈
{
break;//跳出回圈
}
}
}
3.1.1 while陳述句中的break和continue
break介紹
break在while回圈中的作用是:在回圈中只要遇到break,就停止后期的所有的回圈,直接終止回圈, 所以while中的break是用于永久終止回圈的,
break使用示例:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i++;
}
return 0;
}
這里代碼最后會輸出的結果是:1 2 3 4,因為當i==5時,遇到break就跳出了回圈并且終止,
continue介紹
continue在while回圈中的作用是: continue是用于終止本次回圈的,也就是本次回圈中continue后邊的代碼不會再執行,而是直接 跳轉到while陳述句的判斷部分,進行下一次回圈的入口判斷,
continue陳述句和break陳述句的區別是:
continue陳述句只結束本次回圈,而不終止整個回圈的執行,而break陳述句則是結束整個回圈程序,不再判斷執行回圈的條件是否成立,
注意:
(1)break可以在if-else中使用直接跳出當前回圈;
(2)在多層回圈中, 一個break陳述句只向外跳一層;
(3)continue陳述句的作用是跳過回圈體中剩余的陳述句并到回圈末尾而強行執行下一次回圈,
3.2 for回圈
初始化陳述句只在回圈開始前執行一次,每次執行回圈體時要先判斷是否符合條件,如果回圈條件為true,則執行回圈體,再執行迭代陳述句,所以對于for回圈,回圈條件總比回圈體多執行一次,
3.2.1 語法
for(運算式1;運算式2;運算式3)
回圈陳述句;
運算式1:設定初始條件,只執行一次,可以為零個、一個或多個變數設定初始值,
運算式2:是條件判斷部分,用于判斷回圈時候終止,
運算式3:作為回圈的調整部分,用于回圈條件的調整,例如使回圈變數增值,它是在執行回圈體后才進行的,
for回圈使用舉例:利用for回圈,在螢屏上列印1-10的數字,如下程式:
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判斷部分*/; i++/*調整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
for回圈和while回圈的比較
(1)執行條件的判斷方式不同
for回圈執行末尾回圈體后將再次進行條件判斷,若條件還成立,則繼續重復上述回圈,當條件不成立時則跳出當下for回圈,
while回圈當滿足條件時進入回圈,進入回圈后,當條件不滿足時,執行完回圈體內全部陳述句后再跳出,而不是立即跳出回圈,
(2)使用的目的不同
for回圈的目的是為了限制回圈體的執行次數,使結果更精確,
while回圈的目的是為了反復執行陳述句或代碼塊,
(3)for回圈與while回圈是可以無條件等價的,一下是兩種等價形式說明,
for(運算式1;運算式2;運算式3)陳述句
運算式1
while運算式2
{
陳述句
運算式3
}
3.2.2 break和continue在for回圈中
break和continue都是用來控制回圈結構的,主要是停止回圈,
- break
有時候我們想在某種條件出現的時候終止回圈而不是等到回圈條件為false才終止,這時我們可以使用break來完成,break用于完全結束一個回圈,跳出回圈體執行回圈后面的陳述句,
- continue
continue和break有點類似,區別在于continue只是終止本次回圈,接著還執行后面的回圈,break則完全終止回圈,可以理解為continue是跳過當次回圈中剩下的陳述句,執行下一次回圈,
示例for中的break與continue使用區別:
#include <stdio.h>
//代碼1:for中的break
//輸出結果為1 2 3 4
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
//代碼2:for中的continue
//輸出結果為1 2 3 4 6 7 8 9 10
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
3.2.3 for陳述句的回圈控制變數
1.不可在for 回圈體內修改回圈變數,防止 for 回圈失去控制,
2. 建議for陳述句的回圈控制變數的取值采用“前閉后開區間”寫法,
示例 如下:中的i值屬于半開半閉區間“0 =< x < 10”,起點到終點的間隔為N,回圈次數為N;
代碼2中的i值屬于閉區間“0 =< x <= 10-1”,起點到終點的間隔為10-1,回圈次數為N,
//代碼1:前閉后開的寫法
int i = 0;:
for(i=0; i<10; i++)
{}
//代碼2:兩邊都是閉區間
for(i=0; i<=9; i++)
{}
3.3 break陳述句和continue陳述句的區別
continue陳述句只是結束本次回圈,而不是終止整個回圈執行,而break陳述句則是結束整個回圈程序,不再判斷執行回圈的條件是否成立,
3.4 do...while()回圈
在控制運算式被第一次計算之前,先執行指定的回圈體陳述句,然后判別運算式,當運算式的值為非零(“真”)時,回傳重新執行回圈體陳述句,如此反復,直到運算式的值等于0(“假”)為止,此時回圈結束,與 while 和 for 回圈不同,do...while 回圈會確保回圈體陳述句至少執行一次,
3.4.1 do陳述句的語法:
do
回圈陳述句;
while(運算式);
其中的“回圈陳述句”就是回圈體,
3.4.2 do陳述句的特點
回圈至少執行一次,使用的場景有限,所以不是經常使用,
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}
while(i<10);
return 0;
}
4.goto陳述句
C語言中提供了可以隨意濫用的 goto陳述句和標記跳轉的標號, 從理論上 來說goto陳述句是沒有必要的,實踐中沒有goto陳述句也可以很容易的寫出代碼, 但是某些場合下goto陳述句還是用得著的,最常見的用法就是終止程式在某些深度嵌套的結構的處理過 程,例如一次跳出兩層或多層回圈, 這種情況使用break是達不到目的的,它只能從最內層回圈退出到上一層的回圈,
5.幾種回圈的比較
(1)3種回圈都可以用來處理同一問題,一般情況下它們是可以相互代替的;
(2)在while回圈和do…while回圈中,只在while后面的括號內指定回圈條件,因此為了使回圈能正常結束,應在回圈體中包含使使回圈趨于結束的陳述句(如i++,或i=i+1等),
for回圈可以在運算式3中包含使回圈趨于結束的操作,甚至可以將回圈體中的操作全部放到運算式3中,因此for陳述句的功能更強,凡用while回圈能完成的,用for回圈都能實作,
(3)用while和do…while回圈時,回圈變數初識化的操作應在while和do…while陳述句之前完成,而for陳述句可以在運算式1中實作回圈變數的初始化,
(4)while回圈、do…while回圈和for回圈都可以用break陳述句跳出回圈,用continue陳述句結束本次回圈,
寫在最后,創作不易,你們的支持是我最大的動力!如有不足之處,希望在評論區指正!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304370.html
標籤:其他
上一篇:WiFi 的認證方法
下一篇:【演算法學習】1689. 十-二進制數的最少數目(java / c / c++ / python / go / rust)
