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