版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 走路視頻課件教學(xué)課件
- 交通運(yùn)輸墊資施工合同
- 企業(yè)財(cái)務(wù)管理與預(yù)算執(zhí)行
- 互聯(lián)網(wǎng)網(wǎng)絡(luò)工程師勞動(dòng)合同范本
- 二手房買賣合同示范
- 個(gè)人住房借款協(xié)議樣本
- IT企業(yè)安全生產(chǎn)管理制度范本
- 個(gè)人租車協(xié)議書節(jié)日購物
- 綠色之旅課件教學(xué)課件
- 人事管理信息化提高效率
- 國家開放大學(xué)《商務(wù)英語3》形考任務(wù)1-8參考答案
- 商檢、法檢、三檢的區(qū)別
- tsg z6002-2010特種設(shè)備焊接操作人員考核細(xì)則
- .運(yùn)維服務(wù)目錄
- 公路工程工地試驗(yàn)室標(biāo)準(zhǔn)化試驗(yàn)檢測項(xiàng)目、參數(shù)檢驗(yàn)頻率一覽表
- 高填方,深挖路塹邊坡和軟基監(jiān)測方案
- 投標(biāo)文件質(zhì)量保證措施
- 應(yīng)用地球化學(xué)元素特征判別沉積環(huán)境
- 培訓(xùn)師授課評分表
- 田麥久《運(yùn)動(dòng)訓(xùn)練學(xué)》(第2版)配套題庫(含考研真題)
- MACD二次綠柱縮短的選股公式.doc
評論
0/150
提交評論