《第4章選擇結(jié)構(gòu)》由會(huì)員分享,可在線閱讀,更多相關(guān)《第4章選擇結(jié)構(gòu)(45頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第第4章章 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 圖圖 1.4選擇結(jié)構(gòu)選擇結(jié)構(gòu)真真假假考慮兩個(gè)問(wèn)題:考慮兩個(gè)問(wèn)題:l在在C語(yǔ)言中如何表示判斷條件?語(yǔ)言中如何表示判斷條件? 答案:答案:用任意合法的表達(dá)式,一般用關(guān)系表用任意合法的表達(dá)式,一般用關(guān)系表達(dá)式和邏輯表達(dá)式。達(dá)式和邏輯表達(dá)式。l怎么實(shí)現(xiàn)分支結(jié)構(gòu)?怎么實(shí)現(xiàn)分支結(jié)構(gòu)? 答案答案:用用if語(yǔ)句和語(yǔ)句和switch語(yǔ)句。語(yǔ)句。圖圖 1.4選擇結(jié)構(gòu)選擇結(jié)構(gòu)真真假假AB第第4章章 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 4.1 關(guān)系運(yùn)算關(guān)系運(yùn)算 4.2 邏輯運(yùn)算邏輯運(yùn)算 4.3 if語(yǔ)句語(yǔ)句 4.4 switch語(yǔ)句語(yǔ)句 本章小結(jié)本章小結(jié) 鞏固練習(xí)鞏固練習(xí) 圖圖 1.4選擇結(jié)構(gòu)選擇結(jié)構(gòu)真真
2、假假ABn例如,例如,x04.1 關(guān)系運(yùn)算關(guān)系運(yùn)算 圖圖 1.4選擇結(jié)構(gòu)選擇結(jié)構(gòu)X0真真假假AB運(yùn)算符運(yùn)算符名稱名稱示例示例優(yōu)先級(jí)優(yōu)先級(jí)結(jié)合性結(jié)合性 小于小于x0 x0相同(高)相同(高)左結(jié)合型左結(jié)合型=小于等于小于等于x=0 x 大于大于x0 x0=大于等于大于等于x=0 x=0= = =等于等于x=0 x=0相同(低)相同(低)!=!=不等于不等于x!=0 x!=0例如:例如:ca+b a=bc關(guān)系運(yùn)算符的優(yōu)先級(jí)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于低于算術(shù)運(yùn)算符,算術(shù)運(yùn)算符,高于高于賦值運(yùn)算符。賦值運(yùn)算符。 c(a+b)a=(bc)值為值為邏輯值邏輯值【例例41】關(guān)系運(yùn)算符示例。關(guān)系運(yùn)算符示例。 /
3、/* * 關(guān)系運(yùn)算符示例關(guān)系運(yùn)算符示例 * */ /#include #include “stdio.hstdio.h”main()main() char c=b; char c=b; int i=1,j=2,k=3; int i=1,j=2,k=3; printf(%d,a+1c); printf(%d,a+1c); printf(%d,1j5); printf(%d,1j5); printf(%dn,k=j=i+5); printf(%dn,k=j=i+5); 應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷。應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷。注意從寫法和含義上區(qū)分賦值運(yùn)算符注意從寫法和含義上區(qū)分賦值運(yùn)算符“
4、= =”與相等關(guān)系運(yùn)算符與相等關(guān)系運(yùn)算符“=”。對(duì)于形如對(duì)于形如“10=x=2010=x=10 & x=10 & x=20 注注 意意 雙目雙目:邏輯與:邏輯與 (&) ; 邏輯或邏輯或 (|) 單目單目:邏輯非:邏輯非 (!)n優(yōu)先級(jí)優(yōu)先級(jí)(由高到低由高到低): !,算術(shù),關(guān)系!,算術(shù),關(guān)系,&,|,賦值賦值n結(jié)合性結(jié)合性:從左到右:從左到右n邏輯運(yùn)算真值表邏輯運(yùn)算真值表4.2.1 邏輯運(yùn)算符邏輯運(yùn)算符a ab ba&ba&ba|ba|b!a a!b!b真真真真真真真真假假假假真真假假假假真真假假真真假假真真假假真真真真假假假假假假假假假假真真真真4.2.2 邏輯運(yùn)算的值邏輯運(yùn)算的值 aba
5、&ba|b!a!b非非0非非01100非非0001010非非001100000114.2.3 邏輯表達(dá)式邏輯表達(dá)式 【例例42】邏輯運(yùn)算示例邏輯運(yùn)算示例/* 邏輯運(yùn)算示例邏輯運(yùn)算示例 */#include “stdio.h”main() char c=b; int i=1,j=2,k=3; printf(%d,!i*!j); printf(%d,ij&ab)&(n=cd)的值和的值和m,n的值分別是什么?的值分別是什么? a|b 的情形類似的情形類似練習(xí)練習(xí):判斷某一年是否閏年。(閏年的條件是符合下:判斷某一年是否閏年。(閏年的條件是符合下面兩個(gè)條件之一):面兩個(gè)條件之一):(1 1)能被)能
6、被4 4整除,但不能被整除,但不能被100100整除;整除;(2 2)能被)能被400400整除。整除。( ) ( )( ) ( )說(shuō)說(shuō) 明:明:4.3.1 if4.3.1 if語(yǔ)句的三種形式語(yǔ)句的三種形式 1 基本基本if語(yǔ)句語(yǔ)句(單分支結(jié)構(gòu))(單分支結(jié)構(gòu))格式格式: if(if(表達(dá)式表達(dá)式) ) 語(yǔ)句語(yǔ)句 0表達(dá)式表達(dá)式語(yǔ)句語(yǔ)句非非0圖圖4.1 基本基本if語(yǔ)句的語(yǔ)義語(yǔ)句的語(yǔ)義if (x0) printf(%fn,sqrt(x); 【例例4.3】輸入兩個(gè)整數(shù),輸出其中的大數(shù)。輸入兩個(gè)整數(shù),輸出其中的大數(shù)。 0maxb輸出輸出maxmax=b非非0圖圖4.2 例例4.3N-S圖圖輸入兩個(gè)整
7、數(shù)給輸入兩個(gè)整數(shù)給a和和bmax=a思考:思考: 如何求如何求3個(gè)整數(shù)中的個(gè)整數(shù)中的最大數(shù)或最小數(shù)?最大數(shù)或最小數(shù)?#include “stdio.h”main() int a,b,max;printf(n input two numbers: );scanf(%d,%d,&a,&b);max=a;if (maxb) printf(max=%dn,a); else printf(max=%dn,b);兩路分支兩路分支【例例4.3】輸入兩個(gè)整數(shù),輸入兩個(gè)整數(shù),輸出其中的大數(shù)。輸出其中的大數(shù)。 3. if-else if-else語(yǔ)句語(yǔ)句格式:格式: if(if(表達(dá)式表達(dá)式1) 1) 語(yǔ)句語(yǔ)句1
8、 1; else if(else if(表達(dá)式表達(dá)式2) 2) 語(yǔ)句語(yǔ)句2 2; else if(else if(表達(dá)式表達(dá)式3) 3) 語(yǔ)句語(yǔ)句3 3; else if( else if(表達(dá)式表達(dá)式n-1) n-1) 語(yǔ)句語(yǔ)句n-1n-1; else else 語(yǔ)句語(yǔ)句n n; 0表達(dá)式表達(dá)式1語(yǔ)句語(yǔ)句1語(yǔ)句語(yǔ)句2非非0圖圖4.4 if-else if-else語(yǔ)句的語(yǔ)義語(yǔ)句的語(yǔ)義表達(dá)式表達(dá)式2非非00表達(dá)式表達(dá)式3非非00語(yǔ)句語(yǔ)句30表達(dá)式表達(dá)式n-1語(yǔ)句語(yǔ)句n-1語(yǔ)句語(yǔ)句n非非0多分支多分支【例例4.6】已知學(xué)生的百分制成績(jī),編寫程序按百分已知學(xué)生的百分制成績(jī),編寫程序按百分制分?jǐn)?shù)進(jìn)行
9、分段評(píng)定,給出相應(yīng)的等級(jí)。制分?jǐn)?shù)進(jìn)行分段評(píng)定,給出相應(yīng)的等級(jí)。 分?jǐn)?shù)大于等于分?jǐn)?shù)大于等于90,則評(píng)定為,則評(píng)定為”A”; 分?jǐn)?shù)在分?jǐn)?shù)在8089之間,則評(píng)定為之間,則評(píng)定為”B”; 分?jǐn)?shù)在分?jǐn)?shù)在7079之間,則評(píng)定為之間,則評(píng)定為”C”; 分?jǐn)?shù)在分?jǐn)?shù)在6069之間,則評(píng)定為之間,則評(píng)定為”D”; 分?jǐn)?shù)小于分?jǐn)?shù)小于60,則評(píng)定為,則評(píng)定為”E”;#include “stdio.h”main( ) float score; char grade;printf(Please input the students score:);scanf(%f,&score);if (score=90) grade=
10、A;else if (score=80) grade=B; else if (score=70) grade=C; else if (score=60) grade=D; else grade=E;printf(%d,%cn,score,grade);例如:例如: if (a=b) printf(%d,a); else printf(a=0); 4.3.2 if4.3.2 if語(yǔ)句的嵌套語(yǔ)句的嵌套 嵌套結(jié)構(gòu)的一般形式可表示如下:嵌套結(jié)構(gòu)的一般形式可表示如下: if(表達(dá)式表達(dá)式1) if( 表達(dá)式表達(dá)式2 ) 語(yǔ)句語(yǔ)句1 else 語(yǔ)句語(yǔ)句2 else if(表達(dá)式表達(dá)式3)語(yǔ)句語(yǔ)句 else
11、 語(yǔ)句語(yǔ)句4注意:注意:ifif與與e1see1se的配對(duì)關(guān)的配對(duì)關(guān)系。從最內(nèi)層開(kāi)始,系。從最內(nèi)層開(kāi)始,e1see1se總是與它上面總是與它上面最近的(未曾配對(duì)最近的(未曾配對(duì)的)的)if if 配對(duì)。配對(duì)。#include “stdio.h”main( ) float x,y; scanf(f,&x); if(x!=0) if(x0) y=1; /*嵌套的嵌套的if-else語(yǔ)句語(yǔ)句 else y=-1; else y=0; printf(f, f,x,y);010001xxxy思考:思考:使用使用if-else if-if-else if-elseelse語(yǔ)句改寫該語(yǔ)句改寫該程序。程序。
12、4.3.3 4.3.3 條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符和條件表達(dá)式 條件運(yùn)算符:條件運(yùn)算符:三目運(yùn)算符三目運(yùn)算符( (? :) )結(jié)合性:從右到左結(jié)合性:從右到左優(yōu)先級(jí):優(yōu)先級(jí):高于賦值運(yùn)算符高于賦值運(yùn)算符,低于邏輯、算術(shù)和關(guān)系運(yùn)算符。,低于邏輯、算術(shù)和關(guān)系運(yùn)算符。 條件表達(dá)式格式:條件表達(dá)式格式: 表達(dá)式表達(dá)式1 1? 表達(dá)式表達(dá)式2 2 :表達(dá)式:表達(dá)式3 3 求值規(guī)則:求值規(guī)則: 先求表達(dá)式先求表達(dá)式1 1的值,非的值,非0 0時(shí),條件表達(dá)式的值為表達(dá)時(shí),條件表達(dá)式的值為表達(dá)式式2 2的值,否則為表達(dá)式的值,否則為表達(dá)式3 3的值的值 如:如:xy ? 1xy ? 1:1.5 1.5
13、例:求兩數(shù)中較大者例:求兩數(shù)中較大者#include “stdio.h”main() int a,b,max;printf(n input two numbers: );scanf(%d,%d,&a,&b);max=a;if (maxb) printf(max=%dn,a); else printf(max=%dn,b);max=ab ? a:b說(shuō)明說(shuō)明: 1.1.表達(dá)式可是表達(dá)式可是整型、字符型整型、字符型表達(dá)式表達(dá)式。 2.case2.case和常量表達(dá)式間一定和常量表達(dá)式間一定要要有空格,有空格,casecase后的語(yǔ)句可以后的語(yǔ)句可以沒(méi)有,也可以有多個(gè)沒(méi)有,也可以有多個(gè)( (可以不用可
14、以不用“ ”括起來(lái)括起來(lái) ) )。 3.3.每個(gè)每個(gè)casecase的常量表達(dá)式的的常量表達(dá)式的值必須互不相同。值必須互不相同。 4.default4.default子句的位置隨意。子句的位置隨意。功能功能: : 先計(jì)算表達(dá)式的值先計(jì)算表達(dá)式的值, ,若該值與若該值與casecase后某一常量表達(dá)式的值相等后某一常量表達(dá)式的值相等,則執(zhí)行此,則執(zhí)行此casecase后的后的所有語(yǔ)句所有語(yǔ)句,直至直至switchswitch語(yǔ)句體結(jié)束。語(yǔ)句體結(jié)束。 若不等,則執(zhí)行若不等,則執(zhí)行defaultdefault后的語(yǔ)后的語(yǔ)句。句。switch ( cj/10) case 9: printf (A n)
15、; case 8 : printf (B n); case 7 : printf (Cn); case 6 : printf (Dn); default : printf(En);若若cj=85,則將輸出:則將輸出:BCDE如如: switch ( cj/10) case 10: case 9: printf (“A n”); break; case 8 : printf (“B n”); break ; case 7 : printf (“Cn”); break; case 6 : printf (“Dn”); break; default : printf(“En”); 關(guān)于關(guān)于break
16、語(yǔ)句語(yǔ)句1.break1.break語(yǔ)句又稱語(yǔ)句又稱間斷語(yǔ)句。間斷語(yǔ)句。2.2.可以用在可以用在casecase語(yǔ)句之后,語(yǔ)句之后,跳出跳出switchswitch語(yǔ)句體。語(yǔ)句體。若若cj=85,則將輸出:則將輸出:B【例例4.8】編寫程序,輸入編寫程序,輸入110之間的任之間的任意一個(gè)數(shù)字,輸出相應(yīng)的英文單詞。意一個(gè)數(shù)字,輸出相應(yīng)的英文單詞。 #include stdio.hmain()int a; printf(input integer number: ); scanf(%d,&a); switch (a) case 1: printf(Onen); break; case 2: pri
17、ntf(Twon); break; case 3: printf(Threen); break; case 4: printf(Fourn); break; case 5: printf(Friven); break; default: printf(errorn); 【例例4.11】若若x為實(shí)型量,為實(shí)型量,計(jì)算分段函數(shù):計(jì)算分段函數(shù): 5 . 45 . 3235 . 35 . 22*35 . 25 . 1235 . 15 . 023xxxxxxxxy#include stdio.hmain( )float x,y;scanf(%f,&x);if(x=4.5) printf(x errorn
18、);else if(x1.5) y=3+2*x; else if(x2.5) y=3-2*x; else if(x3.5) y=3*2*x; else y=3/(2*x); printf(y=%f,y);#include stdio.hmain( ) float x,y;scanf(%f,x);switch(int)(x+0.5)case 1: y=3+2*x;break; case 2: y=3-2*x;break; case 3: y=3*2*x;break; case 4: y=3/(2*x);break; default: printf(“x errorn”);printf(y%f,y);