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

下載本文檔

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

文檔簡(jiǎn)介

第五章選擇結(jié)構(gòu)程序設(shè)計(jì)概述:(1)順序結(jié)構(gòu)語(yǔ)句1語(yǔ)句2條件語(yǔ)句1語(yǔ)句2YN(2)選擇結(jié)構(gòu)上一章,學(xué)習(xí)了順序結(jié)構(gòu)程序設(shè)計(jì),即順序地執(zhí)行程序中的每條語(yǔ)句。程序設(shè)計(jì)的另外一種結(jié)構(gòu)——選擇結(jié)構(gòu),它根據(jù)某些條件決定執(zhí)行或不執(zhí)行某條語(yǔ)句,執(zhí)行不同語(yǔ)句。1本章內(nèi)容:1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式2.邏輯運(yùn)算符和邏輯表達(dá)式3.IF語(yǔ)句的使用,包括IF語(yǔ)句的三種基本形式,IF語(yǔ)句的嵌套4.條件運(yùn)算符和條件表達(dá)式5.Switch語(yǔ)句的使用6.程序舉例25.1關(guān)系運(yùn)算符和表達(dá)式一、關(guān)系運(yùn)算符及優(yōu)先級(jí)別比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符。在C語(yǔ)言中有以下關(guān)系運(yùn)算符:

<小于,<=小于或等于>

大于

>=大于或等于==等于(相等)

!=不等于

關(guān)系運(yùn)算符的優(yōu)先級(jí):

(1)>、>=、<、<=優(yōu)先級(jí)相等,==、!=優(yōu)先級(jí)相等,前者高于后者。

(2)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。

(3)關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符。3二、關(guān)系表達(dá)式關(guān)系表達(dá)式的一般形式為:

表達(dá)式關(guān)系運(yùn)算符表達(dá)式關(guān)系表達(dá)式的值是:關(guān)系成立為“真”,不成立則為“假”,C語(yǔ)言中用“1”表示“真”、“0”表示

“假”。例如:a+b>c-dx>3/2'a'+1<c-i-5*j==k+1

都是合法的關(guān)系表達(dá)式。由于表達(dá)式也可以又是關(guān)系表達(dá)式。因此也允許出現(xiàn)嵌套的情況,例如:a>(b>c),a!=(c==d)等。如:5>0的值為“真”,即為1。(a=3)>(b=5)由于3>5不成立,故其值為0。4例如a=3,b=2,c=1,則:關(guān)系表達(dá)式a>b的值為真,表達(dá)式的值為1;關(guān)系表達(dá)式(a>b)==c的值為真,表達(dá)式的值為1;關(guān)系表達(dá)式b+c<a的值為假,表達(dá)式的值為0;d=a>b,則d的值為:f=a>b>c,則f的值為:1055.2邏輯運(yùn)算符和表達(dá)式一、

邏輯運(yùn)算符

C語(yǔ)言中提供了三種邏輯運(yùn)算符!非運(yùn)算&&與運(yùn)算||或運(yùn)算運(yùn)算符&&和或運(yùn)算符||均為雙目運(yùn)算符。具有左結(jié)合性。非運(yùn)算符!為單目運(yùn)算符,具有右結(jié)合性。1、邏輯運(yùn)算符優(yōu)先級(jí)表示如下:(1)!高于&&高于||(2)&&,||低于關(guān)系運(yùn)算符,!高于算術(shù)運(yùn)算符(*,/)。

6按照運(yùn)算符的優(yōu)先順序可以得出:

a>b&&c>d等價(jià)于(a>b)&&(c>d)!b==c||d<a等價(jià)于((!b)==c)||(d<a)a+b>c&&x+y<b等價(jià)于((a+b)>c)&&((x+y)<b)2、邏輯運(yùn)算的值:

邏輯運(yùn)算的值也為“真”和“假”兩種,用“1”和“0”來表示。3、邏輯運(yùn)算的規(guī)則:(1)與運(yùn)算&&參與運(yùn)算的兩個(gè)量都為真時(shí)(非0),結(jié)果才為真(值為1),否則為假(值為0)。例如:5>0&&4>2,由于5>0為真,4>2也為真,其結(jié)果也為“真”,表達(dá)式的值為1。7(2)或運(yùn)算||

參與運(yùn)算的兩個(gè)量只要有一個(gè)為真(非0),結(jié)果就為真(值為1)。兩個(gè)量都為假(值為0)時(shí),結(jié)果為假(值為0)。例如:5>0||5>8,結(jié)果也就為真(值為1)。(3)非運(yùn)算!

參與運(yùn)算量為真(非0)時(shí),結(jié)果為假(值為0);參與運(yùn)算量為假(值為0)時(shí),結(jié)果為真(值為1)。例如:!(5>0)的結(jié)果為假(值為0)。注意:C編譯在判斷一個(gè)量是為“真”還是為“假”時(shí),以“0”代表“假”,以非“0”的數(shù)值作為“真”。在給出邏輯運(yùn)算結(jié)果值時(shí),以“1”代表“真”,“0”代表“假”。

例如:5&&3的值為“真”,即為1。又如:5||0的值為“真”,即為1。8二、邏輯表達(dá)式邏輯表達(dá)式的一般形式為:

表達(dá)式&&或||表達(dá)式!表達(dá)式

邏輯表達(dá)式的值:各種邏輯運(yùn)算的最后值,以“1”和“0”分別代表“真”和“假”。

例:分析下段程序的輸出結(jié)果

charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);9

在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都執(zhí)行,只有在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的值時(shí),才執(zhí)行下一個(gè)運(yùn)算符。(1)表達(dá)式1&&表達(dá)式2

a+b>0&&b++

如果:表達(dá)式1的值是0,無(wú)論表達(dá)式2的值是什么,整個(gè)表達(dá)式的值都為0,因此表達(dá)式2就不計(jì)算了。(2)表達(dá)式1||表達(dá)式2

a+b>0||b++

如果:表達(dá)式1的值是1,無(wú)論表達(dá)式2的值是什么,整個(gè)表達(dá)式的值都為1,因此表達(dá)式2就不計(jì)算了。105.3if語(yǔ)句一、if語(yǔ)句有三種基本形式。1.第一種形式為基本形式:

if(表達(dá)式)語(yǔ)句;

其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。其過程可表示為下圖。

main(){inta,b,max;

printf("\ninputtwonumbers:");

scanf("%d%d",&a,&b);

max=a;if(max<b)max=b;

printf("max=%d",max);}語(yǔ)句表達(dá)式非00112.第二種形式為if-else形式

if(表達(dá)式)語(yǔ)句1;

else

語(yǔ)句2;

其執(zhí)行過程是:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。voidmain(){inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);if(a>b)printf("max=%d\n",a);else

printf("max=%d\n",b);}例:語(yǔ)句1表達(dá)式非00語(yǔ)句2123.第三種形式為if-else-if形式

前二種形式的if語(yǔ)句一般都用于兩個(gè)分支的情況。當(dāng)有多個(gè)分支選擇時(shí),可采用if-else-if語(yǔ)句,其一般形式為:

if(表達(dá)式1)語(yǔ)句1;

elseif(表達(dá)式2)語(yǔ)句2;…

elseif(表達(dá)式m)

語(yǔ)句m;else

語(yǔ)句n;語(yǔ)句1表達(dá)式1非00語(yǔ)句2非00表達(dá)式2表達(dá)式m非00語(yǔ)句m語(yǔ)句nif…elseif

結(jié)構(gòu)的執(zhí)行過程13#include"stdio.h"voidmain(){charc;printf("inputacharacter:");c=getchar();if(c<32)printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");else

printf("Thisisanothercharacter\n");}例:144、在使用if語(yǔ)句中還應(yīng)注意以下問題(1)在三種形式的if語(yǔ)句中,在if關(guān)鍵字之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,

但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。例如:

if(a=5)語(yǔ)句;if(b)語(yǔ)句;都是允許的。但是如在if(a=5)…;中表達(dá)式的值永遠(yuǎn)為非0,所以其后的語(yǔ)句總是要執(zhí)行的,當(dāng)然這種情況在程序中不一定會(huì)出現(xiàn),但在語(yǔ)法上是合法的。又如,有程序段:

intb,a=10;

scanf("%d",&b);if(a=b)printf("a=b%d\n",a);elseprintf("a!=b%d,%d\n",a,b);

請(qǐng)思考:程序的輸出結(jié)果?15(2)在if語(yǔ)句中,條件判斷表達(dá)式必須用括號(hào)括起來,即使是一個(gè)變量的最簡(jiǎn)單表達(dá)式,也要用括號(hào)括起來;在語(yǔ)句之后必須加分號(hào)。(3)在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用{}括起來組成一個(gè)復(fù)合語(yǔ)句。例如:交換兩個(gè)變量

if(a>b){t=a;a=b;b=t;}

printf("a=%d,b=%d\n",a,b);

16

二、if語(yǔ)句的嵌套

當(dāng)if語(yǔ)句中的執(zhí)行語(yǔ)句又是if語(yǔ)句時(shí),則構(gòu)成了if語(yǔ)句嵌套的情形。其一般形式可表示如下:

if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句;在嵌套內(nèi)的if語(yǔ)句可能又是if-else型的,這將會(huì)出現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問題。if(表達(dá)式1)

if(表達(dá)式2)語(yǔ)句1;

elseif語(yǔ)句2;例如:if(x>=1)if(x>5)x++;elsex--;

請(qǐng)問:其中的else究竟是與哪一個(gè)if配對(duì)呢?17應(yīng)該理解為:還是應(yīng)理解為:

if(x>=1)

if(x>=1)if(x>5)if(x>5)x++;x++;elseelse x--;x--;為了避免這種二義性,C語(yǔ)言規(guī)定,else總是與它前面最近的if配對(duì),因此對(duì)上述例子應(yīng)按后一種情況理解。18如果要使else與第一個(gè)if配對(duì),則可加括號(hào){}來實(shí)現(xiàn)。

if(x>=1)

{if(x>5)x++;}elsex--;voidmain(){inta,b;printf("pleaseinputA,B:");scanf("%d%d",&a,&b);if(a!=b)if(a>b)printf("A>B\n");elseprintf("A<B\n");elseprintf("A=B\n");}例:19例5.3教材Pg.100-1(x<0)y=0(x=0)1(x>0)main(){intx,y;

scanf("%d",&x)

if(x<0)y=-1;elseif(x==0)y=0;elsey=1;

printf("x=%d,y=%d\n",x,y);}if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;y=-1;if(x!=0)if(x>0)y=1;elsey=0;

y=0;if(x>=0)if(x>0)y=1;elsey=-1;程序2程序3程序4××√程序120三、條件運(yùn)算符和條件表達(dá)式

如果在IF條件語(yǔ)句中,只執(zhí)行單個(gè)的賦值語(yǔ)句時(shí),??墒褂脳l件表達(dá)式來實(shí)現(xiàn)。不但使程序簡(jiǎn)潔,也提高了運(yùn)行效率。

條件運(yùn)算符為?:它是一個(gè)三目運(yùn)算符,即有三個(gè)參與運(yùn)算的量。由條件運(yùn)算符組成條件表達(dá)式的一般形式為:

表達(dá)式1?表達(dá)式2:表達(dá)式3其求值規(guī)則為:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。條件表達(dá)式通常用于賦值語(yǔ)句之中。例如IF條件語(yǔ)句:

if(a>b)max=a;elsemax=b;

可用條件表達(dá)式寫為max=(a>b)?a:b;

執(zhí)行該語(yǔ)句的語(yǔ)義是:如a>b為真,則把a(bǔ)賦予max,否則把b賦予max。21使用條件表達(dá)式時(shí),還應(yīng)注意以下幾點(diǎn):1.條件運(yùn)算符的運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,高于賦值符。因此max=(a>b)?a:b可以去掉括號(hào)而寫為max=a>b?a:b2.條件運(yùn)算符?:是一對(duì)運(yùn)算符,不能分開單獨(dú)使用。3.條件運(yùn)算符的結(jié)合方向是自右至左。例如:

a>b?a:c>d?c:d應(yīng)理解為

a>b?a:(c>d?c:d)這也就是條件表達(dá)式嵌套的情形,即其中的表達(dá)式3又是一個(gè)條件表達(dá)式。

22例5.4教材Pg.104main(){charch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?ch+32:ch;

printf("%c",ch);}if(ch>='A'&&ch<='Z')ch=ch+32;等價(jià)235.4多分支選擇switch語(yǔ)句一、switch語(yǔ)句使用的一般形式為:switch(表達(dá)式){

case常量表達(dá)式1:語(yǔ)句1;

case常量表達(dá)式2:語(yǔ)句2;

case常量表達(dá)式n:語(yǔ)句n;default:語(yǔ)句n+1;}24

語(yǔ)句的執(zhí)行過程:計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。計(jì)算表達(dá)式的值kk=常量表達(dá)式1的值語(yǔ)句1YNYNk=常量表達(dá)式2的值語(yǔ)句2……….k=常量表達(dá)式n的值語(yǔ)句nYN語(yǔ)句n+125voidmain(){inta;printf("inputintegernumber:");scanf("%d",&a);

switch(a){case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("error\n");}}問:程序運(yùn)行時(shí)輸入1,其輸出結(jié)果是什么?26二、說明

在switch語(yǔ)句中,“case常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch語(yǔ)句,將繼續(xù)執(zhí)行所有后面case語(yǔ)句的情況。為了避免上述情況,C語(yǔ)言還提供了一種break語(yǔ)句,專用于跳出switch語(yǔ)句,

break語(yǔ)句使用形式為:break;

在每一case語(yǔ)句之后增加break語(yǔ)句,使每一次執(zhí)行之后均可跳出switch語(yǔ)句,從而避免輸出不應(yīng)有的結(jié)果。因此switch語(yǔ)句通常格式為:27switch(表達(dá)式){

case常量表達(dá)式1:語(yǔ)句1;

break;case常量表達(dá)式2:語(yǔ)句2;

break;…case常量表達(dá)式n:語(yǔ)句n;break;default:語(yǔ)句n+1;}使用switch語(yǔ)句的通常形式為:28voidmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a)

{case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;

case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("error\n");}}29使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):1.在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。2.在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來。3.各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。4.default子句可以省略不用。305.case后面必須是常量表達(dá)式,表達(dá)式中不能包含變量。

voidmain(){inta,b=-1;

scanf("%d",&a);switch(a){caseb:printf(”a==b\n");break;case1:printf(”a==1\n");break;case2:printf(”a==2\n");break; default:break; }}315.5程序舉例補(bǔ)充例題:計(jì)算器程序。用戶輸入運(yùn)算數(shù)和四則運(yùn)算符,輸出計(jì)算結(jié)果。

voidmain(){floata,b,s;charc;printf("inputexpression:a+(-,*,/)b\n");scanf("%f%c%f",&a,&c,&b);

switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;

case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");

}}32本章小結(jié):

1.關(guān)系表達(dá)式和邏輯表達(dá)式是兩種重要的表達(dá)式

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論