《C++程序設(shè)計及項目實踐》 課件 第4、5章 選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)_第1頁
《C++程序設(shè)計及項目實踐》 課件 第4、5章 選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)_第2頁
《C++程序設(shè)計及項目實踐》 課件 第4、5章 選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)_第3頁
《C++程序設(shè)計及項目實踐》 課件 第4、5章 選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)_第4頁
《C++程序設(shè)計及項目實踐》 課件 第4、5章 選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章選擇結(jié)構(gòu)4.1if4.2if-else4.3嵌套4.4條件運(yùn)算符4.5switch1114.1if22if語句的語法結(jié)構(gòu)如下:If(表達(dá)式){語句序列;}表達(dá)式語句塊真假選擇是否執(zhí)行一條路徑使用單獨的if語句。33例:根據(jù)輸入值輸出是否不低于60,若不低于60則輸出“Pass”。01#include<iostream>02usingnamespacestd;03intmain()04{05intscore;06cin>>score;07if(score>=60)08{09cout<<"Pass"<<endl;10}11cout<<"========"<<endl;12return0;13}444.2if-else從兩個可選路徑中選擇一條執(zhí)行采用if-else語句結(jié)構(gòu)。if-else的語法結(jié)構(gòu)如下:if(表達(dá)式){語句序列1;}else{語句序列2;}表達(dá)式語句塊1真假語句塊255例:根據(jù)輸入值和60的比較,若不低于60則輸出“Pass”,否則輸出“Fail”。01#include<iostream>02usingnamespacestd;03intmain()04{05intscore;06cin>>score;07if(score>=60)08{09cout<<"Pass"<<endl;10cout<<"Exceedingthequalifiedline:"<<score-60<<endl;11}12else13{14cout<<"Fail"<<endl;15cout<<"Belowthequalifiedline:"<<60-score<<endl;16}17cout<<"========"<<endl;18return0;19}664.3嵌套當(dāng)從多個可執(zhí)行路徑中選擇一個執(zhí)行的時候,就需要將if語句進(jìn)行有機(jī)嵌套組合可以在一個外圍if-else語句內(nèi)嵌套if-else語句,既可以嵌套在外圍if-else語句內(nèi)的if語句塊部分,也可以嵌套在外圍if-else語句內(nèi)的else語句塊部分。77嵌入在外圍if-else語句else部分的代碼如下:if(表達(dá)式1){語句序列1;}else{if(布爾表達(dá)式2){

語句序列2;}else{

語句序列3;}}表達(dá)式1真假表達(dá)式2語句塊1語句塊2語句塊3真假88判斷條件與執(zhí)行路徑對應(yīng)關(guān)系布爾表達(dá)式1布爾表達(dá)式2執(zhí)行路徑true/語句序列1falsetrue語句序列2falsefalse語句序列399例:根據(jù)分?jǐn)?shù)輸出”Good“,”Pass“,”Fail“,規(guī)則為:80分以上為Good,60分以上80分以下為Pass,60分以下為Fail。01#include<iostream>02usingnamespacestd;03intmain()04{05intscore;06cin>>score;07if(score>=80)08{09cout<<"Good"<<endl;10}11else12{13if(score>=60)14{15cout<<"Pass"<<endl;16}17else18{19cout<<"Fail"<<endl;20}21}22return0;23}1010內(nèi)部if-else也可以嵌入到外圍if-else語句的if分支中。if(布爾表達(dá)式1){if(布爾表達(dá)式2){

語句序列1;}else{

語句序列2;}}else{語句序列3;}表達(dá)式1真假表達(dá)式2語句塊1語句塊2語句塊3真假11判斷條件與執(zhí)行路徑對應(yīng)關(guān)系布爾表達(dá)式1布爾表達(dá)式2執(zhí)行路徑truetrue語句序列1truefalse語句序列2false/語句序列31212可以將例4.3的求解用這種結(jié)構(gòu)的if語句來實現(xiàn)。01#include<iostream>02usingnamespacestd;03intmain()04{05intscore;06cin>>score;07if(score>=60)08{09if(score>=80)10{11cout<<"Good"<<endl;12}13else14{15cout<<"Pass"<<endl;16}17}18else19{20cout<<"Fail"<<endl;21}22return0;23}134.4條件運(yùn)算符某些情況下,可以用條件運(yùn)算符”?:”來簡化if的運(yùn)算,其語法規(guī)則為:(布爾表達(dá)式1)?表達(dá)式2:表達(dá)式3;表達(dá)式1表達(dá)式2真假表達(dá)式314例:根據(jù)輸入的兩個數(shù)輸出較大的數(shù)程序代碼(一):01#include<iostream>02usingnamespacestd;03intmain()04{05inta,b;06cin>>a>>b;07cout<<"Thelargernumberof"<<a<<"and"<<b<<":";08if(a>b)09{10cout<<a<<endl;11}12else13{14cout<<b<<endl;15}16return0;17}1515程序代碼(二):01#include<iostream>02usingnamespacestd;03intmain()04{05inta,b;06cin>>a>>b;07cout<<"Thelargernumberof"<<a<<"and"<<b<<":";08intc=(a>b)?a:b;09cout<<c<<endl;10return0;11}164.5switch從多個可選路徑中選擇一條路徑執(zhí)行可以使用if-else的嵌套結(jié)構(gòu)實現(xiàn),在某些情況下,使用switch語句實現(xiàn)更簡潔。switch語句語法如下:switch(表達(dá)式){case常量1:

語句序列1; break;case常量2:

語句序列2; break;…case常量n:

語句序列n; break;default:

語句序列n+1; break;}==常量1表達(dá)式語句序列1break==常量2語句序列2break==常量n語句序列nbreak==default語句序列n+1break17例:根據(jù)輸入的數(shù)值判斷等級,60分以下為Fail,60~69為Pass,70~79為Medium,80~89為Good,90~100為Excellent。程序代碼(一):01#include<iostream>02usingnamespacestd;03intmain()04{05intscore;06cout<<"Pleaseinputascore(0~100):";07cin>>score;08inttype=score/10;09switch(type)10{11case10:12cout<<"Excellent"<<endl;13break;14case9:15cout<<"Excellent"<<endl;16break;17case8:18cout<<"Good"<<endl;19break;20case7:21cout<<"Medium"<<endl;22break;23case6:24cout<<"Pass"<<endl;25break;26default:27cout<<"Fail"<<endl;28break;29}30return0;31}1819程序代碼(二):01#include<iostream>02usingnamespacestd;03intmain()04{05intscore;06cout<<"Pleaseinputascore(0~100):";07cin>>score;08inttype=score/10;09switch(type)10{11case10:12case9:13cout<<"Excellent"<<endl;14break;15case8:16cout<<"Good"<<endl;17break;18case7:19cout<<"Medium"<<endl;20break;21case6:22cout<<"Pass"<<endl;23break;24default:25cout<<"Fail"<<endl;26break;27}28return0;29}C++程序設(shè)計及項目實踐20224.5應(yīng)用例4.6

三角形求面積

C++程序設(shè)計及項目實踐212301#include<iostream>02#include<cmath>03#include<iomanip>04usingnamespacestd;05intmain()06{07inta,b,c;08cin>>a>>b>>c;09if(a+b>c&&a+c>b&&b+c>a)10{11doubles=(a+b+c)/2.0;12doublearea=sqrt(s*(s-a)*(s-b)*(s-c));13cout<<setiosflags(ios::fixed)<<setprecision(2)<<area<<endl;14}15else16{17cout<<"itisnotatriangle"<<endl;18}19return0;20}C++程序設(shè)計及項目實踐24例4.7

判斷閏年思路:閏年的判斷滿足一條規(guī)則即可:一是整除400,二是整除4但不能整除100。程序代碼:01#include<iostream>02usingnamespacestd;03intmain()04{05intyear;06cin>>year;07boolisLeap1=(year%4==0)&&(year%100!=0);08boolisLeap2=year%400==0;09boolisLeap=isLeap1||isLeap2;10if(isLeap)11{12cout<<"Theyear"<<year<<"isaleapyear"<<endl;13}14else15{16cout<<"Theyear"<<year<<"isnotaleapyear"<<endl;17}18return0;19}C++程序設(shè)計及項目實踐25C++程序設(shè)計及項目實踐27例4.8

分段函數(shù)求解

思路:根據(jù)x的取值范圍,選擇不同的函數(shù)來定義y。這里需要分三種情況討論,所以可以理解成從三個可執(zhí)行路徑中選擇一個執(zhí)行,由于每一個執(zhí)行路徑的判斷條件不是簡單的常量,所以這里不能采用switch語句,只能用支持多個路徑選擇一個執(zhí)行的嵌套if語句來實現(xiàn)。C++程序設(shè)計及項目實踐2801#include<iostream>02#include<iomanip>03#include<cmath>04usingnamespacestd;05intmain()06{07doublex,y;08cin>>x;09if(x<0)10{11y=x;12}13else14{15if(x<=1)16{17y=x*x;18}19else20{21y=sqrt(x);22}23}24cout<<setiosflags(ios::fixed)<<setprecision(4)<<y<<endl;25return0;26}C++程序設(shè)計及項目實踐29C++程序設(shè)計及項目實踐25思考題輸入1-7之間的整數(shù),要求輸出周一到周日。C++程序設(shè)計及項目實踐第5章 循環(huán)結(jié)構(gòu)

15.1while5.2do-while5.3for5.4嵌套5.5break5.6continue5.7應(yīng)用5.8本章小結(jié)C++程序設(shè)計及項目實踐2第5章 循環(huán)結(jié)構(gòu)

順序結(jié)構(gòu)和選擇結(jié)構(gòu)的程序執(zhí)行時候的特點是從從前向后執(zhí)行,可以選擇不執(zhí)行某些語句,或者從多個可執(zhí)行路徑中選擇一個執(zhí)行,但它們均不會回頭執(zhí)行之前已經(jīng)執(zhí)行過的語句。在某些情況下,程序可能會需要重復(fù)執(zhí)行以前執(zhí)行過的語句,這就需要循環(huán)結(jié)構(gòu)的程序了。C++程序設(shè)計及項目實踐35.1whilewhile語句的語法如下:while(表達(dá)式){

語句序列;}

程序執(zhí)行while語句時,首先判斷while(布爾表達(dá)式)中布爾表達(dá)式值的真假,若為假(false),則跳過while語句,執(zhí)行while語句的下一條語句;布爾表達(dá)式若為真(true),則進(jìn)入while語句內(nèi)部,執(zhí)行其中的語句序列,執(zhí)行完后,再回到while(布爾表達(dá)式)的布爾表達(dá)式的判斷,然后重復(fù)該流程。

一般來說,循環(huán)結(jié)構(gòu)的程序都蘊(yùn)涵內(nèi)在的重復(fù)執(zhí)行的操作,因此,再設(shè)計循環(huán)結(jié)構(gòu)程序時,首先需要回答兩個問題:(1)重復(fù)的操作是什么?(2)控制重復(fù)的因素是什么?

通過這兩個要點可以提煉出循環(huán)的三個要素:(1)循環(huán)重復(fù)執(zhí)行的動作;(2)循環(huán)的起止條件;(3)循環(huán)條件的改變規(guī)則。當(dāng)找到了這三個要素之后,就比較容易編寫循環(huán)結(jié)構(gòu)的程序了。表達(dá)式假真語句塊C++程序設(shè)計及項目實踐4例

輸出5遍“HelloC++”(只用while循環(huán)書寫)思路:通過分析這個問題,可以發(fā)現(xiàn):(1)重復(fù)的操作是輸出”HelloC++”;(2)控制重復(fù)的因素是輸出次數(shù),只要次數(shù)不超過5次就重復(fù)執(zhí)行輸出,否則就不再操作。因此,可以提煉出循環(huán)的三個要素:(1)循環(huán)重復(fù)執(zhí)行的操作為輸出”HelloC++”;(2)循環(huán)次數(shù)從第1次開始,到第5次完成結(jié)束;(3)循環(huán)計次每完成1次輸出增加1次。由此,可以順利地寫出正確的程序。C++程序設(shè)計及項目實踐5例

輸出5遍“HelloC++”(只用while循環(huán)書寫)01#include<iostream>02usingnamespacestd;03intmain()04{05introw=1;06while(row<=5)07{08cout<<"HelloC++"<<endl;09row++;10}11cout<<"row="<<row<<endl;12return0;13}C++程序設(shè)計及項目實踐6例5.3從1到100求和思路:通過分析這個問題,可以發(fā)現(xiàn):(1)重復(fù)的操作是求和,求和必須是將值要保存到唯一的變量空間。(2)控制重復(fù)的因素是求和數(shù)值范圍:從1到100,若該數(shù)不在該范圍內(nèi),則不能再重復(fù)操作。處理的一些求和技術(shù)的小技巧:sum=0;//開始時初始化sumsum=sum+1;sum=sum+2;…sum=sum+n;也就是求和可以用sum=sum+i來表示,然后改變(求和數(shù)值)i依次為1,2,..,n加入到sum中,實現(xiàn)了匯總,也就是控制i的范圍,就控制了可以求和的范圍。可以提煉出該循環(huán)的三個要素:(1)循環(huán)重復(fù)執(zhí)行的操作為sum=sum+i;(2)循環(huán)從求和數(shù)值i=1開始,到i=100完成求和結(jié)束;(3)求和數(shù)值每完成1次求和增加1。C++程序設(shè)計及項目實踐7例5.3從1到100求和01#include<iostream>02usingnamespacestd;03intmain()04{05intn=1,sum=0;06while(n<=100)07{08sum=sum+n;09n++;10}11cout<<sum<<endl;12return0;13}C++程序設(shè)計及項目實踐85.2do-whiledo-while語句如下:do{語句序列;}while(表達(dá)式);表達(dá)式假真語句塊語句執(zhí)行到do-while語句時,先進(jìn)入大括號內(nèi)部執(zhí)行語句序列,執(zhí)行完以后再進(jìn)行while(布爾表達(dá)式)的執(zhí)行,判斷布爾表達(dá)式是否為真,若為真(true),則返回重復(fù)執(zhí)行之前已經(jīng)執(zhí)行過的語句序列,若布爾表達(dá)式為假(false),則結(jié)束do-while語句,進(jìn)入到下一條語句。C++程序設(shè)計及項目實踐9例

從1到100求和思路:通過分析這個問題,可以發(fā)現(xiàn):(1)重復(fù)的操作是求和,求和必須是將值要保存到唯一的變量空間。(2)控制重復(fù)的因素是求和數(shù)值范圍:從1到100,若該數(shù)不在該范圍內(nèi),則不能再重復(fù)操作。處理的一些求和技術(shù)的小技巧:sum=0;//開始時初始化sumsum=sum+1;sum=sum+2;…sum=sum+n;也就是求和可以用sum=sum+i來表示,然后改變(求和數(shù)值)i依次為1,2,..,n加入到sum中,實現(xiàn)了匯總,也就是控制i的范圍,就控制了可以求和的范圍??梢蕴釤挸鲈撗h(huán)的三個要素:(1)循環(huán)重復(fù)執(zhí)行的操作為sum=sum+i;(2)循環(huán)從求和數(shù)值i=1開始,到i=100完成求和結(jié)束;(3)求和數(shù)值每完成1次求和增加1。C++程序設(shè)計及項目實踐10例

從1到100求和01#include<iostream>02usingnamespacestd;03intmain()04{05intn=1,sum=0;06do07{08sum+=n;09n++;10}while(n<=100);11cout<<sum<<endl;12return0;13}C++程序設(shè)計及項目實踐115.3forfor語句的語句如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句序列;}for語句小括號中包括3個表達(dá)式,并用分號隔開。程序執(zhí)行的時候首先執(zhí)行表達(dá)式1,然后判斷表達(dá)式2是否為真(true,非0值),若為真,則執(zhí)行大括號內(nèi)部的語句序列,執(zhí)行完后,執(zhí)行for語句小括號中表達(dá)式3,然后再判斷表達(dá)式2是否為真,若成立,則循環(huán),若表達(dá)式2為假(false,0值),則for語句結(jié)束,進(jìn)入for語句的下一條語句。表達(dá)式2語句塊真假表達(dá)式1表達(dá)式3C++程序設(shè)計及項目實踐12例

從1到100求和思路:通過分析這個問題,可以發(fā)現(xiàn):(1)重復(fù)的操作是求和,求和必須是將值要保存到唯一的變量空間。(2)控制重復(fù)的因素是求和數(shù)值范圍:從1到100,若該數(shù)不在該范圍內(nèi),則不能再重復(fù)操作。處理的一些求和技術(shù)的小技巧:sum=0;//開始時初始化sumsum=sum+1;sum=sum+2;…sum=sum+n;也就是求和可以用sum=sum+i來表示,然后改變(求和數(shù)值)i依次為1,2,..,n加入到sum中,實現(xiàn)了匯總,也就是控制i的范圍,就控制了可以求和的范圍。可以提煉出該循環(huán)的三個要素:(1)循環(huán)重復(fù)執(zhí)行的操作為sum=sum+i;(2)循環(huán)從求和數(shù)值i=1開始,到i=100完成求和結(jié)束;(3)求和數(shù)值每完成1次求和增加1。C++程序設(shè)計及項目實踐13例

從1到100求和01#include<iostream>02usingnamespacestd;03intmain()04{05intsum=0;06for(intn=1;n<=100;n++)07{08sum+=n;09}10cout<<sum<<endl;11return0;12}C++程序設(shè)計及項目實踐145.4嵌套選擇結(jié)構(gòu)中if-else,switch等可以相互嵌套,從而可以構(gòu)造功能更強(qiáng)的程序,循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)之間,循環(huán)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)之間也可以構(gòu)成嵌套結(jié)構(gòu)的程序,從而增強(qiáng)程序的功能。C++程序設(shè)計及項目實踐155.4嵌套5.4.1嵌套選擇5.4.2嵌套判斷C++程序設(shè)計及項目實踐16例

從1到100之間奇數(shù)求和思路:直接對從1到100之間的所有整數(shù)求和的問題之前已經(jīng)求解過了,使用循環(huán)結(jié)構(gòu)即可以容易求解。從1到100之間的數(shù)包含奇數(shù),也包括偶數(shù),所以可以在匯總的程序中,對每個數(shù)字進(jìn)行檢查,若為奇數(shù)則匯總,若為偶數(shù)忽略即可。5.4.1嵌套選擇C++程序設(shè)計及項目實踐175.4.1嵌套選擇例

從1到100之間奇數(shù)求和01#include<iostream>02usingnamespacestd;03intmain()04{05intsum=0;06for(intn=1;n<=100;n++)07{08if(n%2==1)09{10sum+=n;11}12}13cout<<sum<<endl;14return0;15}C++程序設(shè)計及項目實踐18例

求解階乘和S(n)=1!+2!+3!+…+n!思路:分析該計算式,可以發(fā)現(xiàn)S(n)需要對從1到n之間的每一個整數(shù)i分別求階乘,所以需要一個循環(huán)來控制整數(shù)i的范圍,而對于該范圍內(nèi)的每個整數(shù)i而言,需要計算其階乘i!,階乘可以表示成從1累乘到i,所以這又可以用一個循環(huán)實現(xiàn),后一個循環(huán)嵌入在前一個循環(huán)中。5.4.2嵌套循環(huán)C++程序設(shè)計及項目實踐195.4.2嵌套循環(huán)例

求解階乘和S(n)=1!+2!+3!+…+n!01#include<iostream>02usingnamespacestd;03intmain()04{05intn,sum=0;06cin>>n;07for(inti=1;i<=n;i++)08{09inttmp=1;10for(intj=1;j<=i;j++)11{12tmp*=j;13}14sum+=tmp;15}16cout<<sum<<endl;17return0;18}C++程序設(shè)計及項目實踐205.5break在循環(huán)語句執(zhí)行過程中,若需要提前結(jié)束循環(huán),則可以使用break語句。無論在while,do-while,for循環(huán)結(jié)構(gòu)的哪一種語句中,均可以使用break語句提前結(jié)束循環(huán)。(a)while中的break(b)do-while中的break(c)for中的break表達(dá)式…break;…真假表達(dá)式…break;…真假表達(dá)式2…break;…真假表達(dá)式1表達(dá)式3C++程序設(shè)計及項目實踐21例

判斷某數(shù)是否為素數(shù)思路:素數(shù)n只能被1和n自己整除。那這需要檢測從2開始到n-1期間所有數(shù)能否被n整除,只要有一個能被整除,則n就不是素數(shù),只有所有數(shù)都不能被整除,才能最終確定該數(shù)為素數(shù)。5.5breakC++程序設(shè)計及項目實踐22例

判斷某數(shù)是否為素數(shù)01#include<iostream>02usingnamespacestd;03intmain()04{05intn;06cin>>n;07boolis=true;08for(inti=2;i<=n/2;i++)09{10if(n%i==0)11{12is=false;13break;14}15}16if(is==true)17{18cout<<"Yes"<<endl;19}20else21{22cout<<"No"<<endl;23}24return0;25}C++程序設(shè)計及項目實踐235.6continue在循環(huán)結(jié)構(gòu)中,可以用continue語句提前結(jié)束本輪循環(huán),直接進(jìn)入到下一次的循環(huán)。(a)while中的continue(b)do-while中的continue(c)for中的continue表達(dá)式…continue;…真假表達(dá)式…continue;…真假表達(dá)式2…continue;…真假表達(dá)式1表達(dá)式3C++程序設(shè)計及項目實踐24例

對輸入5個正數(shù)求和,若輸入為負(fù)數(shù),則重新輸入。01#include<iostream>02usingnamespacestd;03intmain()04{05intn,sum=0;06for(inti=1;i<=5;i++)07{08cin>>n;09if(n<0)10{11i--;12cout<<"Pleasereinput!"<<endl;13continue;14}15sum+=n;16}17cout<<sum<<endl;18return0;19}C++程序設(shè)計及項目實踐255.7應(yīng)用例1統(tǒng)計輸入字符各類字符個數(shù),分別統(tǒng)計小寫字符,大寫字符,數(shù)字字符,其他字符。01#include<iostream>02#include<cstdio>03usingnamespacestd;04intmain()05{06intln(0),un(0),dn(0),on(0);07charc;08while((c=getchar())!='\n')09{10if(c>='a'&&c<='z')11{12ln++;13continue;14}if(c>='A'&&c<='Z')16{17un++;18continue;19}20if(c>='0'&&c<='9')21{22dn++;23continue;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論