C++程序設(shè)計(jì)基礎(chǔ)教程 第2版 課件 第3章 程序控制_第1頁(yè)
C++程序設(shè)計(jì)基礎(chǔ)教程 第2版 課件 第3章 程序控制_第2頁(yè)
C++程序設(shè)計(jì)基礎(chǔ)教程 第2版 課件 第3章 程序控制_第3頁(yè)
C++程序設(shè)計(jì)基礎(chǔ)教程 第2版 課件 第3章 程序控制_第4頁(yè)
C++程序設(shè)計(jì)基礎(chǔ)教程 第2版 課件 第3章 程序控制_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章程序控制主要內(nèi)容3.1順序結(jié)構(gòu)3.2選擇結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)3.4跳轉(zhuǎn)結(jié)構(gòu)3.5應(yīng)用實(shí)例3.1順序結(jié)構(gòu)自上而下輸入半徑計(jì)算圓的面積輸出圓面積IPO結(jié)構(gòu)3.2選擇結(jié)構(gòu)3.2.1if語(yǔ)句if語(yǔ)句的兩種基本形式:(1)if(表達(dá)式)語(yǔ)句(2)if(表達(dá)式)語(yǔ)句1else語(yǔ)句2【例】使用if語(yǔ)句實(shí)現(xiàn)考試成績(jī)判定。#include<iostream>usingnamespacestd;intmain(){ intscore;//考試成績(jī)

cout<<"請(qǐng)輸入考試成績(jī):"; cin>>score; if(score>=60) { cout<<"及格!"; } else { cout<<"不及格!\n"; } return0;}if多分支結(jié)構(gòu)格式:if(條件1)語(yǔ)句1elseif(條件2)語(yǔ)句2elseif(條件3)語(yǔ)句3…elseif(條件n)語(yǔ)句n[else語(yǔ)句n+1]例:輸入一個(gè)0~100分范圍內(nèi)的一個(gè)成績(jī),顯示相應(yīng)的等級(jí):

90~100—優(yōu)秀;

80~89—良好;

70~79—中等;

60~69—及格;

60分以下—不及格。#include<iostream>usingnamespacestd;intmain(){floatscore;cout<<"請(qǐng)輸入成績(jī):";

cin>>score;if(score<0||score>100)cout<<"成績(jī)必須在0~100之間!";

elseif(score<60)cout<<"不及格"<<endl;elseif(score<70)cout<<"及格"<<endl;elseif(score<80)cout<<“中等"<<endl;elseif(score<90)cout<<“良好"<<endl;elsecout<<“優(yōu)秀"<<endl;return0;}3.2.2嵌套if語(yǔ)句intscore=-50;if(score>=0) if(score<60)cout<<"不及格!";else cout<<"非法數(shù)據(jù)!";intscore=-50;if(score>=0){ if(score<60) cout<<"不及格!";}else cout<<"非法數(shù)據(jù)!";intscore=-50;if(score>=0){ if(score<60) cout<<"不及格!"; else cout<<"非法數(shù)據(jù)!";}解釋一:解釋二:if~else配對(duì)原則:缺省{}時(shí),else總是和它上面、離它最近的、未配對(duì)的if配對(duì)if(……)if(……)if(……)else…...else…...else…...例:if() if()語(yǔ)句1else if()語(yǔ)句2else語(yǔ)句3 {if()語(yǔ)句1}當(dāng)if和else數(shù)目不同時(shí),可以加花括號(hào)來(lái)確定配對(duì)關(guān)系。例考慮下面程序輸出結(jié)果:

intmain(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;cout<<x;return0;}結(jié)果:-1程序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;正確正確-1(x<0)例:有一個(gè)函數(shù)y=0(x=0),編一程序,輸入一個(gè)x值,輸出y值。1(x>0)3.2.3條件運(yùn)算符?:的替代條件運(yùn)算符的語(yǔ)法為:

表達(dá)式1?表達(dá)式2:表達(dá)式3運(yùn)算規(guī)則:先計(jì)算表達(dá)式1的值,如果表達(dá)式1的值為true,那么表達(dá)式2被求值;否則表達(dá)式3被求值。整個(gè)條件表達(dá)式的值就是被求值表達(dá)式(表達(dá)式2或表達(dá)式3)的值。3.1.3條件運(yùn)算符?:的替代doublescore=60.1;boolisPassed=scor<60?false:true;doublescore=60.1;boolisPassed;if(score<60)isPassed=false;elseisPassed=true;等同于3.2.4switch語(yǔ)句switch語(yǔ)句的一般形式為:switch(表達(dá)式){case整型常量表達(dá)式1: 語(yǔ)句組1case整型常量表達(dá)式2: 語(yǔ)句組2 ...case整型常量表達(dá)式n: 語(yǔ)句組ndefault: 語(yǔ)句組n+1}=常量1=常量2=常量n表達(dá)式語(yǔ)句組1語(yǔ)句組2語(yǔ)句組n語(yǔ)句組n+1yyynnn【例3-4】根據(jù)考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段。#include<iostream>usingnamespacestd;intmain(){ chargrade; cin>>grade; switch(grade) { case'A':cout<<"80~100\n"; case'B':cout<<"70~79\n"; case'C':cout<<"60~69\n"; case'D':cout<<"<60\n"; default:cout<<"error\n"; } return0;}【例3-3】根據(jù)考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段。#include<iostream>usingnamespacestd;intmain(){ chargrade; cin>>grade; switch(grade) { case'A':cout<<"80~100\n";break; case'B':cout<<"70~79\n";break; case'C':cout<<"60~69\n";break; case'D':cout<<"<60\n";break; default:cout<<"error\n";break; } return0;}幾點(diǎn)說(shuō)明(1)default語(yǔ)句是可缺省的。(2)switch后面括號(hào)中的表達(dá)式只能是整型、字符型或枚舉型表達(dá)式。(3)在各個(gè)分支中的break語(yǔ)句起著退出switch語(yǔ)句的作用。(4)case語(yǔ)句起標(biāo)號(hào)的作用。標(biāo)號(hào)不能重名。(5)可以使多個(gè)case語(yǔ)句共用一組語(yǔ)句序列。(6)各個(gè)case(包括default)語(yǔ)句的出現(xiàn)次序可以任意。(7)每個(gè)case語(yǔ)句中不必用{},而整體的switch結(jié)構(gòu)一定要寫一對(duì)花括號(hào){}。(8)switch結(jié)構(gòu)也可以嵌套。例intmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}cout<<“a=”<<a<<“,b=”<<b;return0;}運(yùn)行結(jié)果:a=2,b=1思考用switch語(yǔ)句編程,輸入一個(gè)百分制成績(jī),要求輸出成績(jī)等級(jí)'A','B','C','D','E'。90分以上為'A',80~89分為'B',70~79分為'C',60~69分為'D',60分以下為'E'。intmain(){ inta; cout<<"請(qǐng)輸入該學(xué)生的成績(jī):"<<endl; cin>>a; switch(a/10) { case6:cout<<“gradeisD.\n";break; case7:cout<<"gradeisC.\n";break; case8:cout<<"gradeisB.\n";break; case9:case10:cout<<"gradeisA.\n";break; default:cout<<"gradeisE.\n"<<endl; } return0;}【例3-5】根據(jù)年份和月份計(jì)算對(duì)應(yīng)的滿月天數(shù)#include<iostream>usingnamespacestd;intmain(){ intyear,month,days; cout<<"請(qǐng)輸入年份:"; cin>>year; cout<<"請(qǐng)輸入月份:"; cin>>month; switch(month) { case1:case3:case5:case7:case8:case10:case12: days=31;break; case4:case6:case9:case11: days=30;break; case2:if((year%4==0&&(year%100!=0)||(year%400==0)))days=29; elsedays=28; break; } cout<<"對(duì)應(yīng)滿月有"<<days<<"天"<<endl; return0;}3.3.1用while語(yǔ)句構(gòu)成循環(huán)

while語(yǔ)句首先對(duì)表達(dá)式的值進(jìn)行判斷,當(dāng)表達(dá)式為true時(shí),循環(huán)執(zhí)行其中的內(nèi)嵌語(yǔ)句(即循環(huán)體);當(dāng)表達(dá)式的值為false時(shí),不再執(zhí)行循環(huán)體(退出循環(huán)),并從緊跟在while循環(huán)后的第一條語(yǔ)句開始執(zhí)行。其語(yǔ)法格式如下:

while(表達(dá)式)語(yǔ)句3.3循環(huán)結(jié)構(gòu)【例】用while語(yǔ)句計(jì)算1+2+3+…+100。#include<iostream>usingnamespacestd;intmain(){ intsum=0;inti=1; while(i<=100) { sum=sum+i; i++; } cout<<"sum="<<sum<<endl; return0;}特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體說(shuō)明:循環(huán)體有可能一次也不執(zhí)行;循環(huán)體可為任意類型語(yǔ)句;循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用{}下列情況,退出while循環(huán);條件表達(dá)式不成立(為零);循環(huán)體內(nèi)遇break,return,goto;循環(huán)體中一般有使循環(huán)趨向結(jié)束的語(yǔ)句,也有無(wú)限循環(huán),

如while(1)

循環(huán)體;3.3.2do-while語(yǔ)句在while循環(huán)中,循環(huán)條件的測(cè)試是在循環(huán)開始處進(jìn)行的。而do-while循環(huán)卻不同,它對(duì)循環(huán)條件的檢查放在了循環(huán)的尾部。這就意味著,do-while的循環(huán)體至少執(zhí)行一次。具體語(yǔ)法格式如下:

do

語(yǔ)句

while(表達(dá)式);特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式說(shuō)明:至少執(zhí)行一次循環(huán)體do~while可與while相互轉(zhuǎn)化intmain(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);cout<<sum;return0;}intmain(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}cout<<sum;return0;}3.3.3for循環(huán)for語(yǔ)句的一般形式是: for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句它的執(zhí)行過(guò)程如下:

①求解表達(dá)式1。

②求解表達(dá)式2,若其值為true,則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句(即循環(huán)體),然后執(zhí)行第③步;若值為false,則結(jié)束循環(huán),轉(zhuǎn)到第⑤步。

③求解表達(dá)式3。

④轉(zhuǎn)回上面第②步驟繼續(xù)執(zhí)行。

⑤循環(huán)結(jié)束,執(zhí)行緊接for語(yǔ)句后面的其他語(yǔ)句。3.3.3for循環(huán)說(shuō)明

for語(yǔ)句中expr1,expr2,expr3類型任意,都可省略,但他們之間分號(hào);不可省無(wú)限循環(huán):for(;;)

for語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu)【例】用for語(yǔ)句計(jì)算1+2+3+…+100。

#include<iostream>usingnamespacestd;intmain(){ inti,sum; for(i=1,sum=0;i<=100;i++) sum+=i; cout<<"sum="<<sum<<endl; return0;}3.3.4循環(huán)的嵌套例:寫出下列程序的運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;voidmain(){inti(1),a(0);for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}cout<<a<<","<<i<<endl;}運(yùn)行結(jié)果:3,8【例】利用循環(huán)嵌套打印九九乘法表。

99*=81第1個(gè)乘數(shù)i(1~9)第1個(gè)乘數(shù)j(1~9)3.4跳轉(zhuǎn)結(jié)構(gòu)3.4.1break語(yǔ)句兩種用途:(1)用在switch語(yǔ)句中終止某個(gè)case語(yǔ)句。(2)立即結(jié)束當(dāng)前所在層的循環(huán),程序從循環(huán)語(yǔ)句后面的第一個(gè)語(yǔ)句繼續(xù)執(zhí)行。3.4.1break語(yǔ)句功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句。說(shuō)明:break只能終止并跳出最近一層的結(jié)構(gòu)break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中。

expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switchexpr語(yǔ)句組1break;語(yǔ)句組2break;語(yǔ)句組nbreak;語(yǔ)句組break;…...const1const2constndefaultcase【例】青蛙與井——用break終止所在循環(huán)。井深5米,青蛙每次跳2米高,它有兩次機(jī)會(huì),每次可以連跳兩回,兩回所跳的高度可以累加,但跳不出來(lái)就會(huì)被清零,請(qǐng)問(wèn)青蛙能否跳出深井。#include<iostream>usingnamespacestd;intmain(){ intheight; for(inttimes=0;times<2;times++) { intround=0; height=0; while(1) { height+=2; cout<<"當(dāng)前高度:"<<height<<"米"<<endl; if(++round==2)break; } } return0;}3.4.2continue語(yǔ)句功能:結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷。僅用于循環(huán)語(yǔ)句中。expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3【例】漁夫的新一周——用continue終止本次循環(huán)。#include<iostream>usingnamespacestd;intmain(){ intday; for(day=1;day<=7;day++) { if(day%3) continue; cout<<"第"<<day<<"天打魚!\n"; } return0;}3.4.3goto語(yǔ)句功能:無(wú)條件轉(zhuǎn)移語(yǔ)句說(shuō)明(語(yǔ)句標(biāo)號(hào)):不能用整數(shù)作標(biāo)號(hào);只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一;限制使用goto語(yǔ)句;goto語(yǔ)句一般格式:

goto語(yǔ)句標(biāo)號(hào);

….…..標(biāo)號(hào):語(yǔ)句;【例】用if和goto語(yǔ)句構(gòu)成循環(huán),求1+2+3+……+100intmain(){i=1;

sum=0;loopLabel: //標(biāo)號(hào),其命名遵從標(biāo)識(shí)符命名規(guī)則sum+=i++;if(i<=100)gotoloopLabel;

cout<<sum<<endl;

return0;}3.4.4return語(yǔ)句return語(yǔ)句用來(lái)明確地從一個(gè)函數(shù)中返回。ANSIC++標(biāo)準(zhǔn)將它歸入跳轉(zhuǎn)結(jié)構(gòu),因?yàn)樗钩绦蚍祷氐剑刺氐剑┱{(diào)用函數(shù)的地方繼續(xù)執(zhí)行。return帶回的數(shù)值即為函數(shù)的返回值。3.5應(yīng)用實(shí)例【例】百錢買百雞“今雞翁一值錢五,雞母一值錢三,雞雛三值錢一。凡百錢買雞百只,問(wèn):雞翁、母、雛各幾何?”第一次改進(jìn)#include<iostream>usingnamespacestd;intmain(){

intcocks,hens,chickens;

cout<<"公雞\t母雞\t小雞\n";

for(cocks=0;cocks<=20;cocks++)

for(hens=0;hens<=33;hens++)

{chickens=100-cocks-hens;

if(chickens%3==0&&5*cocks+3*hens+chickens/3==100)

cout<<cocks<<"\t"<<hens<<"\t"<<chickens<<endl;

} return0;}#include<iostream>usingnamespacestd;intmain(){intcocks,hens,chickens;cout<<"公雞\t母雞\t小雞\n";for(cocks=0;cocks<=14;cocks++){ if((100-7*cocks)%4==0) {hens=(100-7*cocks)/4; chickens=100–cocks-hens; if(chickens%3==0) cout<<cocks<<"\t"<<hens<<"\t"<<chickens<<endl; }}return0;}3.5應(yīng)用實(shí)例

while(fabs(t)>1e-8){pi=pi+t;n=n+2;s=-s;t=s/n;}8#include<iostream>#include<cmath>#include<iomanip>usingnamespacestd;intmain(){ doubles=0,t=1;

longn=1; intsign=1; while(fabs(t)>1e-8)

{ s+=t;

n+=2; sign*=-1; t=sign/double(n);

} s*=4;cout<<"π="<<setiosflags(ios::fixed)<<setprecision(8)<<s<<endl; return0;}3.5 應(yīng)用實(shí)例【例】判斷正整數(shù)是否為素?cái)?shù)。#include<iostream>#include<cmath>usingnamespacestd;intmain(){ inti,b,x; cout<<"請(qǐng)輸入一個(gè)正整數(shù):\n"; cin>>x; b=sqrt(x);

for(i=2;i<=b;i++) if(x%i==0) break; if(i>=b+1) cout<<x<<"是素?cái)?shù)"; else cout<<x<<"不是素?cái)?shù)"; return0;}常用的I/O流控制符控制符含義dec數(shù)值數(shù)據(jù)采用十進(jìn)制表示hex數(shù)值數(shù)據(jù)采用十六進(jìn)制表示oct數(shù)值數(shù)據(jù)采用八進(jìn)制表示setbase(n)設(shè)置整數(shù)的基數(shù)為n(n只能是16,10,8之一)setiosflags(ios::uppercase)十六進(jìn)制數(shù)大寫輸出setiosflags(ios::lowercase)十

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論