分支陳述句
if
switch
回圈陳述句
while
for
do while
C語言是結構化的程式設計語言:

1. 什么是陳述句?
C陳述句可分為以下五類:
1. 運算式陳述句
2. 函式呼叫陳述句
3. 控制陳述句
4. 復合陳述句
5. 空陳述句
后面主要介紹的是控制陳述句相關的,
控制陳述句用于控制程式的執行流程,以實作程式的各種結構方式,它們由特定的陳述句定義符組成,C語言有九種控制陳述句,
可分成以下三類:
1. 條件判斷陳述句也叫分支陳述句:if陳述句、switch陳述句;
2. 回圈執行陳述句:do while陳述句、while陳述句、for陳述句;
3. 轉向陳述句:break陳述句、goto陳述句、continue陳述句、return陳述句,
2. 分支陳述句(選擇結構)
2.1 if陳述句
那if陳述句的語法結構是怎么樣的呢?
語法結構:
if(運算式)//運算式為真,則執行陳述句
陳述句;if(運算式)
陳述句1;
else
陳述句2;
//多分支
if(運算式1)
陳述句1;
else if(運算式2)
陳述句2;
else
陳述句3;
舉例:if陳述句(單分支)
#include<stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
return 0;
}

輸入20時,if陳述句中條件為真,則輸出成年

輸入10時,if陳述句中條件為假,而且未寫else,所以什么也沒輸出
案例 進階:(雙分支)
易錯點!else后面不加條件,直接跟陳述句
#include<stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
案例再進階:(多分支)細分版本
注意if陳述句中條件的書寫,不可以和數學中運算式混為一談,例如,不可寫作(18<=age<30)
#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 if(age>=80&&age<100)
printf("老年\n");
else
printf("老壽星\n");
return 0;
}

if陳述句或者 else if陳述句后面 ,默認只能跟一條陳述句,如果后面有多條陳述句,需要加大括號將陳述句括起來,
如果運算式的結果為真,則陳述句執行,
在C語言中如何表示真偽?
0表示假,非0表示真,
如果條件成立,要執行多條陳述句,怎應該使用代碼塊
#include <stdio.h>
int main()
{
if(運算式)
{
陳述句串列1;
}
else
{
陳述句串列2;
}
return 0;
}
這里的一對 { } 就是一個代碼塊,
2.1.1 懸空else
當你寫了這個代碼:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
實際代碼:
第二個if與else是一對,它屬于第一個if的自陳述句
(因為a不等于0,所以它不會執行后面輸出的陳述句,不會列印出hehe或者haha,)
適當的使用{}可以使代碼的邏輯更加清楚,
代碼風格很重要
可以在第一個if陳述句后加一個大括號,如下所示:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
else的匹配:else是和它離的最近的if匹配的,
2.1.2 if書寫形式的對比
//代碼1
if (condition)
{
return x;
}
return y;
若條件為真,則回傳x,條件為假,則回傳y,等價于:
//代碼2
if(condition)
{
return x;
}
else
{
return y;
}
//代碼3
int num = 1;
if(num == 5)
{
printf("hehe\n");
}
易錯點,把if條件陳述句中的==寫成=,導致程式錯誤
所以更好的代碼風格如下:升級版本如下
//代碼4
int num = 1;
if(5 == num)
{
printf("hehe\n");
}
代碼2和代碼4更好,邏輯更加清晰,不容易出錯,
2.2 switch陳述句
switch陳述句也是一種分支陳述句,常常用于多分支的情況,
比如:
輸入1,輸出星期一
輸入2,輸出星期二
輸入3,輸出星期三
輸入4,輸出星期四
輸入5,輸出星期五
輸入6,輸出星期六
輸入7,輸出星期日
那我們寫成if...else if ...else if的形式太復雜,那我們就得有不一樣的語法形式,
這就是switch 陳述句,
switch(整型運算式)
{
陳述句項;
}
而陳述句項是什么呢?
//是一些case陳述句:
//如下:
case 整形常量運算式:
陳述句;
2.2.1
在switch陳述句中的 break 在switch陳述句中,我們沒辦法直接實作分支,搭配break使用才能實作真正的分支,比如:
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);//3
switch (day)
{
case 1:
printf("星期1\n");
case 2:
printf("星期2\n");
case 3:
printf("星期3\n");
case 4:
printf("星期4\n");
case 5:
printf("星期5\n");
case 6:
printf("星期6\n");
case 7:
printf("星期天\n");
}
return 0;
}

輸出結果不是我們想要的,進行改正后得到:
(case:入口;break:出口)
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);//3
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}


注意點!!!
1、switch()括號中為整型運算式
2、case后面緊跟的運算式,為整型常量運算式
有時候我們的需求變了:
1. 輸入1-5,輸出的是“weekday”;
2. 輸入6-7,輸出“weekend”
#include <stdio.h>
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子句
如果表達的值與所有的case標簽的值都不匹配怎么辦?
其實也沒什么,結構就是所有的陳述句都被跳過而已,
程式并不會終止,也不會報錯,因為這種情況在C中并不認為是個錯誤,
但是,如果你并不想忽略不匹配所有標簽的運算式的值時該怎么辦呢?
你可以在陳述句串列中增加一條default子句,把下面的標簽default:寫在任何一個case標簽可以出現的位置,當 switch運算式的值并不匹配所有case標簽的值時,這個default子句后面的陳述句就執行,所以,每個switch陳述句中只能出現一條default子句,但是它可以出現在陳述句串列的任何位置,而且陳述句流會像執行一個case標簽一樣執行default子句,
編程好習慣在每個 switch 陳述句中都放一條default子句是個好習慣,甚至可以在后邊再加一個 break ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/413521.html
標籤:其他
