選擇機(jī)構(gòu)程序設(shè)計(jì)_第1頁
選擇機(jī)構(gòu)程序設(shè)計(jì)_第2頁
選擇機(jī)構(gòu)程序設(shè)計(jì)_第3頁
選擇機(jī)構(gòu)程序設(shè)計(jì)_第4頁
選擇機(jī)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章

為擇給胸程序設(shè)計(jì)

河南化工取業(yè)學(xué)院

本章要點(diǎn)

■關(guān)系表達(dá)式

?邏輯表達(dá)式

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

河南化工取業(yè)學(xué)院

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

河南化工取業(yè)學(xué)院2011-11-15

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

“關(guān)系運(yùn)算”實(shí)際上是“比較運(yùn)算”,其中操作

數(shù)可以是變量、常量或表達(dá)式。

關(guān)系表達(dá)式的

計(jì)算結(jié)果=邏輯值(真或假)

在C語言中,用“0”表示“假”,用“1”表示

河南化工取業(yè)學(xué)院2011-11-15

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

例如:假設(shè)num1=3,num2=4,num3=4,則:

(1)num1>num2的值

(2)(num1>num2)!=num3的值

(3)numlvnum2vnum3的值

思考:任意改變num1或num2的值,會(huì)影響整個(gè)

表達(dá)式的值嗎?

(4)(num1<num2)+num3

河南化工取業(yè)學(xué)院2011-11-15

4.2邏輯運(yùn)算符和邏輯表達(dá)式

?邏輯運(yùn)算符用于連接一個(gè)或多個(gè)條件,判

斷這些條件是否成立

■邏輯運(yùn)算符有:

I運(yùn)算運(yùn)算符表達(dá)式

邏輯“與”&&操作數(shù)1&&操作數(shù)2

邏輯“或”II操作數(shù)1||操作數(shù)2

邏輯“非”1■!操作數(shù)

河南化工取業(yè)學(xué)院2011-11-15

邏輯表達(dá)式

在實(shí)際問題上,對于一些復(fù)雜的條件,還需要用幾個(gè)關(guān)系表

達(dá)式組合起來才能表示。例如,條件2VXV9就需要用2Vx和

XV9這兩個(gè)關(guān)系式來表示。將多個(gè)關(guān)系式用邏輯運(yùn)算符連接起來

的式子稱為邏輯表達(dá)式

邏輯運(yùn)算符有:

Not(非):取操作數(shù)相反的值。即當(dāng)操作數(shù)為False時(shí),

結(jié)果為True;當(dāng)操作數(shù)為True時(shí),結(jié)果為False;

And(與):當(dāng)兩個(gè)操作數(shù)都為True時(shí),結(jié)果才為True;

Or(或):當(dāng)兩個(gè)操作數(shù)都為False時(shí),結(jié)果才為False。

河南化工取業(yè)學(xué)院2011-11-15

4.2邏輯運(yùn)算符和邏輯表達(dá)式

般的搦則

&&:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值都為“真”時(shí),運(yùn)算結(jié)果

“真”,否則為“假”。

II:當(dāng)且僅當(dāng)兩個(gè)運(yùn)算量的值都為“假”時(shí),運(yùn)算結(jié)果

“假「否則為“真”。

I_坐二L笛縣的/古小“吉”口.運(yùn)算結(jié)果為“假”;當(dāng)

」例如:假定x=4,貝I」~~~~

(x>=0)&&(XV10)的值

吉果為“真”。

(XV」)||(x>4)的值

河南化工取業(yè)學(xué)院2011-11-15

4.2邏輯運(yùn)算符和邏輯表達(dá)式

邏輯運(yùn)算符的優(yōu)先級

?邏輯非的優(yōu)先級最高,邏輯與次之,邏輯或最低即:

!(非)一&&(與)—II(或)

-與其它種類運(yùn)算符的優(yōu)先關(guān)系

!一算術(shù)運(yùn)算符一關(guān)系運(yùn)算符一&&一||一賦值運(yùn)算符

河南化工取業(yè)學(xué)院2011-11-15

請你判斷下列表達(dá)式的值:

(1)not(3>7)

(2)(3<8)and(5<10)

(3)(0<5)or(3<1)

(4)not(1>4)or(2<1)and(1<2)

邏輯表達(dá)式的運(yùn)算順序

(1)當(dāng)條件中只有邏輯運(yùn)算符時(shí),運(yùn)算的順序?yàn)閚ot、and、or。

(2)當(dāng)條件中既有算術(shù)運(yùn)算符,又有關(guān)系到運(yùn)算符和邏輯運(yùn)算符

時(shí),運(yùn)算順序是:

算術(shù)運(yùn)算一〉關(guān)系運(yùn)算”〉邏輯運(yùn)算

請你判斷下列表達(dá)式的運(yùn)算順序:

a+b>c+dandw-ornotc0ord0

河南化工取業(yè)學(xué)院2011-11-15

4.2邏輯運(yùn)算符和邏輯表達(dá)式

邃輯表達(dá)式的值

-c語言中,運(yùn)算量:1r0表示“假",、

\非。表示“真”,:

運(yùn)算結(jié)果:[0表示“假”,-、

、1表示“真”,,

例如:14&&2.8!146a5&&6b9!0

例如,假設(shè)num=12,則:

num>=l&&mjmv=31的值1

num||mjm>31的值1。

河南化工取業(yè)學(xué)院2011-11-15

4.2邏輯運(yùn)算符和邏輯表達(dá)式

說明

在計(jì)算邏輯表達(dá)式時(shí),并不是所有的表達(dá)式都

被求解,只有在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才

能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。

河南化工取業(yè)學(xué)院2011-11-15

4.2邏輯運(yùn)算符和邏輯表達(dá)式

例:要判斷某一年year是否是閏年。閏年的條件是

符合二者之一:①能被4整除,但不能被100整

除。②能被4整除,又能被400整除。

(year%4==0)&&(year%100!=0)||(year%400==0)

例:判斷某一個(gè)字符ch是否是字母,而不是數(shù)字或

其他的符號。

(ch>=5aJ&&ch<=5zJ)||(ch>=5A5&&ch<=5z5)

河南化工取業(yè)學(xué)院2011-11-15

選擇結(jié)構(gòu)一IF語句

星期六班委會(huì)準(zhǔn)備組織全班同學(xué)春游,

如果下雨,活動(dòng)就推遲到下一周,如果天

氣好就如期進(jìn)行,這時(shí)出現(xiàn)兩種選擇。

這種需要某個(gè)前提成立與否而做出選

擇的問題需要通過選擇結(jié)構(gòu)來解決

河南化工取業(yè)學(xué)院2011-11-15

商場為了對蘋果進(jìn)行促銷,根據(jù)顧客購買的數(shù)量調(diào)整蘋果銷

售的價(jià)格。如顧客一次購買5斤以下按原價(jià)3元出售,一次5斤以

上(含5斤)時(shí)則可以在原價(jià)的基礎(chǔ)上打8折。

(1)分析問題:

weight表示蘋果重量,amount表示應(yīng)付金額;

5斤以下:amount=weight*3;5斤以上:amount=weight*3*0.8

(2)設(shè)計(jì)算法

①輸入蘋果重量weight的值;

②判斷weight>=5的值是true還是Hase

③計(jì)算應(yīng)付金額amount,如果weight>=5的值是true,貝ij

amount=weight*3*0.8;否貝ij為amount=weight*3

④輸出應(yīng)付金額amount

(3)編寫程序

根據(jù)設(shè)計(jì)好的算法,可以寫出此問題的代碼如下:

河南化工取業(yè)學(xué)院2011-11-15

CoBBandl▼]Click

PrivateSubCommandl_C1ick()

DimweightjamountAsSingle

weight=InputBox”請輸入聿果的重量、"買蘋果")

Ifweight>=5Then

amount=weight*3*0.8

Else^

amount=weight*3

EndIf

Print"應(yīng)付金額是:";amount;"元"

EndSub

河南化工取業(yè)學(xué)院2011-11-15

4.3if語句(三種形式)

用if語句可以構(gòu)成分支結(jié)構(gòu)。它對給定的條件進(jìn)行判斷,

根據(jù)判斷的結(jié)果(真或假)來決定執(zhí)行某個(gè)分支程序段。

?1.單分支(基本形式):其語義是:

如果表達(dá)式的值為真,則執(zhí)行其后的語

句,否則不執(zhí)行該語句。

?:?格式:if(表達(dá)式)

語句

?:?執(zhí)行過程:

例:if(x>y)printf(“%d”,x);

河南化工取業(yè)學(xué)院2011-11-15

例4」:輸入兩個(gè)實(shí)數(shù),按由大到小的咽序獨(dú)出。

----------------------------------------------------------------------------------------------------------------------------------------------------1內(nèi)存

#include<stdio.h>

main()

floata,b,t;

scanf(H%f,%f",&a,&b);

if(a<b)

{t=a;

a=b;

b=t;}

printf("%4.2f,%4.2f\n",a,b);

)

河南化工取業(yè)學(xué)院2011-11-15

?2.雙分支(if?se形式):

其語義是:如果表達(dá)式的值為真,則

執(zhí)行語句1,否則執(zhí)行語句2。

?:?格式:if(表達(dá)式)

語句1

else

語句2

?:?執(zhí)行過程:

例:if(x>y)printf(n%dn,x);

elseprintf(n%dn,y);

河南化工取業(yè)學(xué)院2011-11-15

修改上例

#include<stdio.h>

main()

(

inta,b;

scanf(H%d%dH,&a,&b);

if(a>b)

pnntfC%d,%d\nu,a,b);

else

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

}河南化工取業(yè)學(xué)院

2011-11-15

?main()

(

inta,b;

printf("inputtwonumbers:");

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

if(a>b)

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

else

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

}

輸入兩個(gè)整數(shù),輸出其中的大數(shù)。改用if?else語句

判別a,b的大小,若a夫,則輸出a,否則輸由b。

河南化工取業(yè)學(xué)院2011-11-15

?3.if?se?if形式:要處理多重條件判斷的情

況,需要使用多重條件結(jié)構(gòu)多重if結(jié)構(gòu)是if?se

的另一種形式,這種形式也稱為階梯式if-else-if

河南化工取業(yè)學(xué)院2011-11-15

?前二種形式的if語句一般都用于兩個(gè)分支的情況。當(dāng)有多

個(gè)分支選擇時(shí),可采用if?else?if語句,其語義是:依次判斷

表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對應(yīng)的語句。然后跳

到整個(gè)if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行

語句n。然后繼續(xù)執(zhí)行后續(xù)程序。其一般形式為:

if(超現(xiàn)二)

/吾句1;

elseif(類乒可、

,吾句子,

elseif(程亙)

4句3;

else

語句n;

河南化工取業(yè)學(xué)院2011-11-15

4.3if語句

__iW

——p-

河南化工取業(yè)學(xué)院2011-11-15

■[例44]輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到

.大輸出這兩個(gè)數(shù)。

main()

{floata,b,t;

scanf(H%f,%fH,&a,&b);

if(a>b)

{t=a;a=b;b=t;}

printf(H%5.2f,%5.2fn,a,b);

)

?運(yùn)行示例、

3.6,-3.2/-323.6

河南化工取業(yè)學(xué)院2011-11-15

■[例4.2]輸入三個(gè)數(shù),按由大到小輸出。

main()

{floata,b,c,t;

scanf(“%f,%f,%f',&a,&b,&c);

if(a>b)

{t=a;a=b;b=t;}

if(a>c)

{t=a;a=c;c=t;}

if(b>c)

{t=b;b=c;c=t;}

printf(”%5?2f,%5.2f,%5.2f'ab,c);

)

河南化工取業(yè)學(xué)院2011-11-15

★在使用if語句中還應(yīng)注意以下問題

??《)在三種形式的if語句中,在if關(guān)鍵字之后均為表達(dá)式。該表達(dá)式通常

是謖輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它表達(dá)式,如賦值表達(dá)式等,

甚至也可以是一個(gè)變量。(if后面的表達(dá)式類型任意)

例如:if(a=5)語句;if(b)語句;都是允許的。只要表達(dá)式的值為非0,

即為“真”。如在if(a=5)…;中表達(dá)式的值永遠(yuǎn)為非0,所以其后的語句

總是要執(zhí)行的,當(dāng)然這神情況在程序中不一定會(huì)出現(xiàn),但在語法上是合

的°

文如,有程序段:if(a=b)

printf("%d',,a);

else

printf(”a=0");本語句的語義是,把b值賦予a,如為非0則輸出該值,否

則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。

如:if(a==b&&x==y)printfV'a=b,x=y'');

intx=3,y;if(x=4)y=3;

if(3)printf("OK”);

iffa9)printf(“%d",'a');

河南化工取業(yè)學(xué)院2011-11-15

?(2)在if語句中,條件判斷表達(dá)式必須用括號括起來,注意語句應(yīng)以分

號結(jié)束。例:

if(x>0)print。%f”,x);elseprintf("%f\"x);

?(3)在if語句的三種形式中,所有的語句應(yīng)為單個(gè)語句,如果要想在滿足

條件時(shí)執(zhí)行一組(多個(gè))語句,則必須把這一組語句用{}括起來組成一個(gè)復(fù)

合語句。例:

if(a+b>c&&b+c>a&&c+a>b){s=0.5*(a+b+c);area=sqrt(s*(s-

a)*(s-b)*(s-c));printf("area=%6.2f",area);}elseprintf("itisnota

trilateral");

★注意:大括號{}本身是一個(gè)完整的復(fù)合語句,不需要分號。即在}之后

不能再加分號。例如:

if(a>b){

a++;

b++;

)

else{a=0;

b=10;

)

?(4)else不能作為語句單獨(dú),它必須與if配對使用

河南化工取業(yè)學(xué)院2011-11-15

4.3if語句

#include<stdio.h>

main()

floatgrade;

printf("\n請輸入期末考試成績:”)

scanf("%f,&grade);

if(grade>=90)A

printf("\n優(yōu))

elseif(grade>=80)-

printf("\n良)

elseif(grade>=60)■

printf("\n中,');

else

請輸入期末考試成績:

printf("\n?');49

printf("\n");■

}15

4.4if語句的嵌套

在if語句中又包含一個(gè)或多個(gè)if語句o

一般形式:

if(表達(dá)式1)

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

else語句2

else

if(表達(dá)式3)語句3

else語句4

河南化工取業(yè)學(xué)院2011-11-15

if(x>0)

{if(y>1)

z=1;}。

else/*這個(gè)else部分屬于哪個(gè)if?*1]

z=2;

C語言規(guī)定,每個(gè)else部分總屬于前面最近的那

個(gè)缺少對應(yīng)的else部分的if語句。從最內(nèi)層開始,

else總是與它上面最接近的(未曾配對的)if配對。

避免if與else配對錯(cuò)位的最佳辦法是加大括號,同時(shí),為了便于閱

讀,使用適當(dāng)?shù)目s進(jìn),(只有大括號能保證H和else不錯(cuò)位配對,縮

進(jìn)僅便于閱讀)

提倡使用大括號括起來以避免看起來有二義性。

河南化工取業(yè)學(xué)院2011-11-15

一般格式如下:

if()

if()語句11if()

else語句2J內(nèi)隊(duì)”if()語句1

elseelse

,^內(nèi)嵌ifif()語句2,氐

else語句3,內(nèi)歌比

else語句,

或if()

?耳)語句1}(內(nèi)嵌if)

else

_______________________________語句2_____________

else與if的匹配原則是:一個(gè)else應(yīng)與其之前距

離最近且沒有與其它else配對的if配對。

河南化工取業(yè)學(xué)院2011-11-15

例如:

f—1x<0

已知編一個(gè)程序—輸入

1x>0

X的值,輸出y值。

程序?yàn)椋?/p>

main()

{intx,y;

scanf(“%d\&x);

if(x<0)y=-l;

elseif(x==0)y=0;

elsey=l;

printf("x=%d,y=%d\n”,x,y);

河南化工取業(yè)學(xué)院2011-11-15

或者

if(x>=0)

if(x>0)y=1;

內(nèi)嵌

elsey=0;if

elsey=-1;

-if(X>=0)

若程序?qū)懗桑骸富蛘?/p>

y=-l

if(x!=O)if(x>=0)

if(x>0)y=l;if(x>0)y=1;

else產(chǎn)0;

正確嗎?如何修改?elsey=-1;

正確嗎?如何修改?

2011-11-15

#include<stdio.h>if(x>=0)

main()if(x>0)y=1;

{intx,y;elsey=0;

,i,i

scanf(%dJ&x);elsey=-1;

if(x<0)

y=-1;

elsey=-1;

if(x==O)y=0;if(x!=O)

elsey=1;{if(x>0)y=1;}

printf(l,y=%d\ni,,y);elsey=0;

)

河南化工取業(yè)學(xué)院2011-11-15

例求一個(gè)數(shù)的絕對值

/*ch4_Lc*/

#include<stdio.h>

main()

{intx,y;

printf(nEnteraninteger:n);

scanf(n%df\&x);

y=x;

if(y<o)

y=-y;

printf(n\ninteger:%d—>absolutevalue:%d\n11,x,y);

運(yùn)彳?。篍nteraninteger:-12J

integer:-12->absolutevalue:12

2011-11-15

例輸入兩個(gè)數(shù)并判斷兩數(shù)相等否

/*ch4_2.c*/

#include<stdio.h>

main()

{inta,b;右彳?。篍nterintegera:12J

printf(nEnterintegera:nEnterintegerb:12J

scanf(n%d!\&a);a==b

prmtf(uEnterintegerb:n

nn貶彳丁:Enterintegera:12」

scanf(%d5&b);

if(a==b)Enterintegerb:9J

printf(na==b\nn);a!=b

else

printf(na!=b\nn);

河南化工取業(yè)學(xué)院2011-11-15

例判斷輸入字符種類

/*ch4_3.c*/

#include<stdio.h>

main()

{charc;

printff'Enteracharacter:");

c=getchar();

if(c<0x20)printf(nThecharacterisacontrolcharacter\nn);

elseif(c>-01&&c<-91)printff'Thecharacterisadigit\nn);

elseif(c>='A'&&cv='Z')printf(nThecharacterisacapitalletter\nn);

elseif(c>='a'&&cv='z')printf(nThecharacterisalowerletter\nn);

elseprintf(nThecharacterisothercharacter\nn);

:::運(yùn)行:Enteracharacter:FlJ

Thecharacterisothercharacter'

IIIIU

河南化工取業(yè)學(xué)院2011-11-15

例輸入兩數(shù)并判斷其大小關(guān)系

/*ch4_4.c*/

#include<stdio.h>

main()

{intx,y;運(yùn)行1:Enterintegerx,y:12,23J

printf(uEnterintegerx,y:fX<Y

scanf(n%d,%d!\&x,&y);Enterintegerx,y:12,6J

X>Y

if(x!=y)Enterintegerx,y:12,12J

nH

if(x>y)printf(X>Y\n)X==Y

elseprintf(uX<Y\nH);

else

printf(nX==Y\nn);

}

河南化工取業(yè)學(xué)院2011-11-15

例if(a==b)

x^4f(b==c)

(printf("a==b==c^);

else

printf("a!=b”);

修改:if(a==b)

{if(b==c)

printf(^a==b==c^);

}

else

printf(“a!=b”);

if?else酉己對原貝U:缺?。龝r(shí),else總是和它上面離

它最近的未配對的ifi已對

實(shí)現(xiàn)if?else等罪需茲魯加{}

2011-11-15

例考慮下面程序輸出結(jié)果:

main()

{intx=1009a=105b=20;

intvl=5,v2=0;

if(a<b)

if(b!=15)

結(jié)果:

if(!vl)-1

x=l;

else

if(v2)x=10;

x=-l;

printf(“%d”,x);

河南化工取業(yè)學(xué)院2011-11-15

條件運(yùn)算符

河南化工取業(yè)學(xué)院2011-11-15

條件運(yùn)算符

value=tn,;

)

河南化工取業(yè)學(xué)院2011-11-15

條件運(yùn)算符

?優(yōu)先級:13

?條件運(yùn)算符可嵌套

如x>0?1:(x<0?-1:0)

?結(jié)合方向:自右向左

如a>b?a:c>d?c:d<=>a>b?a:(c>d?c:d)

?各表達(dá)式類型可以不同

例x?七Tb,〃x*0,表達(dá)式值為表達(dá)式值為7b]

x>y?1:1.4//x>y,值為1.0;x<y,值為1?4

a>b?(a+=b):(b=200)

河南化工取業(yè)學(xué)院2011-11-15

條件運(yùn)算符示例

例:

溫馨提示

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

評論

0/150

提交評論