C語言學(xué)習(xí)之三——分支結(jié)構(gòu)程序

  1. 運算符優(yōu)先級:
    如下所示:


    image.png
  1. 關(guān)系運算符和表達式
    關(guān)系運算符定義:在程序中經(jīng)常需要比較兩個量的大小關(guān)系,以決定程序下
    一步的工作。因此使用關(guān)系運算符進行比較(注:比較后的返回值為boolean值,即0或1(真為1, 假為0))
    關(guān)系運算符: 第一類: <; <=; >; >=; 第二類: ==; != (注:關(guān)系運算符都是雙目運算符,其結(jié)合性均為左結(jié)合。且第一類的優(yōu)先級高于第二類的優(yōu)先級。)
    關(guān)系表達式的一般形式: 表達式 關(guān)系運算符 表達式 (關(guān)系表達式允許出現(xiàn)嵌套的情況(例如,a > (b > c)))

//例
/#include<stdio.h>
void main()
{
int a = 1, b = 2, c = 6;
char i = ‘k’;
printf(“%d,%d”, a > b, ‘a(chǎn)’ + 5 < i)
printf(“%d”, a == b == c + 5) //(注:左結(jié)合性)
}
//輸出:0, 1
0

  1. 邏輯運算符:&&(與運算符)、|| (或運算符)、?。ǚ沁\算符)(注:&&和 || 均為雙目運算符,有左結(jié)合性。 !為單目運算符,具有右結(jié)合性)優(yōu)先級為:!最高,&&和 || 相同(相同優(yōu)先級按結(jié)合性判定哪個先執(zhí)行)
    邏輯運算得到的值也是boolean值(用”0”(假);”1”(真)表示)。
    1)與運算 &&:參與運算的兩個量都為真時,結(jié)果才為真,否則為
    假。
    2)或運算||:參與運算的兩個量只要有一個為真,結(jié)果就為真。
    兩個量都為假時,結(jié)果為假。
    3)非運算!:參與運算量為真時,結(jié)果為假;參與運算量為假時,
    結(jié)果為真。
    邏輯表達式: 表達式 邏輯運算符 表達式 (邏輯表達式允許出現(xiàn)嵌套的情況)

  2. if 語句:用if語句可以構(gòu)成分支結(jié)構(gòu)。它根據(jù)給定的條件進行判斷,以決
    定執(zhí)行某個分支程序段。
    if語句有三種形式:
    1)if(表達式) 語句;(如果括號內(nèi)的表達式為真,怎執(zhí)行后面的語句,否則略過,因此括號內(nèi)的表達式的返回值為必須是能夠表示“真”或“假”的性質(zhì),在C語言中,除零以外的所有合法字符都為真)(注2:if后面的表達式必須用括號()括起來)


    image.png

    2)if – else:
    if(表達式)
    語句1;
    else
    語句2;

image.png

3)if – else – if:

image.png

if 語句注意事項:
1)在三種形式的if語句中,在if關(guān)鍵字之后均為表達式。該表達式通常是邏輯表達式或關(guān)系表達式,但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。
//例

/#include<stdio.h>
void main()
{
int a, b;
scanf(“%d%d”, &a, &b);
if( a = b )
{
printf("%d\n", a);
}
}//在b 不等于0的情況下輸出 b的值

/#include<stdio.h>
void main()
{
int a, b;
scanf(“%d%d”, &a, &b);
if( a == b )
{
printf("%d\n", a);
}
}//在a等于b的情況下輸出 a的值

2)在if語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。
3)在if語句的三種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用{}括起來組成一個復(fù)合語句。但要注意的是在}之后不能再加分號。

//例
/#include<stdio.h>
void main()
{
int a, b;
scanf(“%d%d”, &a, &b);
if(a>b)
{
a++;
b++;
}
else
{
a=0;
b=10;
}
}

if 語句的嵌套:當(dāng)if語句中的執(zhí)行語句又是if語句時,則構(gòu)成了if 語句嵌套的情形。


image.png

以上兩種形式等價。

在嵌套內(nèi)的if語句可能又是if-else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。(else總是和它前面最近的if相配對,為了消除歧義,在書寫時就應(yīng)注意對齊。)


image.png
  1. 條件運算符和條件表達式
    條件運算符:條件運算符為“?和:”,它是一個三目運算符,即有三個參與運算的量。
    條件表達式的一般形式:表達式1?表達式2:表達式3 (求值規(guī)則:如果表達式1的值為真,則表達式2的值為整個條件表達式的值,否則表達式3的值為整個條件表達式的值)
    //例: if(a>b) max=a; else max=b; 等價于 max=(a>b)?a:b;(語義是:如a>b為真,則把a賦給max,否則把b 賦給max。)
    使用條件表達式的注意事項:
    1)條件運算符的運算優(yōu)先級低于關(guān)系運算符和算術(shù)運算符,但高于賦值運算符。
    因此,max=(a>b)?a:b,可以去掉括號而寫為:max=a>b?a:b
    2) 條件運算符”?”和”:”是一對運算符,不能分開單獨使用。
    3)條件運算符的結(jié)合方向是自右至左。
    例如:a>b?a:c>d?c:d,應(yīng)理解為:a>b?a:(c>d?c:d) (該方式是條件表達式的嵌套形式。)

//例,
/#include<stdio.h>
void main()
{
int a, b, c, d, max;
printf("Input four numbers: \n");
scanf("%d, %d, %d, %d", &a, &b, &c, &d);
max = (a > b) ? a : ((c > d) ? c: d);
printf("The maximum number is: %d\n",max);
}
//輸入:15 , 16, 2, 3
//輸出:The maximum number is: 3
//輸入:16, 15, 2, 3
//輸出:The maximum number is: 16

  1. switch語句
    其語義是:計算表達式的值。并逐個與其后的常量表達式值相比較, 當(dāng)表達式的值與某個常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句。
    (注:當(dāng)表達式中的值與常量表達式的值相等時,才執(zhí)行其后的語句,否則跳過該case后的語句,進行下一條語句,注意case后面的只能是常量表達式不能使邏輯表達式,關(guān)系表達式等等。)(為了節(jié)省CPU運行時間,還可在語句后加上“break;”來跳出switch語句。)


    image.png

    使用switch語句的注意事項:
    1)在case后的各常量表達式的值不能相同,否則會出現(xiàn)錯誤。
    2)在case后,允許有多個語句,可以不用{}括起來。
    3)各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。
    4)default子句可以省略不用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容