版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
回憶:1、簡單的程序設(shè)計(jì)2、算術(shù)運(yùn)算符和賦值表達(dá)式3、順序程序設(shè)計(jì)第五章選擇結(jié)構(gòu)程序設(shè)計(jì)
主要內(nèi)容5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式5.2邏輯運(yùn)算符和邏輯表達(dá)式5.3if語句5.4switch語句5.5程序舉例
5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式一、關(guān)系運(yùn)算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級(jí)相同〔高)優(yōu)先級(jí)相同〔低)說明:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符關(guān)系表達(dá)式樣例:1、a>b,a+b>b+c,(a=3)>(b=5)2、'a'<'b',(a>b)>(b<c)它們的值是一個(gè)邏輯值,即“真”或“假”。
5.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式
二、關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式接起來的式子,稱關(guān)系表達(dá)式。〔表達(dá)式可以是算術(shù)、關(guān)系、邏輯、賦值和字符表達(dá)式)C語言中沒有專用的邏輯值,1代表真,0代表假關(guān)系表達(dá)式的真值表示:
“a>b”為“真”,其值為1。
5.2邏輯運(yùn)算符和邏輯表達(dá)式一、邏輯運(yùn)算符及其優(yōu)先次序1.&&(邏輯與)相當(dāng)于其他語言中的AND2.||(邏輯或)相當(dāng)于其他語言中的OR3.!(邏輯非)相當(dāng)于其他語言中的NOT例:a&&b假設(shè)a,b為真,那么a&&b為真。a||b假設(shè)a,b之一為真,那么a||b為真。!a假設(shè)a為真,那么!a為假。優(yōu)先次序:!(非)->&&(與)->||(或)邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符邏輯運(yùn)算中:非0為真,0為假;真用1表示,假用0表示。且有:〔a&&!a〕結(jié)果必為0??〔a||!a〕結(jié)果必為1??邏輯運(yùn)算的真值表如下所示:AB!A!BA&&BA||B001100100101011001110011真值表
5.2邏輯運(yùn)算符和邏輯表達(dá)式
二、邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式。邏輯表達(dá)式的值是邏輯量--“真”或“假”。例:設(shè)a=4,b=5:!a值為0a&&b值為1a||b值為1!a||b值為14&&0||2值為1任何非零的數(shù)值被認(rèn)作“真”
5.2邏輯運(yùn)算符和邏輯表達(dá)式
例:5>3&&8<4-!0
自左向右運(yùn)算
1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達(dá)式值為0
5.2邏輯運(yùn)算符和邏輯表達(dá)式
邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都要被執(zhí)行。(1)a&&b&&c只有a為真時(shí),才需要判斷b的值,只有a和b都為真時(shí),才需要判斷c的值。(2)a||b||c只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c例:(m=a>b)&&(n=c>d)當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時(shí),由于“a>b”的值為0,因此m=0,而“n=c>d”不被執(zhí)行,因此n的值不是0而仍保持原值1。
5.2邏輯運(yùn)算符和邏輯表達(dá)式
用邏輯表達(dá)式來表示閏年的條件能被4整除,但不能被100整除。能被4整除,又能被400整除。?答(year%4==0&&year%100!=0)||year%400==0案值為真(1)是閏年,否那么為非閏年。
5.3if語句一、If語句的三種根本形式1、if〔表達(dá)式)語句例:if(x>y)printf(“%d”,x);表達(dá)式語句真(非0)假(0)5.3if語句
2、if(表達(dá)式)語句1else語句2例:
if(x>y)printf(“%d”,x);elseprintf(“%d”,y);
條件
語句1
語句2YN5.3if語句
3、if〔表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3……elseif(表達(dá)式m)語句melse語句n
5.3if語句
例:
if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;
5.3if語句
說明:1、3種形式的if語句中在if后面都有表達(dá)式,一般為邏輯表達(dá)式或關(guān)系表達(dá)式。2、第二,第三種形式的if語句中,在每個(gè)
else前面有一個(gè)分號(hào),整個(gè)語句結(jié)束處有一個(gè)分號(hào)。3、在if和else后面可以只含有一個(gè)內(nèi)嵌的操作語句,也可以由多個(gè)操作語句,此時(shí)用花括號(hào)將幾個(gè)語句括起來成為一個(gè)復(fù)合語句。5.3if語句
例5.1輸入兩個(gè)實(shí)數(shù),按數(shù)值由小到大輸出這兩個(gè)數(shù)。
#include<stdio.h>
voidmain()
{
floata,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{
t=a;
a=b;
b=t;
}
printf("%5.2f,%5.2f\n",a,b);
}
yna>bt=aa=bb=t5.3if語句
例5.2輸入三個(gè)數(shù)a,b,c,要求按由小到大輸出。ifa>b將a和b對(duì)換ifa>c將a和c對(duì)換ifb>c將b和c對(duì)換a>ba>cb>ca和b交換a和c交換c和b交換yyynn5.3if語句
#include<stdio.h>
voidmain()
{
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\n",a,b,c);
}
5.3if語句
二、if語句的嵌套if語句中包含一個(gè)或多個(gè)if語句稱為if語句的嵌套。形式:if() if()
語句1
else
語句2else if()
語句3
else
語句4內(nèi)嵌if5.3if語句
if語句匹配規(guī)那么:else總是與它上面的,最近的,統(tǒng)一復(fù)合語句中的,未配對(duì)的if語句配對(duì)。例:if() if()
語句1else if()
語句2else
語句3例:if() {if()
語句1}else if()
語句2else
語句3當(dāng)if和else數(shù)目不同時(shí),可以加花括號(hào)來確定配對(duì)關(guān)系。if()
if()
語句1else
if()
語句2else
語句3if() {if()
語句1}else
if()
語句2else
語句35.3if語句
-1(x<0)例5.3有一個(gè)函數(shù)y=0(x=0),編一程序,輸入一個(gè)x值,輸出y值。1(x>0)算法1:算法1: 輸入x輸入x 假設(shè)x<0,那么y=-1假設(shè)x<0,那么y=-1 假設(shè)x=0,那么y=0否那么: 假設(shè)x>0,那么y=1假設(shè)x=0,那么y=0 輸出y假設(shè)x>0,那么y=1輸出y
5.3if語句
#include<stdio.h>voidmain(){intx,y;scanf("%d",&x);{
程序段}printf("x=%d,y=%d\n",x,y);}5.3if語句
上例中的程序段有四個(gè),請(qǐng)判斷哪個(gè)是正確的?程序1:程序2:
if(x>0)if(x<=0)y=1;if(x<0)y=-1;elseelsey=0;if(x==0)y=0;elsey=1;elsey=-1;程序3:程序4:
y=-1;y=0;if(x>=0)if(x<=0)if(x>0)y=1;if(x<0)y=-1;elsey=0;elsey=1;正確正確正確5.3if語句
三、條件運(yùn)算符格式:表達(dá)式1?表達(dá)式2∶表達(dá)式3功能:判斷表達(dá)式1的值,如果成立就執(zhí)行表達(dá)式2,否那么就執(zhí)行表達(dá)式3使用場合:假設(shè)在if語句中,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且向同一個(gè)變量賦值時(shí),可以用一個(gè)條件運(yùn)算符來處理。5.3if語句
例:
if(a>b)max=a;elsemax=b;
當(dāng)a>b時(shí)將a的值賦給max,當(dāng)a≤b時(shí)將b的值賦給max,可以看到無論a>b是否滿足,都是向同一個(gè)變量賦值??梢杂孟旅娴臈l件運(yùn)算符來處理:
max=(a>b)?
a:b:5.3if語句
說明:1、條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,假設(shè)為真〔非0)那么求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值。假設(shè)表達(dá)式1的值為假〔0),那么求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。2、條件運(yùn)算符優(yōu)先級(jí)高于賦值,低于關(guān)系和算術(shù)運(yùn)算符。3、條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆薄?、“表達(dá)式2”和“表達(dá)式3”既可以是數(shù)值表達(dá)式,還可以是賦值表達(dá)式或函數(shù)表達(dá)式。5、條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3的類型不同。5.3if語句
例5.4輸入一個(gè)字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。
#include<stdio.h>
voidmain()
{
charch;
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
printf("%c\n",ch);
}
如果字符變量ch的值為大寫字母,那么條件表達(dá)式的值為(ch+32),即相應(yīng)的小寫字母。如ch的值不是大寫字母,那么條件表達(dá)式的值為ch,即不進(jìn)行轉(zhuǎn)換。5.4switch語句switch語句的格式:switch〔表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2…case常量表達(dá)式n:語句ndefault:語句n+1}
5.4switch語句
例:要求按照考試成績的等級(jí)輸出百分制分?jǐn)?shù)段,用switch語句實(shí)現(xiàn):switch〔grade){case'A'∶printf("85~100\n");case'B'∶printf("70~84\n");case'C'∶printf("60~69\n");case'D'∶printf("<60\n");default∶(printf"error\n");}5.4switch語句
說明:1、switch后面括弧內(nèi)的“表達(dá)式”,ANSI標(biāo)準(zhǔn)允許它為任何類型。〔美國國家標(biāo)準(zhǔn)學(xué)會(huì)〕2、當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語句,假設(shè)所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語句。3、每一個(gè)case的常量表達(dá)式的值必須互不相同,否那么就會(huì)出現(xiàn)互相矛盾的現(xiàn)象〔對(duì)表達(dá)式的同一個(gè)值,有兩種或多種執(zhí)行方案)。5.4switch語句
4、case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。如:default:…;case'D':…;case'A':…;5、“case常量表達(dá)式”只是起語句標(biāo)號(hào)作用,并不是在條件判斷。執(zhí)行完一個(gè)case后面的語句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行。條件判斷只發(fā)生在執(zhí)行switch語句時(shí),根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào),從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。應(yīng)該在執(zhí)行一個(gè)case分支后,可以用一個(gè)break語句來終止switch語句的執(zhí)行。6、多個(gè)case可以共用一組執(zhí)行語句。
小結(jié):1、關(guān)系運(yùn)算2、邏輯運(yùn)算3、條件語句—if與條件表達(dá)式4、switch-case練習(xí):當(dāng)i=10;k=10;①j=i*++k;②j=i*k++;③j=i--*++k;④j=--i-k++;⑤j=--i*k++;⑥j=i--+k++;設(shè)a=3,b=4,c=5;intx,y;①a+b>c&&b==c②a||b+c&&b-c③!(a>b)&&!c||1④!(x=a)&&(y=b)&&0⑤!(a+b)+c-1&&b+c/2||1⑥c>=b>=c⑦(a+c==b)==(b+c==a)||(c=b+a)>(a=c+b)作業(yè)練習(xí)答案:
當(dāng)i=10;k=10;①j=i*++k;i=10,j=110,k=11②j=i*k++;i=10,j=100,k=11③j=i--*++k;i=9,j=110,k=11④j=--i-k++;i=9,j=-1,k=11⑤j=--i*k++;i=9,j=90,k=11⑥j=i--+k++;i=9,j=20,k=11
5.5程序舉例例5.5寫程序,判斷某一年是否閏年。 用以下圖來表示判斷閏年的算法。#include<stdio.h>
voidmain()
{
intyear,leap;
scanf("%d",&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)leap=1;
elseleap=0;
}
elseleap=1;
}
elseleap=0;
if(leap)printf("%dis",year);
elseprintf("%disnot",year);
printf("aleapyear.\n");
}if(year%4!=0)leap=0;
elseif(year%100!=0)leap=1;
elseif(year%400!=0)leap=0;
elseleap=1;
運(yùn)行情況:1989↙
1989isnotaleapyear.
2000↙
2000isaleapyear.5.5程序舉例例5.6求ax2+bx+c=0方程的解。根本的算法:①a=0,不是二次方程。②-4ac=0,有兩個(gè)相等實(shí)根。③-4ac>0,有兩個(gè)不等實(shí)根。④-4ac<0,有兩個(gè)共軛復(fù)根。5.5程序舉例
#include<stdio.h>
#include<math.h>
voidmain()
{floata,b,c,disc,x1,x2,realpart,imagpart;
scanf("%f,%f,%f",&a,&b,&c);
printf("theequation");
if(fabs(a)<=1e-6)
printf("isnotaquadratic\\n");
else
{disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("hastwoequalroots:%8.4f\n",-b/(2*a));
5.5程序舉例
elseif(disc>1e-6)
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2);
}
else
{realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("hascomplexroots∶\n");
printf("%8.4f+%8.4fi\n",realpart,imagpart);
printf("%8.4f-%8.4fi\n",realpart,imagpart);
}
}}
5.5程序舉例
例5.7運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程〔s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:s<250km沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每公里每噸貨物的根本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d,那么總運(yùn)費(fèi)f的計(jì)算公式為:f=p*w*s*〔1-d)5.5程序舉例
分析折扣變化的規(guī)律性:折扣的“變化點(diǎn)”都是250的倍數(shù)在橫軸上加一種坐標(biāo)c,c的值為s/250。c代表250的倍數(shù)。c<1,無折扣;1≤c<2,折扣d=2%;2≤c<4,d=5%;4≤c<8,d=8%;8≤c<12,d=10%;c≥12,d=15%。
§5.5程序舉例〔續(xù))#include<stdio.h>
voidmain()
{
intc,s;
floatp,w,d,f;
scanf(“%f,%f,%d”,&p,&w,&s);
if(s>=3000)c=12;
elsec=s/250;
switch(c){
case0:d=0;break;
case1:d=2;break;
case2:case3:d=5;break;
case4:case5:case6:case7:d=8;break;
case8:case9:case10:
case11:d=10;break;
case12:d=15;break;}
f=p*w*s*(1-d/100.0);
printf(“freight=%15.4f\n”,f);
}#include<stdio.h>vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化工產(chǎn)品檢測代理合同模板
- 企業(yè)專用勞動(dòng)合同聘用合同書
- 科技園區(qū)企業(yè)租賃合同模板
- 養(yǎng)老院建設(shè)項(xiàng)目招投標(biāo)文件
- 林業(yè)開發(fā)銑刨機(jī)租賃合同
- 國有企業(yè)知識(shí)管理策略
- 環(huán)保項(xiàng)目內(nèi)部招投標(biāo)管理規(guī)定
- 木結(jié)構(gòu)工程混凝土施工承包合同
- 水果公司宿舍電費(fèi)管理準(zhǔn)則
- 商業(yè)大廈鐵藝施工合同
- 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)師授課評(píng)分表
- 田麥久《運(yùn)動(dòng)訓(xùn)練學(xué)》(第2版)配套題庫(含考研真題)
- 商務(wù)英語教學(xué)課件:unit5 Travel and Visits
- MACD二次綠柱縮短的選股公式.doc
- 尾礦庫閉庫工程施工組織設(shè)計(jì)方案范本
評(píng)論
0/150
提交評(píng)論