C語言中分支結構及迴圈結構的簡單介紹
C語言程式中的結構可分為以下三種:
1.順序結構:程式從上往下依次執行就叫順序結構
2.分支結構:程式有選擇的執行某段程式碼或者不執行某段程式碼
3.迴圈結構:程式重複的執行某段程式碼
順序結構是最簡單也是最基本的程式結構,它是由若干段程式碼組成,並按照從上到下的順序依次執行的,而我今天主要簡單介紹一下分支結構及迴圈結構。
一、分支結構
分支結構有兩大類語句:一種是if語句,一種是switch語句
1、分支結構之 if 篇
a. if 語句的第一種形式
語法定義: if(表示式){
語句塊;
}
語義:如果表示式的結果為真,則執行語句塊,否則不執行語句塊。
b. if 語句的第二種形式
語法定義: if(表示式){
語句塊1;
}else{
語句塊2;
}
語義:如果表示式的結果為真,則執行語句塊1,否則執行語句塊2。語句1或者語句塊2,至少會有一個被執行。
c. if 語句的第三種形式
if 語句的巢狀,簡單來說就是if語句裡再巢狀if語句,並沒有嚴格意義上的語法定義,遵守上面兩種形式就ok。
d. if 語句的第四種形式
語法定義: if(表示式1){
語句塊1;
}else if(表示式2){
語句塊2;
... ...
}else if(表示式n){
語句塊n;
}else{
語句塊n+1;
}
語義:先判斷表示式1,如果成立則執行語句塊1,後面的都不執行了,否則繼續判斷表示式2,如果成立,則執行語句塊2,後面的都不執行了,如果不成立則繼續判斷語句塊n,如果成立則執行語句塊n,否則繼續往下判斷,直到else上面的條件都不滿足,就執行語句塊n+1。我們的這種語法格式是一個整體,上面判斷過的內容如果不成立,那麼下面判斷時就已經做了過濾。 以下以if的第四種形式為例,進行一段程式設計:輸入一個屬於0-100的成績,按100-90,89-80,79-70,69-60,59-0,分別分成A、B、C、D、E等。
#include <stdio.h>
int main(int argc, const char * argv[]) {
printf("請輸入您的成績\n");
int score;
scanf("%d",&score);
if(score<=100 && score>=90){
printf("您的成績為A等\n");
}else if(score>=80){
printf("您的成績為B等\n");
}else if (score>=70){
printf("您的成績為C等\n");
}else if (score>=60){
printf("您的成績為D等\n");
}else{
printf("您的成績為E等\n");
}
printf("程式結束\n");
return 0;
}
if語句小tips:
1.if語句後面千萬不要加分號,如果你非要手賤加一個分號,那麼就加在大括號後面
2.if語句的大括號,其實是可以省略的!當你省略大括號的時候,那麼if語句只能管到離它最近的一句語句,但是這句語句不能是宣告變數的語句
3.if語句裡面可以寫任意條語句(必須要有大括號)
4.非0的數就是真,0就是假,避免讓你的表示式是永真或永假
5.if語句裡面定義的變數只能在它語句塊裡面訪問
6.if語句小括號裡面的表示式可以寫任意表達式
2、分支結構之 switch篇
語法定義: switch(表示式){
case 常量表達式1:
語句塊1
break;
case 常量表達式2:
語句塊2
break;
case 常量表達式3:
語句塊3
break;
……
default:
語句塊n
break;
}
語義:先得出表示式的結果,根據結果跳轉到相應的case語句塊裡面去執行
表示式結果 == 常量表達式 就叫相應的case語句塊
如果case 後面的常量表達式沒有一個跟表示式結果對應的,那麼就跳轉到 default裡面執行語句塊n。
switch語句的穿透問題:當case塊裡面不加break的時候,會發生穿透
穿透意思:就是從這個case塊裡面執行完語句後,會繼續跳到下一個case塊裡面繼續執行。所以,我們必須加break,防止穿透。break可以跳出當前的switch語句
例項: 要求使用者輸入一個月份,判斷這個月份屬於哪個季節
12月1月 2月:冬季
3月4月5月:春季
6月7月8月:夏季
9月10月11月:秋季
#include <stdio.h>
int main(int argc, const char * argv[]) {
printf("請輸入月份\n");
int month;
scanf("%d",&month);
switch (month) {
case 1:
case 2:
case 12:
printf("冬季\n");
break;
case 3:
case 4:
case 5:
printf("春季\n");
break;
case 6:
case 7:
case 8:
printf("夏季\n");
break;
case 9:
case 10:
case 11:
printf("秋季\n");
break;
default:
printf("輸入錯誤\n");
break;
}
switch語句小tips:
1.switch語句後面的小括號只能寫整數型別的表示式,否則會報錯
2.case後面只能接常量表達式且不能有重複的值
3.switch小括號後面不要加分號,手賤要加分號加在大括號後面
4.case後面不能立即宣告變數,除非在宣告前面加一條或者N條語句,非要在 case後面立即宣告變數,那麼就在case塊裡面加一個大括號
5.如果不加大括號宣告的變數,其他case塊也可以訪問
6.default可以寫在任意位置,不影響結果
注: 任何可以用if語句實現的功能,絕對也可以用switch語句來實現,同樣用switch語句可以做得東西,if也完全可以。
如果要判斷範圍的話用if比較方便,用switch比較麻煩,不能直接用;
如果是判斷具體的某個值,並且值不是很多的時候用switch方便和簡潔。
二、迴圈結構
迴圈結構主要語句:while迴圈、do-while迴圈、for迴圈
1、迴圈結構之 while 篇
a. while 語句
語法定義:while(表示式){
迴圈體;
}
語義:1.先判斷表示式是否成立,如果成立,則跳轉第2點內容,否則跳轉第3點內容
2.執行迴圈體,執行完畢跳轉到第1點內容
3.跳出迴圈,迴圈結束
如遍歷1-10的數字,程式碼如下:
#include <stdio.h>
int main(int argc, const char * argv[]) {
//迴圈變數,用來控制迴圈的次數的
int i = 0;
while (i < 10) {//i<後面的數字就能控制迴圈的次數,並且後面的數字是迴圈額次數
printf("%d ",i+1);
i++; //控制迴圈結束的語句
}
return 0;
}
while迴圈語句小tips:
1.防止死迴圈。避免條件永真或永假。如果永真就是死迴圈,如果永假就不迴圈,寫起來毫無意義
2.while迴圈後面千萬不要加分號,手賤要加分號,就加在大括號後面
3.記得結束迴圈的語句不要忘了寫,如以上的 i++;
4.迴圈跟if語句一樣的地方就是:大括號可以省略。只能控制離它最近的一條語句,並且這條語句不能是宣告變數的語句
2、迴圈結構之do- while 篇
do-while的語法:do{
迴圈體;
}while(表示式);
注意:while的小括號後面一定要加分號
語義: 1.執行迴圈體,跳轉到第2點
2.判斷表示式的結果是否為真,如果為真,跳轉到第1點,否則跳轉到第3點
3.跳出迴圈,迴圈結束。
跟while迴圈的最大的區別就是:do-while是先執行迴圈體,再判斷,while是先判斷再執行
while裡面的迴圈體很可能1次都不會被執行,do-while裡面的迴圈體至少被執行1次。
例項就不演示出來了,do-while 一般在迴圈體至少需要被執行一次的時候使用。
3、迴圈結構之for 篇
在上面介紹while迴圈的時候,提過一定要寫結束迴圈的語句(i++;),否則就會發生死迴圈。那麼for迴圈可以起到讓我們無論如何都不會忘卻寫i++;
首先語法是: for(表示式1;表示式2;表示式3){
迴圈體;
}
語義:1.先執行表示式1,跳轉到第2點
2.判斷表示式2的結果是否為真,如果為真,跳轉到第3點,否則跳轉到第5點
3.執行迴圈體,執行完畢,跳轉到第4點
4.執行表示式3,執行完畢跳轉到第2點
5.跳出迴圈,迴圈結束
如遍歷1-10的數字,程式碼如下:
#include <stdio.h>
int main(int argc, const char * argv[]) {
for (int i=1; i<=10; i++) {
printf("%d ",i);
}
return 0;
}
for迴圈的其他格式:
表示式1,表示式2,表示式3都可以省略
注意:表示式2沒寫的話代表是死迴圈
就算你不寫表示式1,表示式2,或者表示式3,但是那兩個分號無論如何都不省略
表示式1,表示式3,可以寫任意條語句,用 ,(逗號)隔開
意思即為:一個for迴圈裡面還嵌套了一個for迴圈
含義:外層迴圈控制行數,內層迴圈控制列數!
例項:列印等腰三角形,
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
程式碼如下:#include <stdio.h>
int main(int argc, const char * argv[]) {
for (int i=1; i<=5; i++) { //控制行數
for (int j=1; j<=5-i; j++) { //控制每行等腰三角形前面的空格數量,空格數量=總行數-當前行數.如第一行只有一個*,前面有4個空格,所以空格數=5-1=4
printf(" "); //列印每行的空格
}
for (int j=1; j<=i*2-1; j++) { //控制每行等腰三角形的*數量,*=行數*2-1.如第一行*=1*2-1=1
printf("* "); //列印每行的星星
}
printf("\n"); //列印每行的換行
}
return 0;
}
總而言之,不管圖形如何複雜,外層迴圈控制行數都是可以確定的。
以上這些,分支結構及迴圈結構就介紹完畢。