版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第二部分
模塊化程序設(shè)計(jì)2第二部分主要內(nèi)容第一講多分支嵌套結(jié)構(gòu)的實(shí)現(xiàn)第二講循環(huán)嵌套結(jié)構(gòu)的實(shí)現(xiàn)第三講數(shù)據(jù)文件及應(yīng)用第四講指針及應(yīng)用3第一講
多分支嵌套結(jié)構(gòu)的實(shí)現(xiàn)4主要內(nèi)容回顧程序的三種基本結(jié)構(gòu)嵌套結(jié)構(gòu)選擇嵌套結(jié)構(gòu)——if語(yǔ)句深入switch語(yǔ)句應(yīng)用實(shí)例參考§2.2.2§2.3§2.45順序結(jié)構(gòu)選擇結(jié)構(gòu)三種基本結(jié)構(gòu)的示意圖循環(huán)結(jié)構(gòu)6嵌套結(jié)構(gòu)自頂向下,逐步細(xì)化的分析結(jié)果。三種基本結(jié)構(gòu)中的語(yǔ)句組(順序語(yǔ)句組、if分支語(yǔ)句組、else分支語(yǔ)句組、循環(huán)體語(yǔ)句組)可以包含任意結(jié)構(gòu)的語(yǔ)句,從而形成不同的嵌套結(jié)構(gòu)。嵌套結(jié)構(gòu)沒有特定的結(jié)構(gòu)形式,由分析方法自然形成。7選擇嵌套結(jié)構(gòu)——if語(yǔ)句深入if語(yǔ)句的多種結(jié)構(gòu)if和else的匹配原則8if語(yǔ)句的多種結(jié)構(gòu)語(yǔ)句1表達(dá)式語(yǔ)句2真假if(條件表達(dá)式)
語(yǔ)句1else
語(yǔ)句2雙分支結(jié)構(gòu)(復(fù)習(xí))十字路口或直行或右轉(zhuǎn)彎單分支結(jié)構(gòu)十字路口或直行或停選擇嵌套結(jié)構(gòu)多分支結(jié)構(gòu)參考§2.2.29單分支結(jié)構(gòu)if(條件)語(yǔ)句if(m==c)
m=m;elsem=c;if(c!=m)m=c;常見錯(cuò)誤寫法:語(yǔ)句1表達(dá)式真假示例:若m與c相同,m值不變,否則c的值給m正確寫法:?jiǎn)畏种ЫY(jié)構(gòu)示例-求絕對(duì)值#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分析:負(fù)數(shù)求反,正數(shù)跳出編程實(shí)現(xiàn)11選擇嵌套結(jié)構(gòu)在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句--if語(yǔ)句的嵌套參考§
2.2.212完整嵌套結(jié)構(gòu)P39if(條件1)
if(條件2)語(yǔ)句1
else
語(yǔ)句2else
if(條件3)語(yǔ)句3
else
語(yǔ)句4表達(dá)式1表達(dá)式3語(yǔ)句4真假表達(dá)式2語(yǔ)句3語(yǔ)句1語(yǔ)句2真真假假注:條件多以表達(dá)式形式出現(xiàn)if(x<0){y=0;}elseif(x<=15){y=4*x/3;}
else{y=2.5*x-10.5;}13實(shí)例1(多分支)分段計(jì)算水費(fèi)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語(yǔ)句完整程序,上機(jī)調(diào)試!2種嵌套if語(yǔ)句的比較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編程比較結(jié)果!15不對(duì)稱嵌套結(jié)構(gòu)示例:求實(shí)足年齡
sample21_04.cpp
age=sysY-bthY;
if(sysM<bthM)age=age-1;
else
if(sysM==bthM)
if(sysD<bthD) age=age-1;年齡=當(dāng)前年份-生日年份如果生日月份還沒到年齡減一歲否則如果生日月份已到但生日還沒到年齡減一歲age=sysY-bthY;
if(sysM<bthM)age=age-1;else
if((sysM==bthM)&&(sysD<bthD)) age=age-1;用復(fù)雜條件表示:16else和if的匹配if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1else語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句4if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1
elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句4else與最靠近它的、沒有與別的else匹配過的if匹配if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句417改變else和if的配對(duì)改寫下列if語(yǔ)句,使else和第1個(gè)if配對(duì)。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多分支結(jié)構(gòu)if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2……elseif(表達(dá)式n-1)語(yǔ)句n-1else語(yǔ)句n#include<stdio.h>void
main(void){char
cLevel;
int
fScore;
printf("請(qǐng)輸入成績(jī):");
scanf("%d",&fScore); /*輸入成績(jī)*/
if(fScore>100||fScore<0){
printf("\n輸入成績(jī)錯(cuò)誤!");}
elseif(fScore>89) /*分?jǐn)?shù)fScore>=90*/
cLevel='A';
elseif(fScore>79) /*分?jǐn)?shù)90>fScore>=80*/
cLevel='B';
elseif(fScore>69) /*分?jǐn)?shù)80>fScore>=70*/
cLevel='C';
elseif(fScore>59)/*分?jǐn)?shù)70>fScore>=60*/
cLevel='D';
else
cLevel='E';/*分?jǐn)?shù)fScore<60*/
printf("該成績(jī)的等級(jí)為:%c\n",cLevel);}實(shí)例:
輸入百分制成績(jī),按A、B、C、D、E輸出相應(yīng)等級(jí)。#include<stdio.h>main(){int
fScore;charcLevel;
printf("請(qǐng)輸入成績(jī):");
scanf("%d",&fScore);
while(fScore
>100||fScore
<0){printf("\n輸入有誤,請(qǐng)重輸。");
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("成績(jī)是%d,相應(yīng)等級(jí)是%c。",fScore,cLevel);}#include<stdio.h>void
main(void){char
cLevel;
int
fScore;
printf("請(qǐng)輸入成績(jī):");
scanf("%d",&fScore);
if(fScore>100||fScore<0){
printf("\n輸入成績(jī)錯(cuò)誤!");}
elseif(fScore>89)
cLevel='A';
elseif(fScore>79)
cLevel='B';
elseif(fScore>69)
cLevel='C';
elseif(fScore>59)
cLevel='D';
else
cLevel='E';
printf("該成績(jī)等級(jí):%c\n",cLevel);}default:cLevel='E';21switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句段1;break;case常量表達(dá)式2:語(yǔ)句段2;break;....…case常量表達(dá)式n:語(yǔ)句段n;break;default:語(yǔ)句段n+1;}表達(dá)式的值=常量表達(dá)式2的值表達(dá)式語(yǔ)句段1語(yǔ)句段2語(yǔ)句段n語(yǔ)句段n+1表達(dá)式的值=常量表達(dá)式1的值表達(dá)式的值=常量表達(dá)式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語(yǔ)句處理多分支選擇問題,3種情況1、在switch語(yǔ)句的每個(gè)語(yǔ)句段中都使用break語(yǔ)句,但不使用default
switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句段1;break;case常量表達(dá)式2:語(yǔ)句段2;break;....…case常量表達(dá)式n:語(yǔ)句段n;break;
default:語(yǔ)句段n+1;}2、在switch語(yǔ)句的每個(gè)語(yǔ)句段中都使用break語(yǔ)句,并使用default#include<stdio.h>main(){int
fScore;charcLevel;
printf("請(qǐng)輸入學(xué)生成績(jī):");
scanf("%d",&fScore);
while(fScore
>100||fScore
<0){printf("\n輸入有誤,請(qǐng)重輸。");
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("成績(jī)是%d,相應(yīng)等級(jí)是%c。",fScore,cLevel);}default:cLevel='E';
例2-5計(jì)算器程序。問題描述:任意輸入兩個(gè)數(shù),根據(jù)用戶選擇的功能菜單,求出它們的和、差、積、除的結(jié)果。#include<stdio.h>void
main(void){double
dLOper,dROper,dResult; /*存放左右操作數(shù)*/
int
nFun; /*存放運(yùn)算符*/
printf("--------------------------\n"); /*構(gòu)造功能菜單*/
printf("加法運(yùn)算--------1\n");
printf("減法運(yùn)算--------2\n");
printf("除法運(yùn)算--------3\n");
printf("乘法運(yùn)算--------4\n");
printf("--------------------------\n");
printf("請(qǐng)輸入功能選擇:");
scanf("%d",&nFun);
if(nFun>4||nFun<1)
printf("輸入錯(cuò)誤!\n");
else{
printf("請(qǐng)輸入兩個(gè)操作數(shù):");
scanf("%lf%lf",&dLOper,&dROper);/*輸入左右操作數(shù)和運(yùn)算符*/
switch(nFun){
case1:dResult=dLOper+dROper;break;/*加法*/
case2:dResult=dLOper-dROper;break;/*減法*/
case3:if(0.0==dROper){printf("右操作數(shù)不能為0\n");
return;}/*除法*/
else
dResult=dLOper/dROper;break;
default:dResult=dLOper*dROper;/*乘法*/ }
printf("計(jì)算結(jié)果為:%8.3lf\n",dResult);/*輸出結(jié)果*/
}}263、在switch中不使用breakswitch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句段1;case常量表達(dá)式2:語(yǔ)句段2;....…case常量表達(dá)式n:語(yǔ)句段n;default:語(yǔ)句段n+1;}27switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句段1;case常量表達(dá)式2:語(yǔ)句段2;....…case常量表達(dá)式n:語(yǔ)句段n;default:語(yǔ)句段n+1;}表達(dá)式的值=常量表達(dá)式2的值表達(dá)式語(yǔ)句段1語(yǔ)句段2語(yǔ)句段n語(yǔ)句段n+1表達(dá)式的值=常量表達(dá)式1的值表達(dá)式的值=常量表達(dá)式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—計(jì)算的天數(shù)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復(fù)合賦值運(yùn)算符P53days+=31→days=days+31在“=”前加上某些運(yùn)算符——復(fù)合賦值運(yùn)算符C語(yǔ)言可以構(gòu)成復(fù)合運(yùn)算符的有:+-*/%&^|<<>>詳見P53:表3-1雙目復(fù)合運(yùn)算符常用:+=-=*=等自增,自減運(yùn)算單目運(yùn)算符所構(gòu)成的復(fù)合賦值運(yùn)算++自增1--自減1如:i++參與運(yùn)算后,i+1++ii+1后,參與運(yùn)算i--參與運(yùn)算后,i-1--ii-1后,參與運(yùn)算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條件表達(dá)式P39一般形式:表達(dá)式1?表達(dá)式2
:表達(dá)式3值:若“表達(dá)式1”的值為真,則以“表達(dá)式2”為該條件表達(dá)式的值;否則以“表達(dá)式3”為該條件表達(dá)式的值。通常用于賦值語(yǔ)句中,如:days+=isLeap(y)?29:28;if(a>b)max=a;elsemax=b→max=(a>b)?a:b;32Is函數(shù)構(gòu)造判斷函數(shù),返回1或0表示真或假調(diào)用時(shí)通常表示一個(gè)條件,運(yùn)用if語(yǔ)句再作進(jìn)一步處理。判奇數(shù)int
isOdd(intm)判偶數(shù)int
isEven(intm)判閏年int
isLeap(intyear)
33判奇數(shù)
int
isOdd(intm)
{if(m%2==1)return1;elsereturn0;}int
isOdd(intm)
{returnm%2;}34判偶數(shù)
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);}運(yùn)行過程days=20m-1=22010%4!=0且2010%400!=0返回0days=20+28=48days=48+31days=79改為通用程序,從鍵盤輸入年、月、日!37實(shí)例1假設(shè)自動(dòng)售貨機(jī)出售4種商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可樂(cola),售價(jià)分別是每份3.0、2.5、4.0和3.5元。在屏幕上顯示以下菜單當(dāng)用戶輸入編號(hào)1~4,顯示相應(yīng)商品的價(jià)格;輸入0,退出查詢;輸入其他編號(hào),顯示價(jià)格為0。[1]Selectcrisps[2]Selectpopcorn
[3]Selectchocolate[4]Selectcola
[0]Exit上機(jī)編程,調(diào)試實(shí)現(xiàn)!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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026貴州省工業(yè)和備考題庫(kù)化廳所屬事業(yè)單位招聘3人備考題庫(kù)及答案詳解(易錯(cuò)題)
- 增強(qiáng)塑料手糊成型工藝與操作手冊(cè)
- 集成電氣現(xiàn)場(chǎng)服務(wù)與售后保障手冊(cè)
- 體檢中心護(hù)理團(tuán)隊(duì)領(lǐng)導(dǎo)力提升
- 口腔科員工年終總結(jié)范文(3篇)
- 客服入職一個(gè)月年終總結(jié)(3篇)
- 職業(yè)健康風(fēng)險(xiǎn)評(píng)估與員工職業(yè)發(fā)展路徑匹配策略
- 職業(yè)健康師資教學(xué)工具應(yīng)用
- 青島2025年山東青島幼兒師范高等??茖W(xué)校博士長(zhǎng)期招聘90人筆試歷年參考題庫(kù)附帶答案詳解
- 職業(yè)倦怠綜合征的心理干預(yù)方案
- 八年級(jí)地理上冊(cè)《中國(guó)的氣候》探究式教學(xué)設(shè)計(jì)
- 重慶市2026年高一(上)期末聯(lián)合檢測(cè)(康德卷)化學(xué)+答案
- 2026年湖南郴州市百??毓杉瘓F(tuán)有限公司招聘9人備考考試題庫(kù)及答案解析
- 2026貴州黔東南州公安局面向社會(huì)招聘警務(wù)輔助人員37人考試備考題庫(kù)及答案解析
- 鐵路除草作業(yè)方案范本
- 2026屆江蘇省常州市生物高一第一學(xué)期期末檢測(cè)試題含解析
- 2026年及未來5年市場(chǎng)數(shù)據(jù)中國(guó)高溫工業(yè)熱泵行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)與投資戰(zhàn)略咨詢報(bào)告
- 教培機(jī)構(gòu)排課制度規(guī)范
- 2026年檢視問題清單與整改措施(2篇)
- 國(guó)家開放大學(xué)《基礎(chǔ)教育課程改革專題》形考任務(wù)(1-3)試題及答案解析
- 車載HUD產(chǎn)業(yè)發(fā)展趨勢(shì)報(bào)告(2025)-CAICV智能車載光顯示任務(wù)組
評(píng)論
0/150
提交評(píng)論