c語言程序設計第四章.ppt_第1頁
c語言程序設計第四章.ppt_第2頁
c語言程序設計第四章.ppt_第3頁
c語言程序設計第四章.ppt_第4頁
c語言程序設計第四章.ppt_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章 選擇結構,4.1 關系運算和邏輯運算,選擇結構是程序基本控制結構之一。 C語言中的選擇結構包括三種條件語句: if 語句 switch語句 條件表達式語句 4.1.1 C語言中的邏輯值 判斷邏輯值:非0值為真,0值為假。 表達邏輯值:“1”為真,“0”為假。,.1.2 關系運算符和關系表達式 . 六個關系運算符,算術運算 關系運算 賦值運算,2關系表達式 關系表達式的值只有兩個:為真時值為1,為假值為0。 例:,4.1.3 邏輯運算符和邏輯表達式,三種: & (與), (或) ! (非),其意義見真值表,4.1.3.1 C語言中的邏 輯運算符,a&b 當a, b均為1時,才為1,a b 當a, b中有一個為1時,才為1,!a 當a為1, !a為0,反之為1.,由此看到: 和&為雙目運算符. !為單目運算符。,邏輯運算符運算規(guī)則: 對象值為0,結果為1。,優(yōu)先級定義:,2. &和低于關系運算符。!高于算術運算符,1. !(非)優(yōu)先于&(與).&優(yōu)先于,即: !& ,例: !a&b xy & c (!a)&b) (xy)&c),1. 邏輯表達式的值與關系表達式值一樣,真為1,假為0。,例: a=4 則 !a 值為0.此處只要a 0,為真.則!a值為0., a=4, b=5 a&b為1,前面已定義了邏輯表達式,以下看一看邏輯表達式的值及具體的運算。, 4&0 2 為1.,總之,在邏輯運算中,非0值參加邏輯運算時被看成1處理., a=4, b=5 a b為1, a=4, b=5 !a b為1,系統(tǒng)優(yōu)化: exp1|exp2 中,若exp1為1,不再計算exp2,直接得1。 exp1&exp2中,若exp1為0,不再計算exp2,直接得0。,2. 一個邏輯表達式中的邏輯運算符并不是一定全部執(zhí)行.,如: a&b&c. 則當a=0(假)時, b,c不需判斷。當a=1,b=0,則不需判c.,又如: a b c. 當a=1時,b, c均不必判別。,邏輯表達式舉例,11.2.1 if語句 if語句的兩種形式: 形式一: if(表達式e) 語句S1,功能: 當表達式值非0時, 執(zhí)行語句A,否則不執(zhí)行語句A.,例如: if (xy) printf(“ %d“, x),形式1 if(表達式)語句A,其流程圖:,形式2 if(表達式e)語句A else 語句B,功能: 表達式為非0,執(zhí)行語句A ;表達式為0,執(zhí)行語句B,例: if(xy) printf(“%d“, x); else printf(“ %d“, y);,注 1. 表達式e:可以是關系表達式, 邏輯表達式, 或任何類型表達式。其作用是控制整個語句的執(zhí)行路線。 語句S1和語句S2可以是任何類型的單個語句(包括空語句和復合語句)。單個語句必須加“;”復合語句外面不用加“;”。 例如,以下語句是允許的:,if (x=0) y=x; s=x+y; else y=-x; s=0;,復合語句,復合語句,3. 整個if 語句,在語法上是一個語句。,一個語句,例4.1 分別用雙目if語句和單目if語句求兩個變量的最小值。 解1: 用雙目if語句,程序如下: #include void main ( ) int x , y , min ; printf(“n Input x y:“); scanf (“ %d%d “, ,如從鍵盤上輸入: 34 89 則輸出結果: min(34,89)=34,解2:用單目if語句,程序如下: #include void main ( ) int x, y, min ; printf(“n Input x y:“); scanf (“ %d%d “, ,解3: 進行變量交換 #include void main ( ) int x, y, t ; printf(“n Input x y:“); scanf (“ %d%d “, ,例4.2. 從鍵盤上輸入一字符,判斷它是否是英文字母,若是輸出Y, 否則輸出 N。 解. #include #include void main ( ) char c; printf(“n Input a char:“); c=getch(); putchar(n); if(A=c ,括號內不能寫成: A=c=Z|a=c=z,例4.3 輸入三個數(shù),按大小順序輸出。,main ( ) float a, b, c,t; scanf(“%f,%f,%f“, ,if (bc) t=b; b=c; c=t; printf(“%5.2f, %5.2f, %5.2f“, a, b, c); ,運行情況如下:,3,7,1 1.00, 3.00, 7.00,if語句的S1和S2可以是任何類型的語句。特別地,也可以是if語句(單目的或雙目的)。當語句S1和(或)語句S2又是if語句時,就構成了if語句的嵌套。,注. 嵌套式if語句中,每個else通常是同它前邊最近的那個if相匹配。 程序書寫時注意層次關系,養(yǎng)成良好的習慣。,if (e1) if(e2) else else ,兩層if 語句的嵌套,4.2.2. if語句的嵌套,例4.4 有一函數(shù),y=,1 (x0),編一程序,輸入一個x值,輸出y值。,有以下幾種寫法,請判斷哪些是正確的?,程序1: main ( ) int x, y; scanf(“d“, ,if (x0) y= 1; else if (x= =0) y=0; else y=1; printf (“x=%d, y=%dn“, x, y); ,程序2:將上面程序的if語句改為: if (x=0) if (x0) y=1; else y=0; else y= 1;,程序3: 將上述if語句改為: y= 0; if (x! =0) if (x0) y=1; else y=-1;,程序4: y=0; if (x=0) if (x0) y=1; else y= 1;,例4.5 對于已知的int型變量x值,計算并輸出函數(shù)f(x)值。f(x)定義為:,程序如下: main ( ) float x, f ; printf(“nInput float x: x=0 ,例4.6: 對已知int型的百分制成績score,按以下算法計算并輸出其相應的等級: score90 等級為A 90score80 等級為B 80score60 等級為C score60 等級為D,程序如下: #include void main ( ) int score; printf(“n input score:”); scanf (“%d“, ,if (score=90) printf (“n A“) ; else,if (score=80) printf (“n B“) ; else,if (score=60) printf (“n C“) ; else printf (“n D“) ;,條件表達式語句等價于以下的if語句: if (e1) e2 ; else e3 ;,4.3條件表達式構成的選擇結構,C語言提供了一個簡單的條件賦值語句或條件表達式。,條件運算符為? : 三目運算符。,功能: 先判表達式1, 若非0,則值為表達式2的值,否則為表達式3的值。,一般形式,表達式1?表達式2: 表達式3,max=ab? a:b; 當ab. max a. 否則maxb,例4.7 判斷一個int型變量的值是否奇數(shù),是則輸出 Odd ,否則輸出 Even 。程序如下: main ( ) int n ; printf(“nInput int n:n“); scanf (“%d“, 程序最后一個語句中 printf的參數(shù)是條件表達式,其中n%2= =1為表達式e1 , “nOdd“為表達式e2,“nEven“為表達式e3。即,printf的參數(shù)為“nOdd“或“nEven“。,注: 1. 條件運算符優(yōu)先于賦值運算符. 例: max=(ab? a:b)可去掉( ),2. 條件運算符低于關系運算符和算術運算符。 例: max=ab? a:b+1 max= ab? a:(b+1)并不是 max=(ab? a:b)+1,3. 條件運算符結合性為從右至左. 如: ab? a:cd ? c:d 相當于 ab? a:(cd? c:d),4. 條件表達式不能取代一般的if語句,只有當if 的兩 個分支為給同一變量賦值時才可替代if.,if (ab) printf(“%d“, a); else printf (“%d“, b),由于printf.不是表達式,故不可用條件表達式,但可為: printf(“%d“, ab? a:b);,5. 表達式1、表達式2、表達式3可類型不同。,main ( ) char ch; scanf (“%c“, ch=(ch=A & ch=Z? (ch+32):ch) printf(“%c“, ch) ,例4.8 輸入一個字符,判別它是否大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。,運行結果如下: A a,4.4 switch語句 具有多目分支的switch語句又稱為開關語句,其一般形式為: switch (表達式e) case 常量表達式1 : 語句段1 break ; case 常量表達式n : 語句段n break ; default: 語句段n+1 ,例4.9: 根據(jù)成績等級打印百分數(shù)段.,switch (grade), case A: printf (“85100n“);,case B: printf (“7084n“);,case C: printf (“6069n“);,case D: printf (“60n“);,default: printf (“errorn“);, 根據(jù)表達式的取值, 判斷其與哪一個常量表達式相等。如=表達式i,則自語句i開始執(zhí)行,直到語句n+1止。, 若與所有常量表達式值不相等,則從default后的語句開始執(zhí)行。,功能:,switch (表達式) case 常表1: 語句1; break;,一般形式改為:,以上存在一個問題: 沒有完全起到分支作用。,解決辦法: 增加break語句, 使之跳出switch結構。,case 常表2: 語句2; break; case 常表n: 語句n; break; default: 語句n+1; ,請大家修改以上例子,使之正確。,注: 1. 常表值必須互不相等,否則二異性。,2. case順序無關緊要。,3. 不一定非用break不可,有時幾種情況合并執(zhí)行一組語句。,例4.10 switch (grade) case A : case B: case C: printf(“60n“); break; case D: printf(“60n“); break; ,關于switch語句還有幾點說明: 1. switch、case、default是系統(tǒng)的關鍵字,它們僅出現(xiàn)在switch結構中。default及其后的語句段可以缺省。 2. switch后的一對圓括號不能省,后面的一對大括號不能省。 3. switch語句中的各常量表達式其值均為整型或字符型。這些表達式中不能含有變量或函數(shù)調用。如,不允許有score =80 & score90。switch后面圓括號中的表達式e其值通常為整型或字符型。 4.系統(tǒng)執(zhí)行switch結構中的某個語句段時,僅當遇到break語句時才結束并跳出switch語句,否則將順序執(zhí)行。,4.5 語句標號和goto語句,4.5.1語句標號 語句標號不必特意定義,可以是任意合法的標識符,在標識 符的后面加一個冒號就構成了標號。 注: 標號必須是標識符,可以和變量同名。通常用作goto語句的 轉向目標。 在C語言中,可以在任何語句前加上語句標號。,4.5.2 goto語句 稱為無條件轉向語句。 格式:goto 語句標號; 功能:把程序的執(zhí)行轉向語句標號所在的位置,標號必須和 goto語句在同一個函數(shù)內。,4.5 程序舉例,例1 寫一程序,輸入年號,判斷是否為閏年。,1. 算法: 根據(jù)閏年的判斷條件, 當年號能被4整除但不能被100整除時,它為閏年。, 當年號能被100整除又能被400整除時,它為閏年。,設用變量year表示年號,leap為待置值變量,當year為閏年:leap1, 否則leap0.,2. 流程圖,leap%400=0,leap1,leap=0,打印非閏年,打印是閏年,結束,leap1,yes,No,yes,No,A,3. 程序:,main ( ) in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論