?我的相關博客:
C語言的分支與循環(1)
? ??
?1.switch語句
除了 if 語句外,C語?還提供了 switch 語句來實現分?結構。 switch 語句是?種特殊形式的 的 if...else 結構,?于判斷條件有多個結果的情況。它把多重 else? ?if 改成更易?、可讀性更好的形式
switch (expression)
{
case value1:statement1;break;
case value2:statement2;break;
default: statement3;break;
}
上面代碼中,value1,value2對應的是expression的值,如果expression的值符合?value1,則進入statement1,執行其中的語句,緊接著遇到break,退出這個switch
如果expression的值符合value2,則進入statement2,執行其中的語句,緊接著遇到break,退出這個switch
而上面的default,指的是value1、和value2以外的所有情況,都會進入statement3,執行其中的語句
注意:
switch 后的 expression 必須是整型表達式
case? ?后的值,必須是整形常量表達式?
2.if語句和switch語句的對比?
?實例::輸?任意?個整數值,計算除2之后的余數
使用if語句時:
int n = 0;
scanf("%d", &n);
if (n % 2 == 0)printf("整除,余數為0\n");
elseprintf("余數是1\n");
而使用switch語句改寫,則:?
int n = 0;
scanf("%d", &n);
switch (n % 2)
{
case 0:printf("整除,余數為0\n");break;
case 1:printf("余數是1\n");break;
}
?需要注意的是:
case和后邊的數字之間必須有空格
每?個 case 語句中的代碼執?完成后,需要加上break ,才能跳出這個switch語句
3.switch中的break
switch中的break非常重要,是正確跳出switch的關鍵
如果沒有break,則執行相應的一條語句后,對之后的每一個case中的語句都會執行?
如下面這個例子:?
printf("輸入1~7的數字,打印星期幾\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:printf("星期一\n");
case 2:printf("星期二\n");
case 3:printf("星期三\n");
case 4:printf("星期四\n");
case 5:printf("星期五\n");
case 6:printf("星期六\n");
case 7:printf("星期天\n");
default:printf("輸入錯誤\n");
}
輸入:2?
輸出 :
??
如果要實現正確的功能,需要給加上 break,正確的代碼為:
printf("輸入1~7的數字,打印星期幾\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:printf("星期一\n");break;
case 2:printf("星期二\n");break;
case 3:printf("星期三\n");break;
case 4:printf("星期四\n");break;
case 5:printf("星期五\n");break;
case 6:printf("星期六\n");break;
case 7:printf("星期天\n");break;
default:printf("輸入錯誤\n");break;
}
?當然,我們也可以依此實現一些功能,如下面這個代碼:
輸入1-5,輸出:工作日
輸入6-7,輸出:休息日?
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
case 2:
case 3:
case 4:
case 5:printf("工作日\n");break;
case 6:
case 7:printf("休息日\n");break;
default:printf("輸入錯誤\n");
}
?4.switch語句中的default
?在switch語句中,default歸納為 除了case之外的所有情況
滿足這個條件就會進入default中,default可以理解為:非目標值,或者無用值
關于default與case,不需要考慮順序,可以case在前,也可以default在前,不影響代碼效果的實現,一般習慣將default放在最后
5.循環?
?C語言提供了3種循環,分別是:for循環、while循環、do-while循環
5.1for循環?
for(語句1;語句2;語句3)?
{
? ? ? ? 語句4;
}
for循環的小括號里面有3條語句 ,部分語句可以為空,但是必須有兩個分號
一次循環語句的執行順序為:
語句1——>語句2——>語句4——>語句3?
如果語句循環多次,執行的順序為:?
?語句1——>語句2——>語句4——>語句3——>語句1——>語句2——>語句4......
(語句1 ,2,4,3...1,2,4,3的循環)
這個執行順序是固定的,根據這個邏輯,可以完成大量的循環運算
?實例:計算1到10相加的和
int sum = 0;
for (int i = 1; i <= 10; i++)
{sum = sum + i;
}
printf("相加的和為%d", sum);
運行結果:
相加的和為55?
上面循環停止的關鍵在于 i <= 10?,所以語句2一般是循環停止的條件
?實例:打印1到10
for (int i = 1; i <= 10; i++)
{printf("%d ", i);
}
?運行結果:
1 2 3 4 5 6 7 8 9 10
5.2while循環?
while 循環的語法結構?和 if 非常相似?
if(表達式)
{
????????語句;
}?
while(表達式)
{
? ? ? ? 語句;
}?
while循環的執行順序為:表達式——>語句——>表達式——>語句——>......?
?先上來就是執?判斷表達式,若表達式的值為0,循環直接結束
表達式的值不為0,則執?循環語句,語句執?完后再繼續判斷,是否進?下?次循環語句
實例:計算1到10相加的和(可與上面的for循環對比)
int sum = 0;
int i = 1;
while (i <= 10)
{sum = sum + i;i++;
}
printf("和為%d\n", sum);
運行結果:
和為55?
?while循環和for循環對比:
while與for循環都有:初始化、判斷,和調整這三個部分,但是for循環?常集中,便于代碼的維護?
5.3do while循環?
do while語句的使用較少,語法是:
do
{
? ? ? ? 語句;
}while(表達式)?
do while循環和while循環非常相似,只是先執行了一次語句,再判斷表達式是否成立
因此,即使表達式不成立,也會先執行一次語句(與C語言的代碼,從上往下執行相對應)
如:?
int n = 0;
do
{printf("執行\n");
} while (n);
運行結果:
執行?
6.break和continue
在循環執?的過程中,如果某些狀況發?的時候,需要提前終?循環,這是?常常?的現象
C語?中提供了 break 和 continue 兩個關鍵字,就是應用到循環來終止的
6.1while循環中的break和continue?
先看一個實例:
1.break
#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)break;printf("%d ", i);i = i + 1;}return 0;
}
運行結果:1 2 3 4?
2.continue?
#include <stdio.h>
int main()
{int i = 1;while (i <= 10){if (i == 5)continue;printf("%d ", i);i = i + 1;}return 0;
}
運行結果:1 2 3 4 (死循環)
上面代碼中的if沒有使用花括號{ },只能控制一條語句,即break,或者continue,而之后的代碼不受if的控制?
通過對比,不難看出, while 中的 break 跳過相應的while整個循環
而 while 中的 continue 只是跳過本次循環,也跳過了i = i + 1這條語句,因此,i一直停留在4,陷入死循環
?6.2for循環中的break和continue
1.break
#include<stdio.h>
int main()
{for (int i = 1; i <= 10; i++){if (i == 5)break;printf("%d ", i);}return 0;
}
?這里break的含義是跳過for循環,因此,運行結果與while中的break相同
運行結果:1 2 3 4?
2.continue?
#include<stdio.h>
int main()
{for (int i = 1; i <= 10; i++){if (i == 5)continue;printf("%d ", i);}return 0;
}
?運行結果:1 2 3 4 6 7 8 9 10
這里的continue和while中的continue相同,跳過本次循環,但是由于i++還是會執行
所以 i 可以繼續自增,往后執行
6.3do while中的break和continue?
do while中的 break 和 continue 與 while 中的幾乎一模一樣