第一講-多分支嵌套結構的實現課件_第1頁
第一講-多分支嵌套結構的實現課件_第2頁
第一講-多分支嵌套結構的實現課件_第3頁
第一講-多分支嵌套結構的實現課件_第4頁
第一講-多分支嵌套結構的實現課件_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第二部分

模塊化程序設計2第二部分主要內容第一講多分支嵌套結構的實現第二講循環嵌套結構的實現第三講數據文件及應用第四講指針及應用3第一講

多分支嵌套結構的實現4主要內容回顧程序的三種基本結構嵌套結構選擇嵌套結構——if語句深入switch語句應用實例參考§2.2.2§2.3§2.45順序結構選擇結構三種基本結構的示意圖循環結構6嵌套結構自頂向下,逐步細化的分析結果。三種基本結構中的語句組(順序語句組、if分支語句組、else分支語句組、循環體語句組)可以包含任意結構的語句,從而形成不同的嵌套結構。嵌套結構沒有特定的結構形式,由分析方法自然形成。7選擇嵌套結構——if語句深入if語句的多種結構if和else的匹配原則8if語句的多種結構語句1表達式語句2真假if(條件表達式)

語句1else

語句2雙分支結構(復習)十字路口或直行或右轉彎單分支結構十字路口或直行或停選擇嵌套結構多分支結構參考§2.2.29單分支結構if(條件)語句if(m==c)

m=m;elsem=c;if(c!=m)m=c;常見錯誤寫法:語句1表達式真假示例:若m與c相同,m值不變,否則c的值給m正確寫法:單分支結構示例-求絕對值#include<stdio.h>int

main(void){intnumber;

printf("Enteranumber:");

scanf("%d",&number);

if(number<0){number=-number;}

printf("Theabsolutevalueis%d.\n",number);return0;}10Enteranumber:10

Theabsolutevalueis10.Enteranumber:-300

Theabsolutevalueis300.sample21_02.cpp分析:負數求反,正數跳出編程實現11選擇嵌套結構在if語句中又包含一個或多個if語句--if語句的嵌套參考§

2.2.212完整嵌套結構P39if(條件1)

if(條件2)語句1

else

語句2else

if(條件3)語句3

else

語句4表達式1表達式3語句4真假表達式2語句3語句1語句2真真假假注:條件多以表達式形式出現if(x<0){y=0;}elseif(x<=15){y=4*x/3;}

else{y=2.5*x-10.5;}13實例1(多分支)分段計算水費sample21_03.cpp#include<stdio.h>int

main(void){doublex,y;

printf("Enterx:");

scanf("%lf",&x);

if(x<0){y=0;}elseif(x<=15){y=4*x/3;}

else{y=2.5*x-10.5;}printf("f(%.2f)=%.2f\n",x,y);return0;}Enterx:-0.5f(-0.50)=0.00Enterx:9.5f(9.50)=12.67Enterx:21.3f(21.30)=42.75寫出If語句完整程序,上機調試!2種嵌套if語句的比較y=x+1x<1y=y=x+21<=x<2y=x+3x>=214if(x<1)y=x+1;elseif(x<2)y=x+2;

elsey=x+3;if(x<2)

if(x<1)y=x+1;

elsey=x+2;elsey=x+3;

x<2x<1y=x+1y=x+2真

假真

y=x+3假假x<1x<2y=x+1y=x+2真

假真

y=x+3編程比較結果!15不對稱嵌套結構示例:求實足年齡

sample21_04.cpp

age=sysY-bthY;

if(sysM<bthM)age=age-1;

else

if(sysM==bthM)

if(sysD<bthD) age=age-1;年齡=當前年份-生日年份如果生日月份還沒到年齡減一歲否則如果生日月份已到但生日還沒到年齡減一歲age=sysY-bthY;

if(sysM<bthM)age=age-1;else

if((sysM==bthM)&&(sysD<bthD)) age=age-1;用復雜條件表示:16else和if的匹配if(表達式1)if(表達式2)語句1else語句2elseif(表達式3)語句3else語句4if(表達式1)if(表達式2)語句1

elseif(表達式3)語句3else語句4else與最靠近它的、沒有與別的else匹配過的if匹配if(表達式1)if(表達式2)語句1elseif(表達式3)語句3else語句417改變else和if的配對改寫下列if語句,使else和第1個if配對。if(x<2)if(x<1)y=x+1;elsey=x+2;if(x<2){if(x<1)y=x+1;}elsey=x+2;if(x<2)if(x<1)y=x+1;

else;elsey=x+2;18多分支結構if(表達式1)語句1elseif(表達式2)語句2……elseif(表達式n-1)語句n-1else語句n#include<stdio.h>void

main(void){char

cLevel;

int

fScore;

printf("請輸入成績:");

scanf("%d",&fScore); /*輸入成績*/

if(fScore>100||fScore<0){

printf("\n輸入成績錯誤!");}

elseif(fScore>89) /*分數fScore>=90*/

cLevel='A';

elseif(fScore>79) /*分數90>fScore>=80*/

cLevel='B';

elseif(fScore>69) /*分數80>fScore>=70*/

cLevel='C';

elseif(fScore>59)/*分數70>fScore>=60*/

cLevel='D';

else

cLevel='E';/*分數fScore<60*/

printf("該成績的等級為:%c\n",cLevel);}實例:

輸入百分制成績,按A、B、C、D、E輸出相應等級。#include<stdio.h>main(){int

fScore;charcLevel;

printf("請輸入成績:");

scanf("%d",&fScore);

while(fScore

>100||fScore

<0){printf("\n輸入有誤,請重輸。");

scanf("%d",&fScore);}

switch(fScore

/10){case10:case9:cLevel

='A';break;case8:cLevel

='B';break;case7:cLevel

='C';break;case6:cLevel

='D';break;case5:case4:case3:case2:case1:case0:cLevel

='E';}

printf("成績是%d,相應等級是%c。",fScore,cLevel);}#include<stdio.h>void

main(void){char

cLevel;

int

fScore;

printf("請輸入成績:");

scanf("%d",&fScore);

if(fScore>100||fScore<0){

printf("\n輸入成績錯誤!");}

elseif(fScore>89)

cLevel='A';

elseif(fScore>79)

cLevel='B';

elseif(fScore>69)

cLevel='C';

elseif(fScore>59)

cLevel='D';

else

cLevel='E';

printf("該成績等級:%c\n",cLevel);}default:cLevel='E';21switch(表達式){case常量表達式1:語句段1;break;case常量表達式2:語句段2;break;....…case常量表達式n:語句段n;break;default:語句段n+1;}表達式的值=常量表達式2的值表達式語句段1語句段2語句段n語句段n+1表達式的值=常量表達式1的值表達式的值=常量表達式n的值其他breakbreakbreakbreakswitch(fScore

/10){case10:case9:cLevel

='A';break;case8:cLevel

='B';break;case7:cLevel

='C';break;case6:cLevel

='D';break;

default:cLevel='E';}22switch語句處理多分支選擇問題,3種情況1、在switch語句的每個語句段中都使用break語句,但不使用default

switch(表達式){case常量表達式1:語句段1;break;case常量表達式2:語句段2;break;....…case常量表達式n:語句段n;break;

default:語句段n+1;}2、在switch語句的每個語句段中都使用break語句,并使用default#include<stdio.h>main(){int

fScore;charcLevel;

printf("請輸入學生成績:");

scanf("%d",&fScore);

while(fScore

>100||fScore

<0){printf("\n輸入有誤,請重輸。");

scanf("%d",&fScore);}

switch(fScore

/10){case10:case9:cLevel

='A';break;case8:cLevel

='B';break;case7:cLevel

='C';break;case6:cLevel

='D';break;case5:case4:case3:case2:case1:case0:cLevel

='E';}

printf("成績是%d,相應等級是%c。",fScore,cLevel);}default:cLevel='E';

例2-5計算器程序。問題描述:任意輸入兩個數,根據用戶選擇的功能菜單,求出它們的和、差、積、除的結果。#include<stdio.h>void

main(void){double

dLOper,dROper,dResult; /*存放左右操作數*/

int

nFun; /*存放運算符*/

printf("--------------------------\n"); /*構造功能菜單*/

printf("加法運算--------1\n");

printf("減法運算--------2\n");

printf("除法運算--------3\n");

printf("乘法運算--------4\n");

printf("--------------------------\n");

printf("請輸入功能選擇:");

scanf("%d",&nFun);

if(nFun>4||nFun<1)

printf("輸入錯誤!\n");

else{

printf("請輸入兩個操作數:");

scanf("%lf%lf",&dLOper,&dROper);/*輸入左右操作數和運算符*/

switch(nFun){

case1:dResult=dLOper+dROper;break;/*加法*/

case2:dResult=dLOper-dROper;break;/*減法*/

case3:if(0.0==dROper){printf("右操作數不能為0\n");

return;}/*除法*/

else

dResult=dLOper/dROper;break;

default:dResult=dLOper*dROper;/*乘法*/ }

printf("計算結果為:%8.3lf\n",dResult);/*輸出結果*/

}}263、在switch中不使用breakswitch(表達式){case常量表達式1:語句段1;case常量表達式2:語句段2;....…case常量表達式n:語句段n;default:語句段n+1;}27switch(表達式){case常量表達式1:語句段1;case常量表達式2:語句段2;....…case常量表達式n:語句段n;default:語句段n+1;}表達式的值=常量表達式2的值表達式語句段1語句段2語句段n語句段n+1表達式的值=常量表達式1的值表達式的值=常量表達式n的值其他fScore=89cLevel

=?switch(fScore/10){case10:case9:cLevel='A';case8:cLevel='B';case7:cLevel='C';case6:cLevel='D';default:cLevel='E';}求某年某月某日是該年的第幾天sample21_14.cpp//y—年,m—月,d—日//days—計算的天數days=d;switch(m-1){case12:days+=31;case11:days+=30;case10:days+=31;case9:days+=30;case8:days+=31;

case7:days+=31;case6:days+=30;case5:days+=31;case4:days+=30;case3:days+=31;case2:days+=isLeap(y)?29:28;case1:days+=31;}

28復合賦值運算符P53days+=31→days=days+31在“=”前加上某些運算符——復合賦值運算符C語言可以構成復合運算符的有:+-*/%&^|<<>>詳見P53:表3-1雙目復合運算符常用:+=-=*=等自增,自減運算單目運算符所構成的復合賦值運算++自增1--自減1如:i++參與運算后,i+1++ii+1后,參與運算i--參與運算后,i-1--ii-1后,參與運算intx=0,y=0,i=1;x=i++;y=++i;printf("x=%d,y=%d,i=%d",x,y,i);x=1,y=3,i=3條件表達式P39一般形式:表達式1?表達式2

:表達式3值:若“表達式1”的值為真,則以“表達式2”為該條件表達式的值;否則以“表達式3”為該條件表達式的值。通常用于賦值語句中,如:days+=isLeap(y)?29:28;if(a>b)max=a;elsemax=b→max=(a>b)?a:b;32Is函數構造判斷函數,返回1或0表示真或假調用時通常表示一個條件,運用if語句再作進一步處理。判奇數int

isOdd(intm)判偶數int

isEven(intm)判閏年int

isLeap(intyear)

33判奇數

int

isOdd(intm)

{if(m%2==1)return1;elsereturn0;}int

isOdd(intm)

{returnm%2;}34判偶數

int

isEven(intm)

{if(m%2==0)return1;elsereturn0;}int

isEven(intm)

{return!(m%2);}35判閏年int

isLeap(intyear){return((year%4==0&&year%100!=0)||year%400==0);}

完整程序:求2010年3月20日是2010年的第幾天#include<stdio.h>int

isLeap(intyear);voidmain(){int

y,m,d,days;y=2010,m=3,d=20;

days=d;switch(m-1){case12:days+=31;case11:days+=30;case10:days+=31;case9:days+=30;case8:days+=31;case7:days+=31;case6:days+=30;case5:days+=31;case4:days+=30;case3:days+=31;

case2:days+=isLeap(y)?29:28;

case1:days+=31;}

printf("days=%d",days);}int

isLeap(intyear){return(year%4==0&&year%100!=0||year%400==0);}運行過程days=20m-1=22010%4!=0且2010%400!=0返回0days=20+28=48days=48+31days=79改為通用程序,從鍵盤輸入年、月、日!37實例1假設自動售貨機出售4種商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可樂(cola),售價分別是每份3.0、2.5、4.0和3.5元。在屏幕上顯示以下菜單當用戶輸入編號1~4,顯示相應商品的價格;輸入0,退出查詢;輸入其他編號,顯示價格為0。[1]Selectcrisps[2]Selectpopcorn

[3]Selectchocolate[4]Selectcola

[0]Exit上機編程,調試實現!38#include<stdio.h>int

main(void){intchoice;doubleprice;printf("[1]Selectcrisps\n");printf("[2]Selectpopcorn\n");printf("[3]Selectchocolate\n");printf("[4]Selectcola\n");printf("[0]exit\n");

printf("Enterchoice:");

scanf("%d",&choice);

if(choice==0)return0;

switch(choice){case1:price=3.0;break;case2:price=2.5;break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;

}

printf("pric

溫馨提示

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

評論

0/150

提交評論