第3章控制語句_第1頁
第3章控制語句_第2頁
第3章控制語句_第3頁
第3章控制語句_第4頁
第3章控制語句_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章結(jié)構(gòu)化程序設(shè)計

3.1程序設(shè)計概述3.2C++語句3.3順序結(jié)構(gòu)3.4選擇結(jié)構(gòu)3.5循環(huán)結(jié)構(gòu)3.6其它控制語句3.7應(yīng)用舉例3.1程序設(shè)計概述程序是計算機(jī)指令的序列,是用計算機(jī)語言來編寫的,計算機(jī)語言通常被稱為“程序語言”。

程序=數(shù)據(jù)結(jié)構(gòu)+算法對于程序設(shè)計的初學(xué)者來說,首先要學(xué)會設(shè)計一個正確的程序。一個正確的程序通常包括:書寫正確與結(jié)果正確兩個含義。除此之外結(jié)構(gòu)化程度高、可讀性好、可靠性高、便于調(diào)試等。通常一個簡單的程序設(shè)計一般包含以下幾個步驟:1.分析問題,明確要求,建立數(shù)學(xué)模型。2.確定數(shù)據(jù)結(jié)構(gòu)和算法(有窮性、確定性、可執(zhí)行性、有零個或多個輸入、有一個或多個輸出)。,還應(yīng)追求高質(zhì)量:3.選擇語言,編制程序。4.調(diào)試程序。5.整理文檔,編制說明。程序設(shè)計的基本目標(biāo)是用算法對問題的原始數(shù)據(jù)進(jìn)行處理,從而獲得所期望的效果。要做到這一點,就必須要掌握正確的程序設(shè)計方法和技術(shù)。結(jié)構(gòu)化程序設(shè)計方法是公認(rèn)的面向過程編程應(yīng)遵循的基本方法和原則。該方法包括:1.只采用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本的程序控制結(jié)構(gòu)來編制程序,從而使程序具有“單入口和單出口”良好的結(jié)構(gòu);2.程序設(shè)計自頂向下;3.用結(jié)構(gòu)化流程圖表示算法。3.2C++語句

1.聲明語句

聲明語句又稱說明語句,它可以用來對程序中出現(xiàn)的各種名稱進(jìn)行聲明。這些名稱通常是表示變量、常量、函數(shù)、結(jié)構(gòu)、類、對象等實際的標(biāo)識符。如:charch;//聲明和定義char型變量

intcount=1;//聲明、定義和初始化int型變量constdoublePI=3.14159;//聲明、定義和初始化double型變量

形式:表達(dá)式;例如:i++;sum=a+b; cout<<a<<b<<endl;3.控制語句

控制語句用于完成一定的控制功能,以實現(xiàn)程序的各種結(jié)構(gòu)方式。C++語言有9種控制語句,可分為三類:

(1)條件判斷語句:if語句、switch語句

(2)轉(zhuǎn)向語句:break語句、continue語句、goto語句、return語句

(3)循環(huán)語句:for語句、while語句、do-while語句2.表達(dá)式語句4.空語句如:for(m=0;m<1000;m++);形式:

;

作用:當(dāng)程序中某個位置在語法上需要一條語句,而在語義上又不要求執(zhí)行任何動作時,可放上一條空語句。一般適用于在循環(huán)語句中做空循環(huán)體;5.復(fù)合語句

例如:if(x==0){cout<<a;cout<<b;}形式:{ [變量定義]語句組 }作用:當(dāng)程序中某個位置在語法上只允許一條語句,而在語義上要執(zhí)行多條語句才能完成某個操作時,需要使用復(fù)合語句。常出現(xiàn)在選擇、循環(huán)語句中3.3順序結(jié)構(gòu)

順序結(jié)構(gòu):按照語句出現(xiàn)的先后順序依次執(zhí)行。語句1語句2其中的語句可以是輸入/出、表達(dá)式、空或復(fù)合等【例3.1】輸入兩個整數(shù)給變量x和y,然后交換x和y的值。例題任意2個整數(shù)交換#include"iostream.h"voidmain(){intx,y,t;cout<<"輸入xy"<<endl;cin>>x>>y;t=x;x=y;y=t;cout<<x<<y<<endl;}3.4選擇結(jié)構(gòu)

選擇結(jié)構(gòu)是根據(jù)條件的值來判斷程序的流向。C++中,提供兩類選擇控制語句:if語句,實現(xiàn)n分支,要求n個表達(dá)式;switch語句,實現(xiàn)多分支;只用1個表達(dá)式。3.4.1if語句if語句的三種形式:

形式1:if(表達(dá)式)語句

作用:當(dāng)表達(dá)式為真(非0)時,執(zhí)行表達(dá)式后面的語句,否則繞過該語句,而執(zhí)行其后面的語句。#include"iostream.h"voidmain(){intx,y,t;cout<<"輸入xy"<<endl;cin>>x>>y;if(x<y){t=x;x=y;y=t;}//x與y交換cout<<x<<">"<<y<<endl;}程序:【例3.2】已知兩個數(shù)x和y,比較它們的大小,使得x大于y。if(x<y){t=x;x=y;y=t;} cout<<x<<y;形式2:if(表達(dá)式)

語句1else

語句2

作用:當(dāng)表達(dá)式為真(非0)時,執(zhí)行語句1,否則執(zhí)行語句2?!纠?.3】計算分段函數(shù):if(x)y=sin(x)+sqrt(x*x+1);elsey=cos(x)-x*x+3*x;形式3:if(表達(dá)式1)

語句1elseif(表達(dá)式2)

語句2┆elseif(表達(dá)式n)

語句nelse

語句n+1作用:當(dāng)表達(dá)式1的值為true時,執(zhí)行語句1;否則判斷當(dāng)表達(dá)式2的值為true時執(zhí)行語句2;依此類推,若表達(dá)式的值都為false,則執(zhí)行語句n+1。【例3.4】已知成績mark,要求顯示對應(yīng)五級制的評定,評定條件:if(mark>=90)cout<<"優(yōu)"; elseif(80<=mark&&mark<90)cout<<"良"; elseif(70<=mark&&mark<80)cout<<"中";elseif(60<=mark&&mark<70)cout<<"及格"; else cout<<"不及格"; #分析下面程序段是否正確:注意:①

不管有幾個分支,程序執(zhí)行一個分支后,其余分支不再執(zhí)行。②elseif不能寫成elseif。③當(dāng)多分支中有多個表達(dá)式同時滿足,則只執(zhí)行第一個與之匹配的語句。if(mark>=60)cout<<"及格";elseif(mark>=70)cout<<"中";elseif(mark>=80)cout<<"良";elseif(mark>=90)cout<<"優(yōu)";elsecout<<"不及格";if語句的嵌套形式:

if語句的嵌套是指if或else后面的語句本身又是一個if語句。

if(表達(dá)式1)

if(表達(dá)式2)語句1else語句2注意:為了增強(qiáng)程序的可讀性,建議采用鋸齒型的書寫形式。

else始終與它上面的最近的if語句配對,而這個if語句又沒有其它的else與之匹配。如何使之與第一個if配對?如:if(表達(dá)式1)

if(表達(dá)式11)語句11else語句12else語句2已知x,y,z三個數(shù),使得x>y>z??捎靡粋€IF語句和一個嵌套的IF語句實現(xiàn)。if(a>b){if(a>c)max=a;elsemax=c;}else{if(b>c)max=b;elsemax=c;}3.4.2switch語句執(zhí)行順序:當(dāng)表達(dá)式的值與某個常量表達(dá)式的值相等時,則執(zhí)行該常量表達(dá)式后面相應(yīng)的語句,若使用了break,則執(zhí)行完該語句后便退出switch語句;否則,還要依次執(zhí)行其后面的各條語句。若找不到相匹配的常量表達(dá)式,則執(zhí)行default后面的語句。必須為整型或字符型或枚舉型形式:switch(表達(dá)式){case常量表達(dá)式1:語句組1;[break;]case常量表達(dá)式2:語句組2;[break;]

┆case常量表達(dá)式n:語句組n;[break;][default:語句組n+1]}#include<iostream.h>voidmain(){chargrade;cout<<"Inputgradeofscore(a_d):"<<endl;cin>>grade;switch(grade){case'a':cout<<"85__100\n";case'b':cout<<"70__84\n";case'c':cout<<"60__69\n";case'd':cout<<"<60\n";default:cout<<"error\n";}}。根據(jù)考試的等級打印百分制分?jǐn)?shù)程序執(zhí)行結(jié)果,必須加break幾點說明

(1)default語句是可缺省的。(2)switch后面括號中的表達(dá)式只能是整型、字符型或枚舉型表達(dá)式。(3)在各個分支中的break語句起著退出switch語句的作用。(4)case語句起標(biāo)號的作用。標(biāo)號不能重名。(5)可以使多個case語句共用一組語句序列。(6)各個case(包括default)語句的出現(xiàn)次序可以任意。(7)每個case語句中不必用{},而整體的switch結(jié)構(gòu)一定要寫一對花括號{}。(8)switch結(jié)構(gòu)也可以嵌套。根據(jù)考試成績的等級打印出百分制分?jǐn)?shù),允許輸入大寫或小寫字母。

#include<iostream.h>voidmain(){chargrade;cout<<"Inputgradeofscore(a_dorA__D):"<<endl;cin>>grade;switch(grade){case'a':case'A':cout<<"85__100\n";break;case'b':case'B':cout<<"70__84\n";break;case'c':case'C':cout<<"60__69\n";break;case'd':case'D':cout<<"<60\n";break;default:cout<<"error\n";}}switch結(jié)構(gòu)嵌套嵌套結(jié)構(gòu)的case標(biāo)號與外層無關(guān)switch(i){case1:......case2:switch(j){case1:......case2:............}case3:......}for語句for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句具體來說,for語句的執(zhí)行過程如下: (1)先求解表達(dá)式1; (2)求解表達(dá)式2,若為0(假),則結(jié)束循環(huán),并轉(zhuǎn)到(5); (3)若表達(dá)式2為非0(真),則執(zhí)行循環(huán)體,然后求解表達(dá)式3; (4)轉(zhuǎn)回(2); (5)執(zhí)行for語句下面的一個語句。例題求1+2+3+…+100的和#include<iostream>voidmain(){inti,sum=0;for(i=1,i<=100;i++)sum=sum+i;cout<<“sum=”<<sum<<endl;}注意:for語句中的三個表達(dá)式可以部分省略或全部省略,但;不能省略,若省略表達(dá)式2,則表示循環(huán)條件為真。練習(xí)編寫1+3+5+…99編寫1*2*3*…100(注意定義變量類型double)While語句while(表達(dá)式){語句組1}

a=3;while(a<100)a=a+5;cout<<“a=“<<a;當(dāng)循環(huán)語句超過一條時,要用{}將語句組組合在一起。求1+2+3+……+100voidmain(){inti=1,sum=0;//定義變量,初始化while(i<=100)//構(gòu)造循環(huán){sum=sum+i;//循環(huán)體,多次執(zhí)行要用{}】i=i+1;}cout<<“sum=”<<sum<<endl;//輸出結(jié)果}注意:

1、循環(huán)體如果為一個以上的語句,用{}括起。2、循環(huán)體內(nèi)或表達(dá)式中必須有使循環(huán)結(jié)束的條件,即一定有一個循環(huán)變量。for與while的區(qū)別for在語法上更為簡潔,適合用于循環(huán)次數(shù)已定的情況。while比較適合用于循環(huán)次數(shù)不定的時候。一般循環(huán)次數(shù)已定的情況下它們之間可以互相轉(zhuǎn)換用。do-while語句do語句while(表達(dá)式);求1+2+3+….+100voidmain(){inti=1,sum=0;//定義變量,初始化do//構(gòu)造循環(huán){sum=sum+i;//循環(huán)體,多次執(zhí)行i=i+1;}while(i<=100);cout<<“sum=”<<sum<<endl;//輸出結(jié)果}注意:do—while首先執(zhí)行循環(huán)體,然后再判斷表達(dá)式,至少執(zhí)行一次循環(huán)體。當(dāng)?shù)谝淮窝h(huán)表達(dá)式的值為真時,while與do—while的結(jié)果完全一樣,否則結(jié)果不相同。do-while和whiles=7;dos-=2;while(s==0);cout<<“s=”<<s<<endl;5s=7;while(s==0)s-=2;cout<<“s=”<<s<<endl;7其它控制語句

【例3.10】break和continue語句的區(qū)別

for(m=20;m>0;m--){if(m%6==0)break;cout<<m<<““;}18

for(m=20;m>0;m--){if(m%6==0)continue;cout<<m<<“”;}

1.break語句break語句有兩個作用:用于switch語句中,保證多分支情況的正確執(zhí)行;用于循環(huán)語句中,強(qiáng)制終止本層循環(huán)(跳出本層循環(huán))。2.continue語句continue語句的作用:繞過本次循環(huán),強(qiáng)行進(jìn)入下一次循環(huán)。即它只能跳過循環(huán)體中continue后面的語句。注意:

continue只能用于循環(huán)語句goto語句goto語句的語法格式為: goto標(biāo)號; 其中,標(biāo)號是一個用戶自定義的標(biāo)識符,它的命名規(guī)則與變量名的命名規(guī)則相同。定義標(biāo)號時,由一個標(biāo)識符后面跟一個冒號組成。標(biāo)號的位置自由,可位于goto語句的前面,也可位于goto語句的后面,但必須與goto語句共處于同一函數(shù)中。 goto語句的作用是:結(jié)束當(dāng)前正在執(zhí)行的循環(huán)(for、while、do…while)或多路分支(switch)程序結(jié)構(gòu),轉(zhuǎn)而執(zhí)行標(biāo)號所標(biāo)識的語句。 例如:求1加到10的總和。 i=1;sum=0; loop: sum+=i++; if(i<=10) gotoloop; cout<<“thesumis”<<sum<<endl; 濫用goto語句將使程序流程無規(guī)則、可讀性差,現(xiàn)代程序設(shè)計方法主張限制使用goto語句。用goto語句實現(xiàn)的循環(huán)完全可用while或for循環(huán)來表示。一般地,goto語句只在一個地方有使用價值:當(dāng)要從多重循環(huán)深處直接跳轉(zhuǎn)到循環(huán)之外時,如果用break語句,將要用多次,而且可讀性并不好,這時goto可以發(fā)揮作用。

1.最大公約數(shù)

輾轉(zhuǎn)相除法while((r=m%n)!=0){m=n;n=r;}cout<<n;

mnr1252521210用輾轉(zhuǎn)相除法求兩自然數(shù)的最大公約數(shù)。算法思想:(1)對于已知兩數(shù)m,n,使得m>n(2)m除以n得余數(shù)r(3)若r=0,則n為最大公約數(shù),結(jié)束;否則執(zhí)行(4)(4)n→

m,r

n,再重復(fù)執(zhí)行(2)應(yīng)用程序舉例#include"iostream.h"voidmain() {intm,n,t,r;cout<<"請輸入mn:"<<endl;cin>>m>>n;if(m<n){t=m;m=n;n=t;} while((r=m%n)!=0){m=n;n=r;}cout<<“最大公約數(shù)為:"<<n<<endl;}程序:

2.判斷一個數(shù)是素數(shù)#include<iostream.h>intmain(){longm;cout<<"pleaseinputanumber:\n“cin>>minti;for(i=2;i<m;i++)//找m的因數(shù)if(m%i==0){cout<<m<<"isn’tprime.\n”;return1;}cout<<m<<"isprime.\n";}把if語句放在大括弧中會有什么其情況發(fā)生#include<iostream.h>voidmain(){longm;cout<<"pleaseinputanumber:\n";cin>>m;inti;for(i=2;i<m;i++)//找m的因數(shù)if(m%i==0)break;if(m==i)//判斷m是否被小于m的數(shù)整除cout<<m<<"isprime.\n";elsecout<<m<<"isn'tprime.\n";}如果一個數(shù)很大用這種方法速度會變慢,改進(jìn)使用平方根用break語句實現(xiàn)3計算并輸出2~100之間的素數(shù)之和。#include<iostream>usingnamespacestd;

intmain(){ ints=0; inti,j; for(i=2;i<=100;i++)//產(chǎn)生2~100之間的數(shù)i { for(j=2;j<=i-1;j++)//產(chǎn)生除了1和i以外的數(shù) if(i%j==0)break;//發(fā)現(xiàn)i的因子 if(j==i)//2~i-1之間沒有發(fā)現(xiàn)因子,則i是素數(shù) s=s+i;//累加素數(shù) }

cout<<"2到100之間的素數(shù)之和為:"<<s<<endl;

return0;}如果要顯示所有的素數(shù)4輸出如下圖形【程序分析】這是一類圖形輸出的例子。設(shè)計這樣的程序需要抓住內(nèi)外循環(huán)的關(guān)聯(lián)。其中需要找到以下規(guī)律:l

星號前的空格個數(shù)與行數(shù)之間的關(guān)系l

星號個數(shù)與行數(shù)之間的關(guān)系對于本題,行號i從1開始循環(huán)到5,規(guī)律如下:l

星號前的空格個數(shù)為5-i個l

星號個數(shù)為2*i-1個#include<iostream>usingnamespacestd;voidmain(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++) cout<<"";for(j=1;j<=2*i-1;j++) cout<<"*"; cout<<endl;}}5計算s=1×2×3×4×5×6×7×8程序如下:#include<iostream>usingnamespacestd;

intmain(){ doublet=1; for(inti=1;i<=8;i++) t=t*i;

cout<<"8!="<<t<<endl;return0;}6編程求1!+2!+3!+…+15!

#include<iostream.h>voidmain(){doublesum=0,t=1;for(inti=1;i<=15;i++){t*=i;sum+=t;}cout<<"sum="<<sum<<endl;}7.編程求水仙花數(shù),水仙花數(shù)是一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身,如153=13+53+33#include<iostream.h>voidmain(){for(inti=1;i<=9;i++)for(intj=0;j<=9;j++)for(intk=0;k<=9;k++)if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)cout<<(100*i+10*j+k)<<"是水仙花數(shù).\n";}8編程求1000之內(nèi)的所有“完數(shù)”,所謂一個完數(shù)是指一個數(shù)恰好等于它的因子之和。6=1+2+3#include<iostream.h>voidmain(){for(inti=1;i<1000;i+

溫馨提示

  • 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

提交評論