c語言課件10c選擇結(jié)構(gòu)程序設(shè)計_第1頁
c語言課件10c選擇結(jié)構(gòu)程序設(shè)計_第2頁
c語言課件10c選擇結(jié)構(gòu)程序設(shè)計_第3頁
c語言課件10c選擇結(jié)構(gòu)程序設(shè)計_第4頁
c語言課件10c選擇結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第4章選擇結(jié)構(gòu)程序設(shè)計 關(guān)系運算關(guān)系運算用來比較數(shù)值與數(shù)值之間的關(guān)系關(guān)系運算符有、=、=、b 的結(jié)果為d=ab 的結(jié)果為b+cb= =c 的結(jié)果為f=abc 的結(jié)果為110104a3 的結(jié)果為0=與= = 的區(qū)別:例:int b=3;請求出下列兩個表達式的值 及b的值。 1、b=5; 2、b= = 5;表達式的值為5,b的值為5表達式的值為0,b的值為3if (x=2)printf(“win!”); 改錯if (x= =2) printf(“win!”);if 后接關(guān)系表達式,結(jié)果為邏輯值:真或假 邏輯運算C語言提供了三種邏輯運算符: ! (邏輯非) & (邏輯與) | (邏輯或)高低 ! (

2、邏輯非)是單目運算符,優(yōu)先級最高 & (邏輯與)、 | (邏輯或)是雙目運算符,優(yōu)先級高于賦值運算符,低于關(guān)系運算符 邏輯表達式就是用邏輯運算符將邏輯量連接起來的式子 邏輯表達式的結(jié)果為1(真)或0(假)高高低低邏輯運算的真值表 0 0 0 1 1 0 1 1 pq!pp&qp|q3&2 的結(jié)果為 10&2 的結(jié)果為 110011110000000100000011011100111111543的結(jié)果為1對嗎?錯, 54&43為16=6=6的結(jié)果為01(1)兩個表達式作&,只要一個的值為0,不必計算另一個,該表達式的值為0;(2)兩個表達式作| |,只要一個的值為1,不必計算另一個,該表達式的

3、值肯定為1.#include void main()int a=0,b=1,c=1; (a+)&(b+)&(c+); printf(%d,%d,%d,a,b,c);結(jié)果: 1 , 1 , 1總結(jié)常用運算符的優(yōu)先級非算關(guān)邏賦邏輯非算術(shù)運算關(guān)系運算邏輯運算賦值運算一、求下列邏輯表達式的值(設(shè) a=3,b=4,c=5)(1) a+bc&b=c7545100(2) !(ab)&!c|b+c/2054160201二、根據(jù)下列描述寫出C語言表達式(1) 判斷某數(shù)能否被3、7、11整除(該數(shù)為num)能被11整除能被3整除能被7整除且且num%3=0num%7=0num%11=0&C語言表達式為:num%3

4、=0&num%7=0&num%11=0閏年的條件滿足下列二者之一:(2) 判斷某年是否為閏年(該年為year)能被4整除且不能被100整除能被400整除能被4整除不能被100整除能被400整除且或year%4=0year%100!=0year%400=0&|C語言表達式為:(year%4=0&year%100!=0)|year%400=04.1 if 語句if 語句的三種形式if 語句與條件運算符1if (表達式) 語句;2if (表達式) 語句1;else 語句2;3復(fù)合 if 語句 if (表達式1) 語句1; else if (表達式2)語句2; . else if (表達式n)語句n;

5、 else 語句 n+1;if語句就是根據(jù)某一條件決定執(zhí)行某一語句,二者選其一,它有三種形式:表達式語句YN表達式語句1YN語句24.1.1 if語句的三種形式例 1 從鍵盤輸入一個字符,如果是字母,則輸出,否則不輸出。 #include void main() char c; scanf(“%c”,&c); if (c=A&c=a&c=z) printf(“%c”,c); c (較大者)a(較小者)1、變量說明2、輸入三個數(shù)3、按大小排序4、按順序輸出b (較大者)a (較小者)b (較小者)13a、b、cabcc (較大者)2a例2 輸入三個數(shù),按由小到大順序輸出程序如下:#include

6、 void main( )float a,b,c,t; scanf(“%f%f%f“,&a,&b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a;a=c;c=t;if (bc) t=b;b=c;c=t;printf(“%5.2f, %5.2f,%5.2f”,a,b,c); 若一個語句不能完成該操作可以使用復(fù)合語句 用 括起來的多個語句 組成一個復(fù)合語句#include void main( ) float a,b,c,d,t; scanf(%f%f%f%f, &a,&b,&c,&d); if (ab) t=a; a=b; b=t; if (ac) t=a; a=

7、c; c=t ; if (ad) t=a;a=d; d=t ; if (bc) t=b;b=c;c=t; if (bd) t=b;b=d;d=t; if (c=90elsex=75x=60elseABCDelse程序如下:#include void main( ) int score; char grade; printf(“請輸入學(xué)生成績:”); scanf(“%d”,&score); if (score=90) grade=A; else if (score=75) grade=B ; else if (score=60) grade=C; else grade=D; printf(“學(xué)生

8、成績是%d,等級是%cn”, score,grade); 注意:else 總是與最近的一個if匹配請思考:有一函數(shù):y=-1 (x0) 編一程序,輸入一個x值,輸出y值。有以下幾種寫法,請大家判斷那些正確?程序1: void main( )int x,y; scanf(“%d”,&x); if (x=0) if (x0) y=1; else y=0; else y=-1; . . . . . . X=0X0X=0X0) y=1; else y=0; . . . . . . 程序4: . . . . . y=0; if (x=0) if (x0) y=1;else y= -1; . . . .

9、. . X0X=0elseelse程序1結(jié)果:x0 y=1程序2結(jié)果:x0 y=1程序3結(jié)果:x0 y=1程序4結(jié)果:x0 y=1對對錯錯程序舉例-if的嵌套結(jié)構(gòu)例5 寫程序,判斷某一年是否是閏年. #include void main() int year ,leap; scanf(“%d”,&year); if (year%4= =0) if (year%100= =0) if (year%400= =0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is”,year);else printf(“%

10、d is not”,year);printf(“a leap year .n”);如:求b的絕對值:if (b0) abs_b= -b;else abs_b= b;abs_b= -babs_b= babs_b= -b:babs_b=(b0)?-b:b;abs_b=(b0)?-b:b;條件表達式的一般形式: e1? e2 :e3 若e1為真,則此條件表達式取值為e2的值,若e1為假,則取值為e3的值。例1:寫出計算c=a+|b| 的條件表達式 :if (b0) c=a-b;else c=a+b; c=b0?a-b:a+b;4.1.2 條件運算符與條件語句之間的關(guān)系例2:判斷一字符變量a是否為大寫

11、字母,若是,則將它轉(zhuǎn)換成小寫。if ( a=A) a=a+32;a=(a=A)?a+32:a 條件運算符的優(yōu)先級大于賦值運算符,小于關(guān)系運算符,結(jié)合方向也是自右而左;用條件表達式求三個數(shù)的最大值:max=(ab)?a:b)c?(ab)?a:b):ca,b兩數(shù)最大值例3:執(zhí)行下列語句后,a的值是_,b的值是_,c的值是_.int a,b,c,m=1,n=0;a=(- -m= =n+)?- -m:+n;b=m+;c=- -n;m=0m= =n該表達式值為1n=1m= -1a= -1b= -1,m= -1+1=0n=1-1=0, c=0-1-104.2 switch語句 if語句是在二種情況中作出選

12、擇,一旦要選擇的條件比較多,用if層層嵌套就比較麻煩。switch語句可以對多分支進行選擇。格式: switch (表達式) case 常量表達式1:語句1; case 常量表達式2:語句2; . . . . . . case 常量表達式n:語句n; default : 語句n+1; 表達式語句1語句2. . .語句3語句n若要每執(zhí)行一條語句即跳出switch語句,要使用break格式: switch (表達式) case 常量表達式1:語句1;break; case 常量表達式2:語句2;break; . . . . . . case 常量表達式n:語句n;break; default :

13、語句n+1; 語句n+1out常量表達式1常量表達式2常量表達式3常量表達式ndefaultbreak break break break 例1 根據(jù)學(xué)生成績等級劃分成績段。等級A,分數(shù)在90100之間,等級B分數(shù)在7589之間,等級C,分數(shù)在6074之間;等級D,分數(shù)在059之間#include void main( )char grade; scanf(“%c”,&grade); switch (grade) case A:printf(“90100n”); break; case B:printf(“7589n”); break; case C:printf(“6074n”); brea

14、k; case D:printf(“059n”); break; default :printf(“輸入錯誤n”); 例2:測試變量ch(字符類型)是數(shù)字、空白還是其它 字符。09都是數(shù)字,換行、退格、空格都可當(dāng)作是 空白字符。switch(ch )case 0: printf(“Its a digitn”); case 1: printf(“Its a digitn”); . . . . . . case 9: printf(“Its a digitn”); break; case 32: printf(“Its a white n”); case n: printf(“Its a whit

15、en”); case b: printf(“Its a whiten”);break; default: printf(“Its a charn”); 例3:輸入年月日,輸出該日是這一年中的第幾天(考慮閏年)編程思想:利用switch語句下滑趨勢做累加求和請思考:如果是2010年5月4日應(yīng)該如何算?1月天數(shù)+2月天數(shù)+3月天數(shù)+4月天數(shù)+4再思考:如果是x月y日應(yīng)該如何算?1月天數(shù)+x-1月天數(shù)+y#include void main()int y,m,d,yy,days=0; printf(Please input year-month-date:); scanf(%d-%d-%d,&y,&

16、m,&d); if(y%4=0&y%100!=0|y%400=0) /*將二月份的天數(shù)放入yy中*/ yy=29; else yy=28; switch(m) case 12: days+=30; /*將11月份的天數(shù)加進來*/ case 11: days+=31; /*將10月份的天數(shù)加進來*/ case 10: days+=30; /*將9月份的天數(shù)加進來*/ case 9: days+=31; /*將8月份的天數(shù)加進來*/ case 8: days+=31; /*將7月份的天數(shù)加進來*/ case 7: days+=30; case 6: days+=31; case 5: days+=30; case 4: days+=31; case 3: days+=yy; /*將2月份的天數(shù)加進來*/ case 2: days+=31; /*將1月份的天數(shù)加進來*/ days+=d; printf(tIts the %d day of the year.n,days); 使用switch語句時應(yīng)注意:switch后表達式的類型與case后常量表達式類型應(yīng)一致.表達式類型一般使用整型或字符型。case后常量表達式應(yīng)為單個常量,或是不含變量的常量表達式,但不能為變量。case后的常量表達式的值不能有相同的,如果有相同就意味著有兩個入

溫馨提示

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

評論

0/150

提交評論