計(jì)算機(jī)程序設(shè)計(jì)c語(yǔ)言第05章選擇結(jié)構(gòu)程序設(shè)計(jì)課件_第1頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)c語(yǔ)言第05章選擇結(jié)構(gòu)程序設(shè)計(jì)課件_第2頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)c語(yǔ)言第05章選擇結(jié)構(gòu)程序設(shè)計(jì)課件_第3頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)c語(yǔ)言第05章選擇結(jié)構(gòu)程序設(shè)計(jì)課件_第4頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)c語(yǔ)言第05章選擇結(jié)構(gòu)程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章選擇結(jié)構(gòu)程序設(shè)計(jì)

掌握關(guān)系、邏輯運(yùn)算符與表達(dá)式掌握if語(yǔ)句和switch語(yǔ)句的格式及執(zhí)行過(guò)程能設(shè)計(jì)選擇結(jié)構(gòu)程序主要任務(wù):1主要內(nèi)容

關(guān)系運(yùn)算符和關(guān)系表達(dá)式

邏輯運(yùn)算符和邏輯表達(dá)式if語(yǔ)句switch語(yǔ)句2引例計(jì)算函數(shù)值:輸入x的值判斷x的值根據(jù)x的值,計(jì)算y的值輸出y的值步驟②③不能用順序結(jié)構(gòu)程序?qū)崿F(xiàn),需引入選擇結(jié)構(gòu)程序3內(nèi)容提要關(guān)系表達(dá)式邏輯表達(dá)式選擇結(jié)構(gòu)控制語(yǔ)句if語(yǔ)句if語(yǔ)句的三種形式if語(yǔ)句的嵌套條件表達(dá)式switch語(yǔ)句4一、關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算:對(duì)兩個(gè)量進(jìn)行“比較運(yùn)算”關(guān)系運(yùn)算符:<、<=、>、>=、==、!=優(yōu)先級(jí)別:高低算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、賦值運(yùn)算符高低如:c>a+b

相當(dāng)于c>(a+b)a==b<c相當(dāng)于a==(b<c)a=b>c相當(dāng)于a=(b>c)注意:區(qū)分“=”與“==”5一、關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的有意義的式子如:x!=0‘a(chǎn)’==‘A’a*a+b*b<c*c說(shuō)明:數(shù)值量比較:數(shù)字的大小字符量比較:ASCII碼的大小關(guān)系表達(dá)式的值:真(1)、假(0)結(jié)合規(guī)則:左結(jié)合6二、邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符:

!(非)、&&(與)、||(或)優(yōu)先級(jí)別:高低!算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符高低a>b&&b>c(a>b)&&(b>c)a!=b&&c!=0(a!=b)&&(c!=0)!a||a>b(!a)||(a>b)

5>3&&2||!8<4-2((5>3)&&2)||((!8)<(4-2))如:7!aa&&-54||0二、邏輯運(yùn)算符和邏輯表達(dá)式邏輯量:當(dāng)一個(gè)量(基本類型的常量或變量)用作判斷時(shí),C編譯系統(tǒng)認(rèn)為:非0——真、0——假邏輯表達(dá)式:用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的有意義的式子(單個(gè)邏輯量、關(guān)系表達(dá)式是邏輯表達(dá)式的特例)邏輯表達(dá)式的值:真(1)、假(0)如:若a=4,則:0118舉例判斷某年year是否閏年?(閏年:能被4整除,但不能被100整除;或能被400整除)year%4==0&&year%100!=0||year%400==0練習(xí):寫出C語(yǔ)言的表達(dá)式

|x|>2

x≤1+a

并且y≤b

的定義域Abs(x)>2

x>2||x<-2x<=1+a&&y<=b(x>=2||x<=1)&&x!=09舉例寫出表達(dá)式的值

a=2,b=0,c=-2.5a*b||c

!b&&c0||a1&&!a/c10三、if語(yǔ)句的三種形式——條件執(zhí)行條件執(zhí)行if(P)A

P為條件邏輯表達(dá)式,A為語(yǔ)句if(a>0)printf(“Aispositive.”\n);if(x>y){z=y;y=x;x=z;}N-S結(jié)構(gòu)圖

P

TFA11

P

TFA

BN-S結(jié)構(gòu)圖三、if語(yǔ)句的三種形式——分支選擇分支選擇if(P)AelseBif(a>0)printf(“Aispositive.”\n);elseprintf(“Aisn’tpositive.”\n);if(ch>='a'&&ch<='z'){ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);注意:

A或B既可以是單語(yǔ)句,也可以是復(fù)合語(yǔ)句

else部分不能獨(dú)立存在,即else前一定有一個(gè)分號(hào),它必定是if語(yǔ)句的一部分12三、if語(yǔ)句的三種形式在C語(yǔ)言中,表達(dá)式P的值為非0時(shí),系統(tǒng)均按真值處理

如:if(‘a(chǎn)’)printf(“ok!”);x=-5;if(x)printf(“ok!”);y=0;if(y==0)printf(“ok!”);

if(y)printf(“ok!”);13讀程序#include<stdio.h>voidmain(){floatx,y;

printf(“enterx:”);

scanf(“%f”,&x);if(x==0.)y=1;elsey=(x*5+1)/x;

printf(“\nx=%4.1f\ty=%4.1f\n”,x,y);}enterx:

2x=2.0y=5.514舉例輸入一個(gè)整數(shù)a,判斷它是偶數(shù)還是奇數(shù)?偶數(shù):a%2==0#include<stdio.h>voidmain(){inta;

printf(“inputanumber:”);

scanf(“%d”,&a);if(a%2==0)printf(“%diseven\n”,a);elseprintf(“%disodd\n”,a);}inputanumber:123123isodd15三、if語(yǔ)句的三種形式——階梯式階梯式的if-else語(yǔ)句(elseif形式)if(P1)S1elseif(P2)S2…elseif(Pn)Sn[elseSn+1]依次計(jì)算并判斷表達(dá)式Pi,為非0時(shí)執(zhí)行后面的語(yǔ)句,都為0時(shí),執(zhí)行語(yǔ)句Sn+1無(wú)論執(zhí)行完那個(gè)語(yǔ)句分支,都轉(zhuǎn)到后續(xù)語(yǔ)句過(guò)程:16三、if語(yǔ)句的三種形式——階梯式N-S圖

P1

TFP2S1TFS2

Pn

TF

SnSn+117舉例評(píng)價(jià)學(xué)生的成績(jī)score≥80‘A’80>score≥70‘B’70>score≥60‘C’60>score‘D’

BFscore>=60score>=70score>=80TTFFATCD18程序:#include<stdio.h>voidmain(){intscore;

printf(“inputascore:”);

scanf(“%d”,&score);if(score>=80)printf(“A\n”);

else

if(score>=70)printf(“B\n”);

else

if(score>=60)printf(“C\n”);

else

printf(“D\n”);}19四、if語(yǔ)句的嵌套

P

TFA

Bif(P1)

if(P2)A

elseBelse

if(P3)CelseD

P3

TFC

D

P2

TFA

B

P1

TF

20四、if語(yǔ)句的嵌套注意:else總是與最近的if匹配課本P101程序1程序2程序3程序421四、if語(yǔ)句的嵌套比較:if(x)if(y)printf(“1”);elseprintf(“2”);if(x){if(y)printf(“1”);}elseprintf(“2”);與通過(guò)加“{}”,可以改變else的層位,從而改變程序的執(zhí)行流程。22舉例判斷某年year是否閏年?思路:年份year為閏年的條件為①能夠被4整除,但不能被100整除的年份;②能夠被400整除的年份。只要滿足任意一個(gè)就可以確定它是閏年。例如:1996、2000是閏年;1998、1900不是閏年設(shè)定標(biāo)志變量leap,只要符合其中一個(gè)條件的就是閏年,令leap=1;否則令leap=0

23算法:定義變量year、leap

輸入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是閏年不是閏年year%400==0year%4==0&&year%100!=024程序:include<stdio.h>voidmain(){intyear,leap;

scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;

else

if(year%400==0)leap=1;

elseleap=0;

if(leap==1)

printf("%disaleapyear\n",year);

else

printf("%disnotaleapyear\n",year);}25五、條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符:?和:惟一的三目運(yùn)算符條件表達(dá)式:e1

?

e2

:

e3

如:a>b?a:bx==0.?1:sin(x)/x執(zhí)行過(guò)程:計(jì)算e1e1的值為非0(真),計(jì)算并返回e2的值,否則計(jì)算并返回e3的值運(yùn)算順序:高于賦值運(yùn)算,低于算術(shù)、關(guān)系、邏輯運(yùn)算條件運(yùn)算符的結(jié)合方向是“右結(jié)合”26例1#include<stdio.h>voidmain(){inta,b,max;

printf(“inputa,b:”);

scanf(“%d,%d”,&a,&b);max=a>b?a:b;

printf(“max=%d\n”,max);}printf(“max=%d\n”,max=a>b?a:b);printf(“max=%d\n”,a>b?a:b);或者思考:n個(gè)數(shù)中找出最大數(shù)或最小數(shù)?27例2輸入一個(gè)字符,如果是大寫字母,則將其轉(zhuǎn)換為小寫字母輸出,否則直接輸出。輸入:用getchar

或scanf

函數(shù)ch是否為大寫字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大寫字母轉(zhuǎn)換為小寫字母:ch=ch+32(或ch+(‘a(chǎn)’-’A’))輸出:用putchar

或printf

函數(shù)思路:28putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')程序:#include"stdio.h"voidmain(){charch;

ch=getchar();if(ch>='A'&&ch<='Z')

ch=ch+32;

printf("%c\n",ch);}可使用條件表達(dá)式代替對(duì)于二分支,并對(duì)同一變量賦值時(shí)使用條件表達(dá)式較方便29六、switch語(yǔ)句亦稱開關(guān)語(yǔ)句、多分支選擇語(yǔ)句。相比于用嵌套的if語(yǔ)句實(shí)現(xiàn)多路分支問(wèn)題,其程序結(jié)構(gòu)更清晰、易讀格式:switch(表達(dá)式e){case常量表達(dá)式1:語(yǔ)句序列1case常量表達(dá)式2:語(yǔ)句序列2……case常量表達(dá)式n:語(yǔ)句序列n

[default:語(yǔ)句序列n+1]}計(jì)算e的值若與常量表達(dá)式i的值一致,則從語(yǔ)句i開始執(zhí)行,直到遇到break語(yǔ)句或switch語(yǔ)句中的”}”若與任何常量表達(dá)式均不一致時(shí),則執(zhí)行default語(yǔ)句或執(zhí)行后續(xù)語(yǔ)句過(guò)程:30六、switch語(yǔ)句N-S結(jié)構(gòu)圖注意:常量表達(dá)式僅起語(yǔ)句標(biāo)號(hào)作用,不進(jìn)行條件判斷常量表達(dá)式的值必須惟一,沒(méi)有先后次序多個(gè)case語(yǔ)句可共用一組執(zhí)行語(yǔ)句計(jì)算表達(dá)式常量表達(dá)式1語(yǔ)句序列1常量表達(dá)式2語(yǔ)句序列2…………常量表達(dá)式n語(yǔ)句序列ndefault語(yǔ)句序列n+131說(shuō)明:switch語(yǔ)句的書寫格式:語(yǔ)句體本身必須用花括號(hào)括起;case和default后面如果有多條語(yǔ)句,則可以不必使用花括號(hào);case和常量表達(dá)式之間必須有空格;default可以寫在語(yǔ)句體的任何位置,也可以省略不寫break語(yǔ)句可以改變case的語(yǔ)句標(biāo)號(hào)作用,終止后續(xù)case語(yǔ)句序列的執(zhí)行。

switch語(yǔ)句和break語(yǔ)句結(jié)合,可以實(shí)現(xiàn)程序的選擇控制(break語(yǔ)句還可以在循環(huán)語(yǔ)句中使用)允許switch嵌套使用,但同一個(gè)switch語(yǔ)句中,任意兩個(gè)case的常量表達(dá)式值不能相同。32六、switch語(yǔ)句例2:switch(a){case5:printf("&");case2:printf("#");

default:printf("$");}當(dāng)a等于5,輸出:&#$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$switch(x){case1:printf(“statement1”);break;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論