第5章選擇結(jié)構(gòu)程序設(shè)計_第1頁
第5章選擇結(jié)構(gòu)程序設(shè)計_第2頁
第5章選擇結(jié)構(gòu)程序設(shè)計_第3頁
第5章選擇結(jié)構(gòu)程序設(shè)計_第4頁
第5章選擇結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

選擇結(jié)構(gòu)的作用是:檢查人們指定的條件是否滿足,決定在事先給定的兩種操作中選定執(zhí)行其中一種操作要實現(xiàn)選擇結(jié)構(gòu),關(guān)鍵是判定所給的條件是否滿足第4章選擇結(jié)構(gòu)程序設(shè)計P894.1條件判斷4.2用if語句實現(xiàn)選擇結(jié)構(gòu)4.3利用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)4.4程序綜合舉例4.5提高部分第4章選擇結(jié)構(gòu)程序設(shè)計P894.1條件判斷4.1.1條件判斷的含義4.1.2關(guān)系運算符和關(guān)系表達式4.1.3邏輯運算符和邏輯表達式P894.1.1條件判斷的含義P89在現(xiàn)實生活中,需要進行判斷和選擇的情況是很多的如果你在家,我去拜訪你如果考試不及格,要補考如果遇到紅燈,要停車等待周末我們?nèi)ソ加?0歲以上的老年人,入公園免票4.1.1條件判斷的含義P89在現(xiàn)實生活中,需要進行判斷和選擇的情況是很多的條件判斷的結(jié)果是一個邏輯值:“是”或“否”在計算機語言中用“真”和“假”來表示“是”或“否”4.1.1條件判斷的含義P89用選擇結(jié)構(gòu)檢查所指定的條件是否滿足,并根據(jù)判斷的結(jié)果決定執(zhí)行哪種操作。如:if(x>0)printf(”%d”,x);elseprintf(”%d”,-x);

當x為正時,輸出x的值,否則輸出-x4.1.2關(guān)系運算符和關(guān)系表達式“條件”在程序中用一個表達式表示x>0age>=70a+b>cb*b-4*a*c>0’a’<’v’P90關(guān)系運算符4.1.2關(guān)系運算符和關(guān)系表達式“條件”在程序中用一個表達式表示x>0age>=70a+b>cb*b-4*a*c>0’a’<’v’P90關(guān)系表達式4.1.2關(guān)系運算符和關(guān)系表達式P901.關(guān)系運算符及其優(yōu)先次序C語言提供6種關(guān)系運算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)

⑤==(等于)⑥!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)4.1.2關(guān)系運算符和關(guān)系表達式P904.1.2關(guān)系運算符和關(guān)系表達式P90關(guān)系、算術(shù)、賦值運算符的優(yōu)先級算術(shù)運算符(高)賦值運算符(低)關(guān)系運算符4.1.2關(guān)系運算符和關(guān)系表達式P90c>a+b 等效于c>(a+b)a>b==c 等效于(a>b)==ca==b<c 等效于a==(b<c)a=b>c 等效于a=(b>c)4.1.2關(guān)系運算符和關(guān)系表達式P902.關(guān)系表達式用關(guān)系運算符將兩個數(shù)值或數(shù)值表達式連接起來的式子關(guān)系表達式的值是一個邏輯值,即“真”或“假”在C的邏輯運算中,以“1”代表“真”,以“0”代表“假”4.1.2關(guān)系運算符和關(guān)系表達式P902.關(guān)系表達式當a=3,b=2,c=1時a>b的值為“真”,表達式值為1(a>b)==c的值為“真”,表達式值為1b+c>a的值為“假”,表達式值為04.1.3邏輯運算符和邏輯表達式有時判斷的條件是一個復(fù)合的條件:是中國公民,且在18歲以上5門課都及格70歲以上的老人或10歲以下兒童P914.1.3邏輯運算符和邏輯表達式P911.邏輯運算符及其優(yōu)先次序3種邏輯運算符:&&(邏輯與)||(邏輯或)!(邏輯非)&&和||是雙目(元)運算符!是一目(元)運算符4.1.3邏輯運算符和邏輯表達式P91ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假邏輯運算的真值表4.1.3邏輯運算符和邏輯表達式P91邏輯運算符的優(yōu)先次序!→&&→||(!為三者中最高)與其他運算符的優(yōu)先次序!(高)算術(shù)運算符關(guān)系運算符&&和||賦值運算符(低)4.1.3邏輯運算符和邏輯表達式P91(a>b)&&(x>y)可寫成a>b&&x>y(a==b)||(x==y)可寫成a==b||x==y(!a)||(a>b)可寫成!a||a>b4.1.3邏輯運算符和邏輯表達式P912.邏輯表達式用邏輯運算符將關(guān)系表達式或其他邏輯量連接起來的式子4.1.3邏輯運算符和邏輯表達式P91邏輯表達式的值應(yīng)該是邏輯量“真”或“假”編譯系統(tǒng)在表示邏輯運算結(jié)果時以數(shù)值1代表“真”,以0代表“假”但在判斷一個量是否為“真”時以0代表“假”,以非0代表“真”注意:將一個非零的數(shù)值認作為“真”4.1.3邏輯運算符和邏輯表達式P91(1)若a=4,則!a的值為0(2)若a=4,b=5,則a&&b的值為1(3)a和b值分別為4和5,則a||b的值為1(4)a和b值分別為4和5,則!a||b的值為1(5)4&&0||2的值為14.1.3邏輯運算符和邏輯表達式P91修改后的邏輯運算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假011004.1.3邏輯運算符和邏輯表達式P91判別某一年是否閏年,用邏輯表達式表示閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表達式值為1,則閏年;否則為非閏年4.2用if語句實現(xiàn)選擇結(jié)構(gòu)4.2.1用if語句實現(xiàn)選擇結(jié)構(gòu)舉例4.2.2if語句的一般形式4.2.3if語句的使用說明4.2.4使用嵌套的if語句實現(xiàn)多層判斷P954.2.1用if語句實現(xiàn)選擇結(jié)構(gòu)舉例

例4.1輸入兩個學生a和b的成績,輸出其中高的成績。P95解題思路:設(shè)定變量max,將高的成績放在其中如果a大于或等于b,把a的值賦給max

如果b大于a,把b的值賦給max

輸出max4.2.1用if語句實現(xiàn)選擇結(jié)構(gòu)舉例P95#include<stdio.h>voidmain(){ floata,b,max; printf("pleaseenteraandb:"); scanf("%f,%f",&a,&b);

if(a>=b)max=a;

if(b>a)max=b; printf("max=%6.2f\n",max);}max=a真假abmax=b真假b>apleaseenteraandb:67.5,95.5↙max=95.504.2.1用if語句實現(xiàn)選擇結(jié)構(gòu)舉例P95#include<stdio.h>voidmain(){ floata,b,max; printf("pleaseenteraandb:"); scanf("%f,%f",&a,&b);

if(a>=b)max=a;

if(b>a)max=b; printf("max=%6.2f\n",max);}pleaseenteraandb:67.5,95.5↙max=95.50if(a>=b)max=a;elsemax=b;max=a真假abmax=b

例4.2輸入3個成績a,b,c,要求按由高到低的順序輸出。解題思路:可以先用偽代碼寫出算法:ifa<b,a和b對換

(a是a、b中的大者)ifa<c,a和c對換

(a是三者中最大者)ifb<c,b和c對換

(b是三者中次大者)輸出a,b,c的值#include<stdio.h>voidmain(){floata,b,c,t;printf("pleaseentera,b,c:");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("%6.2f,%6.2f,%6.2f\n",a,b,c);}實現(xiàn)a和b的互換實現(xiàn)a和c的互換實現(xiàn)b和c的互換pleaseentera,b,c:73.5,82.5,99↙99.00,82.50,73.504.2.2if語句的一般形式P971.if(表達式)語句if(x>y)printf(”%d”,x);語句非0(真)表達式0(假)4.2.2if語句的一般形式P972.if(表達式)語句1

else語句2if(x>y)printf(”%d”,x);elseprintf(”%d”,y);語句2非0(真)表達式0(假)語句14.2.3if語句的使用說明P971.if(表達式)語句2.if(表達式)語句1

else語句2關(guān)系表達式邏輯表達式if(a==b&&x==y)printf(”a=b,x=y”);4.2.3if語句的使用說明P971.if(表達式)語句2.if(表達式)語句1

else語句2關(guān)系表達式邏輯表達式if(0)printf(”O(jiān).K.”);數(shù)值表達式4.2.3if語句的使用說明P971.if(表達式)語句2.if(表達式)語句1

else語句2關(guān)系表達式邏輯表達式if(x>0)printf(”%f”,x);elseprintf(”%f”,-x);數(shù)值表達式不能丟4.2.3if語句的使用說明P971.if(表達式)語句2.if(表達式)語句1

else語句2關(guān)系表達式邏輯表達式if(x>0)printf(”%f”,x);elseprintf(”%f”,-x);數(shù)值表達式配對4.2.3if語句的使用說明P971.if(表達式)語句2.if(表達式)語句1

else語句2可以是:簡單的語句復(fù)合語句另一個if語句等4.2.3if語句的使用說明P97

例4.3給出三角形的三個邊長,求三角形的面積。解題思路:

構(gòu)成三角形的必要條件是兩邊之和大于第三邊,因此在計算三角形面積之前應(yīng)當進行該條件的判斷#include<stdio.h>#include<math.h>voidmain(){doublea,b,c,s,area;printf("pleaseentera,b,c:");scanf("%lf,%lf,%lf",&a,&b,&c);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\n",area);

}

elseprintf("Itisnotatrilateral.\n");}復(fù)合語句pleaseentera,b,c:2,3,4↙area=2.90pleaseentera,b,c:2,3,6↙Itisnotatrilateral.4.2.4使用嵌套的if語句實現(xiàn)多層判斷有的選擇結(jié)構(gòu)中又包含一個或多個選擇結(jié)構(gòu),這稱為選擇結(jié)構(gòu)的嵌套if語句中可以又包括另一個if語句,這就是if語句的嵌套可以用if語句的嵌套實現(xiàn)嵌套的選擇結(jié)構(gòu)P994.2.4使用嵌套的if語句實現(xiàn)多層判斷一般形式:if()if()語句1else語句2elseif()語句3else語句4P99內(nèi)嵌if4.2.4使用嵌套的if語句實現(xiàn)多層判斷

例4.4為促銷,對購買貨物多的顧客有優(yōu)惠:凡買50件以上的優(yōu)惠5%,買100件以上的優(yōu)惠7.5%,買300件以上的優(yōu)惠10%,買500件以上的優(yōu)惠15%。輸入購買的數(shù)量和單價,輸出應(yīng)付貨款。P994.2.4使用嵌套的if語句實現(xiàn)多層判斷解題思路:關(guān)鍵是寫出判斷貨物折扣的選擇結(jié)構(gòu)應(yīng)付貨款=件數(shù)*單價*(1-優(yōu)惠折扣)P994.2.4使用嵌套的if語句實現(xiàn)多層判斷P99折扣15%真假件數(shù)500件數(shù)300真假折扣10%件數(shù)100真假折扣7.5%件數(shù)50真假折扣5%無折扣#include<stdio.h>#include<math.h>voidmain(){intnumber;doublecost,price,total;printf(“enternumberandprice:");scanf("%d,%lf",&number,&price);

if(number>=500)cost=0.15;

else

if(number>=300)cost=0.10;

else

if(number>=100)cost=0.075;

else

if(number>=50)cost=0.05;

elsecost=0;total=number*price*(1-cost);printf(“Total=%10.2f\n”,total);}enternumberandprice:512,821.5↙Total=357516.80

if(number>=500)cost=0.15;

else

if(number>=300)cost=0.10;

else

if(number>=100)cost=0.075;

else

if(number>=50)cost=0.05;

elsecost=0;total=number*price*(1-cost);printf(“Total=%10.2f\n”,total);}enternumberandprice:350,821.5

↙Total=258772.50

if(number>=500)cost=0.15;

else

if(number>=300)cost=0.10;

else

if(number>=100)cost=0.075;

else

if(number>=50)cost=0.05;

elsecost=0;total=number*price*(1-cost);printf(“Total=%10.2f\n”,total);}enternumberandprice:150,821.5

↙Total=113983.13

if(number>=500)cost=0.15;

else

if(number>=300)cost=0.10;

else

if(number>=100)cost=0.075;

else

if(number>=50)cost=0.05;

elsecost=0;total=number*price*(1-cost);printf(“Total=%10.2f\n”,total);}enternumberandprice:20,821.5

↙Total=16430.00else總是與它上面最近的未配對的if配對

if(number>=500)cost=0.15;

else

if(number>=300)cost=0.10;

else

if(number>=100)cost=0.075;

else

if(number>=50)cost=0.05;

elsecost=0;total=number*price*(1-cost);printf(“Total=%10.2f\n”,total);}

if(number>=500)cost=0.15;

else

if(number>=300)cost=0.10;

else

if(number>=100)cost=0.075;

else

if(number>=50)cost=0.05;

elsecost=0;4.3利用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)P103switch語句用來實現(xiàn)多分支選擇結(jié)構(gòu)學生成績分類85分以上為’A’等70~84分為’B’等60~69分為’C’等……人口統(tǒng)計分類

按年齡分為老、中、青、少、兒童4.3利用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)P103switch語句的一般形式:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2

┇case常量表達式n:語句ndefault:語句n+1}不能相同4.3利用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)P103switch(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”);}若grade的值為“A”85~10070~8460~69<60errorbreak;break;break;break;85~1004.3利用switch語句實現(xiàn)多分支選擇結(jié)構(gòu)P103grade輸出85~100‘A’‘B’輸出70~84輸出60~69‘C’輸出<60輸出error‘D’其他4.4程序綜合舉例P105例4.6寫程序,判斷某一年是否為閏年。用變量leap代表是否閏年的信息若閏年,令leap=1;非閏年,leap=0最后判斷l(xiāng)eap是否為1(真),若是,則輸出“閏年”信息參見教材圖4.11#include<stdio.h>voidmain() {intyear,leap;printf("enteryear:");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(leap!=0)含義相同#include<stdio.h>voidmain() {intyear,leap;printf("enteryear:");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;else

leap=1;#include<stdio.h>voidmain() {intyear,leap;printf("enteryear:");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&&year%100!=0)||(year%400==0))leap=1;elseleap=0;enteryear:2008↙2008isaleapyear.enteryear:2100↙2100isnotaleapyear.例4.6運輸公司對用戶計算運費。運輸距離越遠,單位運費越低。標準如下:s<250沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每噸每千米貨物的基本運費為p,貨物重為w,距離為s,折扣為d總運費f的計算公式為f=p×w×s×(1-d)折扣的變化規(guī)律(參見教材圖4.12):折扣的“變化點”都是250的倍數(shù)在橫軸上加一種坐標c,c的值為s/250c代表250的倍數(shù)當c<1時,表示s<250,無折扣1≤c<2時,表示250≤s<500,折扣d=2%2≤c<4時,d=5%;4≤c<8時,d=8%;8≤c<12時,d=10%;c≥12時,d=15%#include<stdio.h>voidmain(){intc,s;doublep,w,d,f;printf("請輸入單價、重量和距離:");scanf("%lf,%lf,%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:cas

溫馨提示

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

最新文檔

評論

0/150

提交評論