版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++程序設(shè)計(jì)主講:王金湘第三章流程控制語(yǔ)句結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)是任何程序都可由三種根本結(jié)構(gòu)及其組合來(lái)描述。本章將介紹C++選擇結(jié)構(gòu)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的設(shè)計(jì)方法。這兩種結(jié)構(gòu)分別用C++提供的兩類(lèi)流程控制語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句和循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。
所謂流程控制語(yǔ)句,是專(zhuān)門(mén)用來(lái)控制程序執(zhí)行流程的語(yǔ)句,也稱為過(guò)程化語(yǔ)句。在介紹選擇結(jié)構(gòu)語(yǔ)句、循環(huán)語(yǔ)句及其程序設(shè)計(jì)的同時(shí),還將介紹一些常用算法,并通過(guò)實(shí)例實(shí)踐結(jié)構(gòu)化程序設(shè)計(jì)的方法。VC++程序設(shè)計(jì)王金湘3選擇結(jié)構(gòu)程序設(shè)計(jì)對(duì)程序的運(yùn)行流程進(jìn)行控制,主要通過(guò)執(zhí)行專(zhuān)門(mén)用來(lái)控制流程的語(yǔ)句來(lái)實(shí)現(xiàn)。流程控制語(yǔ)句也稱為過(guò)程化語(yǔ)句。選擇結(jié)構(gòu)語(yǔ)句是三種根本流程控制語(yǔ)句之一。C++提供以下三種分支語(yǔ)句:if語(yǔ)句條件運(yùn)算符“?:〞swith語(yǔ)句VC++程序設(shè)計(jì)王金湘4if語(yǔ)句if語(yǔ)句有兩種根本格式為:1、if(<表達(dá)式>)<語(yǔ)句1>2、if(<表達(dá)式>)<語(yǔ)句1>else <語(yǔ)句2>VC++程序設(shè)計(jì)王金湘5if語(yǔ)句【例】輸入一個(gè)年份,判斷是否閏年。算法分析:假定年份為year,閏年的條件是:year%4==0&&year%100!=0||year%400==0。#include<iostream.h>voidmain(){ intyear; cout<<“輸入年份:〞<<endl; cin>>year; if(year%4==0&&year%100!=0||year%400==0) cout<<year<<“是閏年〞<<endl; elsecout<<year<<“不是閏年〞<<endl;}VC++程序設(shè)計(jì)王金湘6分析:讀入三個(gè)數(shù),先求出兩個(gè)數(shù)中較大者,再將該大數(shù)與第三個(gè)數(shù)比較,求出最大數(shù)。#include<iostream.h>voidmain(){inta,b,c,max;cout<<“輸入三個(gè)正數(shù):〞;cin>>a>>b>>c;cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;if(a>b)max=a; elsemax=b;//先求出兩個(gè)數(shù)的較大者if(c>max)cout<<“最大數(shù)為:〞<<c<<endl;//與第三個(gè)數(shù)比較elsecout<<“最大數(shù)為:〞<<max<<endl;}if語(yǔ)句【例】從鍵盤(pán)上輸入三個(gè)整數(shù),輸出其中的最大數(shù)。VC++程序設(shè)計(jì)王金湘7if語(yǔ)句中,如果內(nèi)嵌語(yǔ)句又是if語(yǔ)句,就構(gòu)成了嵌套if語(yǔ)句。if語(yǔ)句可實(shí)現(xiàn)二選一分支,而嵌套if語(yǔ)句那么可以實(shí)現(xiàn)多項(xiàng)選擇一的多路分支情況。嵌套有兩種形式:第一種是嵌套在else分支中:if(<表達(dá)式1>)<語(yǔ)句1>elseif(<表達(dá)式2>)<語(yǔ)句2>elseif…else<語(yǔ)句n>第二種是嵌套在if分支中為:if(<表達(dá)式1>)if(<表達(dá)式2>)<語(yǔ)句1>else<語(yǔ)句2>if語(yǔ)句——嵌套VC++程序設(shè)計(jì)王金湘8//方法1:采用else中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個(gè)正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
if(a>b&&a>c)max=a;
elseif(b>a&&b>c)max=b;
elsemax=c; cout<<"最大數(shù)為:max="<<max;}
if語(yǔ)句【例】用嵌套if語(yǔ)句完成【上例】的任務(wù)。VC++程序設(shè)計(jì)王金湘9//方法2:采用if中嵌套形式#include<iostream.h>voidmain(){
inta,b,c,max; cout<<"輸入三個(gè)正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
if(a>b)if(a>c)max=a; //a>b且a>c
elsemax=c; //a>b且a<c
elseif(b>c)max=b; //a<=b且b>c
elsemax=c; //a<=b且b<c cout<<"最大數(shù)max="<<max;}if語(yǔ)句【例】用嵌套if語(yǔ)句完成【上例】的任務(wù)。VC++程序設(shè)計(jì)王金湘10C++規(guī)定了if和else的“就近配對(duì)〞原那么,即相距最近且還沒(méi)有配對(duì)的一對(duì)if和else首先配對(duì)。按上述規(guī)定,上例第二種嵌套形式中的else應(yīng)與第二個(gè)if配對(duì)。如果根據(jù)程序的邏輯需要改變配對(duì)關(guān)系,那么要將屬于同一層的語(yǔ)句放在一對(duì)“{}〞中。例如第二種嵌套形式中,如果要讓else和第一個(gè)if配對(duì),語(yǔ)句必須寫(xiě)成:if(<表達(dá)式1>){ if(<表達(dá)式2>)<語(yǔ)句1>}else<語(yǔ)句2>else和if的配對(duì)關(guān)系注意:第二種嵌套形式較容易產(chǎn)生邏輯錯(cuò)誤,而第一種形式配對(duì)關(guān)系那么非常明確,因此從程序可讀性角度出發(fā),建議盡量使用第一種嵌套形式。VC++程序設(shè)計(jì)王金湘11請(qǐng)看以下兩個(gè)語(yǔ)句://語(yǔ)句1:if(n%3==0) if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;elsecout<<n<<″是3的倍數(shù)但不是5的倍數(shù)″<<endl;//語(yǔ)句2:if(n%3==0){ if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;} elsecout<<n<<″不是3的倍數(shù)″;兩個(gè)語(yǔ)句的差異只在于一個(gè)“{}〞,但表達(dá)的邏輯關(guān)系卻完全不同。else和if的配對(duì)關(guān)系VC++程序設(shè)計(jì)王金湘12【例】某商場(chǎng)優(yōu)惠活動(dòng)規(guī)定,某種商品單價(jià)為80元,一次購(gòu)置5件以上〔包含5件〕10件以下〔不包含10件〕打9折,一次購(gòu)置10件以上〔包含10件〕打8折。設(shè)計(jì)程序根據(jù)客戶的購(gòu)置量計(jì)算總價(jià)。if語(yǔ)句VC++程序設(shè)計(jì)王金湘13算法輸入購(gòu)置件數(shù)count,設(shè)置單價(jià)price=80(元)根據(jù)count值確定折扣discount;實(shí)際售價(jià)amount=price*count*discount;輸出amount的值。算法細(xì)化:if〔count<5〕discount=1;if〔count>=5&&count<10〕discount=0.9;if〔count>=10〕discount=0.8;VC++程序設(shè)計(jì)王金湘14#include<iostream.h>voidmain(){ floatprice=80,discount,amount; //單價(jià)、折扣、總價(jià) intcount; //購(gòu)置件數(shù) cout<<"輸入購(gòu)置件數(shù):"<<endl; cin>>count; if(count<5)discount=1; elseif(count<10)discount=0.9; elsediscount=0.8; amount=price*count*discount; cout<<"購(gòu)置件數(shù):"<<count<<endl; cout<<"單價(jià):"<<price<<'\t'<<“折扣:〞 <<discount<<endl; cout<<"總價(jià):"<<amount<<endl;}請(qǐng)將該程序在VC++平臺(tái)上運(yùn)行,輸入不同的件數(shù),使程序所有分支都可以被執(zhí)行一次。if語(yǔ)句VC++程序設(shè)計(jì)王金湘15【例】求一元二次方程 ax2+bx+c=0的根。其中系數(shù)a(a≠0)、b、c的值由鍵盤(pán)輸入。分析:輸入系數(shù)a(a≠0)、b、c后, 令delta=b2–4ac,結(jié)果有三種情況:假設(shè)delta=0,方程有兩個(gè)相同實(shí)根;假設(shè)delta>0,方程有兩個(gè)不同實(shí)根;假設(shè)delta<0,方程無(wú)實(shí)根。if語(yǔ)句VC++程序設(shè)計(jì)王金湘16算法輸入系數(shù)a(a≠0)、b、c;令delta=b2–4ac;根據(jù)delta的值求方程的根;輸出方程的根;算法細(xì)化:if〔delta==0〕方程有兩個(gè)相同實(shí)根;計(jì)算…if〔delta>0〕方程有兩個(gè)不同實(shí)根;計(jì)算…if〔delta<0〕方程無(wú)實(shí)根;計(jì)算…VC++程序設(shè)計(jì)王金湘17#include<iostream.h>#include<math.h>voidmain(){
floata,b,c;
floatdelta,x1,x2;
constfloatzero=0.0001;//定義一個(gè)很小的常數(shù)
cout<<"輸入三個(gè)系數(shù)a(a!=0),b,c:"<<endl; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<‘\t’ <<"c="<<c<<endl; delta=b*b-4*a*c;求一元二次方程的根源程序VC++程序設(shè)計(jì)王金湘18 if(fabs(delta)<zero){//絕對(duì)值很小的數(shù)即被認(rèn)為是0 cout<<"方程有兩個(gè)相同實(shí)根:"; cout<<"x1=x2="<<-b/(2*a)<<endl; } elseif(delta>0){ delta=sqrt(delta); x1=(-b+delta)/(2*a); x2=(-b-delta)/(2*a); cout<<"方程有兩個(gè)不同實(shí)根:"; cout<<"x1="<<x1<<'\t'<<"x2=“ <<x2<<endl; }
else //delta<0 cout<<"方程無(wú)實(shí)根!"<<endl;}VC++程序設(shè)計(jì)王金湘19條件運(yùn)算符“?:〞if語(yǔ)句在某些情況下可以用條件運(yùn)算符“?:〞來(lái)簡(jiǎn)化表達(dá)?!?:〞是一個(gè)三元運(yùn)算符,其構(gòu)成的表達(dá)式格式為:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>執(zhí)行邏輯:先計(jì)算表達(dá)式1,假設(shè)其值為真〔或非0〕,那么計(jì)算表達(dá)式2〔不計(jì)算表達(dá)式3〕,并將該值作為整個(gè)表達(dá)式的值;反之,即表達(dá)式1的值為假或?yàn)?,那么計(jì)算表達(dá)式3〔不計(jì)算表達(dá)式2〕,并將該值作為整個(gè)表達(dá)式的值。例如:inta=6,b=7,min=a<b?a:b; min=a<b?++a:++b;min=a<b?a++:b++;//min=6 //min=7a=7b=7//min=6a=7b=7VC++程序設(shè)計(jì)王金湘20switch語(yǔ)句用嵌套if語(yǔ)句可以實(shí)現(xiàn)多項(xiàng)選擇一的情況(選項(xiàng)多的時(shí)候嵌套很復(fù)雜)。另外C++中還提供了一個(gè)switch語(yǔ)句,稱為開(kāi)關(guān)語(yǔ)句,也可以用來(lái)實(shí)現(xiàn)多項(xiàng)選擇一:switch(<表達(dá)式>){case<常量表達(dá)式1>:?<語(yǔ)句序列1>??break;?……case<常量表達(dá)式n>:?<語(yǔ)句序列n>??break;?
?default:<語(yǔ)句序列>?}//該表達(dá)式只能是字符型或整型VC++程序設(shè)計(jì)王金湘21
switch語(yǔ)句格式〔1〕各個(gè)case〔包括default〕分支出現(xiàn)的次序可以任意,但通常將default放在最后?!?〕break語(yǔ)句可選。 如果沒(méi)有break語(yǔ)句,每一個(gè)case分支都只作為開(kāi)關(guān)語(yǔ)句的執(zhí)行入口,執(zhí)行完該分支后,還將接著執(zhí)行其后的所有分支。 因此,為保證邏輯的正確實(shí)現(xiàn),通常每個(gè)case分支都與break語(yǔ)句聯(lián)用?!?〕每個(gè)常量表達(dá)式的取值必須各不相同,否那么將引起歧義。VC++程序設(shè)計(jì)王金湘22〔4〕允許多個(gè)常量表達(dá)式對(duì)應(yīng)同一個(gè)語(yǔ)句序列。例如:charscore;cin>>score;switch(score){case′A′:case′a′: cout<<″e(cuò)xcellent″; break;case′B′:case′b′: cout<<″good″; break;default:cout<<″fair″;}
switch語(yǔ)句格式〔5〕從形式上看,switch語(yǔ)句的可讀性比嵌套if語(yǔ)句好,但不是所有多項(xiàng)選擇一的問(wèn)題都可由開(kāi)關(guān)語(yǔ)句完成,這是因?yàn)殚_(kāi)關(guān)語(yǔ)句中限定了條件表達(dá)式的取值類(lèi)型。VC++程序設(shè)計(jì)王金湘23
switch語(yǔ)句格式VC++程序設(shè)計(jì)王金湘24switch語(yǔ)句例子【例】運(yùn)輸公司對(duì)所運(yùn)貨物實(shí)行分段計(jì)費(fèi)。設(shè)運(yùn)輸里程為s,那么運(yùn)費(fèi)打折情況如下: s<250 不打折扣 250<=s<500 2%折扣 500<=s<1000 5%折扣 1000<=s<2000 8%折扣 2000<=s<3000 10%折扣 3000<=s 15%折扣設(shè)每公里每噸的根本運(yùn)費(fèi)為p,貨物重量為w,折扣為d,那么總運(yùn)費(fèi)f為:f=p*w*s*(1-d)設(shè)計(jì)程序,當(dāng)輸入p、w和s后,計(jì)算運(yùn)費(fèi)f。VC++程序設(shè)計(jì)王金湘25算法1、輸入每噸運(yùn)費(fèi)p、貨物重量w、運(yùn)輸里程s;2、根據(jù)運(yùn)輸里程s計(jì)算折扣d;3、計(jì)算總運(yùn)費(fèi)f=p*w*s*(1-d);4、輸出計(jì)算結(jié)果;算法細(xì)化:根據(jù)運(yùn)輸里程s計(jì)算折扣d分析:如果用switch語(yǔ)句,必須使表達(dá)式符合語(yǔ)法要求,分析發(fā)現(xiàn),里程s的分段點(diǎn)均是250的倍數(shù),因此,將里程s除以250,取整數(shù)商,便得到假設(shè)干整數(shù)值。VC++程序設(shè)計(jì)王金湘26switch(c=s/250){case0:d=0;break;
case1:d=0.02;break;case2:case3:d=0.05;break;case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;default:d=0.15;}s<250 不打折扣250<=s<500 2%折扣500<=s<1000 5%折扣1000<=s<2000 8%折扣2000<=s<3000 10%折扣3000<=s15%折扣VC++程序設(shè)計(jì)王金湘27#include<iostream.h>voidmain(){int
c,s;floatp,w,d,f; cout<<"輸入運(yùn)輸單價(jià)p,重量w和里程s:"<<endl; cin>>p>>w>>s;c=s/250;
switch(c){
case0:d=0;break;
case1:d=0.02;break;
case2:case3:d=0.05;break;
case4:case5:case6:case7:d=0.08;break;
case8:case9:case10:case11:d=0.1;break;
default:d=0.15;} f=p*w*s*(1-d); cout<<"運(yùn)輸單價(jià)為"<<p<<'\t'<<"重量為"<<w<<'\t’ <<"里程為"<<s<<endl; cout<<"折扣為"<<d<<endl; cout<<"運(yùn)費(fèi)為"<<f<<endl;}VC++程序設(shè)計(jì)王金湘28【例】設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)加、減、乘、除運(yùn)算。分析:讀入兩個(gè)操作數(shù)和運(yùn)算符,根據(jù)運(yùn)算符完成相應(yīng)運(yùn)算。#include<iostream.h>voidmain(){floatnum1,num2;charop;cout<<"輸入操作數(shù)1,運(yùn)算符,操作數(shù)2:"<<endl;cin>>num1>>op>>num2;switch(op){
case'+':cout<<num1<<op<<num2<<"="<<num1+num2<<endl;break;case'-':cout<<num1<<op<<num2<<"="<<num1-num2<<endl;break;case'*':cout<<num1<<op<<num2<<"="<<num1*num2<<endl;break;
case'/':cout<<num1<<op<<num2<<"="<<num1/num2<<endl;break;
default:cout<<op<<"是無(wú)效運(yùn)算符!";}}VC++程序設(shè)計(jì)王金湘29循環(huán)控制語(yǔ)句是三種根本流程控制語(yǔ)句之一。C++提供以下三種循環(huán)語(yǔ)句:while語(yǔ)句
do-while語(yǔ)句
for語(yǔ)句循環(huán)結(jié)構(gòu)程序設(shè)計(jì)VC++程序設(shè)計(jì)王金湘30
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
——知識(shí)要點(diǎn)while語(yǔ)句
循環(huán)的嵌套
for語(yǔ)句
do-while語(yǔ)句
VC++程序設(shè)計(jì)王金湘31while語(yǔ)句while語(yǔ)句也稱為當(dāng)循環(huán)。語(yǔ)句格式為:while(<表達(dá)式>) <循環(huán)體語(yǔ)句>
while語(yǔ)句的執(zhí)行流程圖求表達(dá)式的值表達(dá)式值為真?是否執(zhí)行循環(huán)體語(yǔ)句VC++程序設(shè)計(jì)王金湘32while語(yǔ)句【例】求1+2+3+4+…+N的值。N個(gè)連續(xù)整數(shù)相加算法1、設(shè)置變量i用來(lái)放被加數(shù),變量sum用來(lái)放和值,并初始化;2、從第一個(gè)數(shù)開(kāi)始,依次將被加數(shù)賦給i,并進(jìn)行操作sumsum+i;3、輸出sum;細(xì)化算法:
while(還有被加數(shù)){ i=當(dāng)前被加數(shù);
sum+=i;i準(zhǔn)備接受下一個(gè)被加數(shù);
}VC++程序設(shè)計(jì)王金湘33源程序如下:#include<iostream.h>voidmain(){
constintN=10;inti=1,sum=0; //循環(huán)初始條件
while(i<=N){ sum+=i; i++; //修改循環(huán)條件
}cout<<"sum="<<sum<<endl;
}在VC++平臺(tái)上運(yùn)行,試一試是否正確VC++程序設(shè)計(jì)王金湘34while語(yǔ)句注意:在有循環(huán)語(yǔ)句的程序中,通常循環(huán)開(kāi)始前對(duì)循環(huán)條件進(jìn)行初始化;而在循環(huán)體語(yǔ)句中要包含修改循環(huán)條件的語(yǔ)句,否那么循環(huán)將不能終止而陷入死循環(huán)。C++表達(dá)方式靈活,上例中的循環(huán)語(yǔ)句還可以寫(xiě)成:while(i<=N)sum+=i++;或者while(sum+=i++,i<=N);//循環(huán)體為空語(yǔ)句修改程序后在VC++平臺(tái)上運(yùn)行,看是否正確VC++程序設(shè)計(jì)王金湘35do-while語(yǔ)句do-while語(yǔ)句稱為直到循環(huán),格式為:
do
<循環(huán)體語(yǔ)句>
while(<表達(dá)式>
)
否是表達(dá)式的值為真?執(zhí)行循環(huán)體語(yǔ)句求表達(dá)式的值do-while語(yǔ)句的執(zhí)行流程圖VC++程序設(shè)計(jì)王金湘36#include<iostream.h>voidmain(){
inti,sum;
i=1;sum=0;
do{sum=sum+i;i++;}while(i<=100);
cout<<"1到100之和是:"<<sum<<endl;
return;}【例】求1+2+3+…+100的值
定義循環(huán)控制變量i,i=1定義變量sum,sum=0sum=sum+ii++輸出sum的值i<=100VC++程序設(shè)計(jì)王金湘37do-while語(yǔ)句do/while語(yǔ)句和while語(yǔ)句的區(qū)別:多數(shù)情況下可以互相替代。區(qū)別是do/while語(yǔ)句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足;while語(yǔ)句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體。VC++程序設(shè)計(jì)王金湘38for語(yǔ)句for循環(huán)語(yǔ)句的格式為:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)<循環(huán)體語(yǔ)句>for語(yǔ)句的執(zhí)行流程圖否是求表達(dá)式1的值求表達(dá)式2的值表達(dá)式2值為真?執(zhí)行循環(huán)體語(yǔ)句求表達(dá)式3的值VC++程序設(shè)計(jì)王金湘39for語(yǔ)句、while語(yǔ)句、do/while語(yǔ)句實(shí)現(xiàn)相同的功能:1+2+3+4inti=1,sum=0;//循環(huán)初始條件while(i<=4)
{sum+=i;i++;
//修改循環(huán)條件
}inti=1,sum=0;//循環(huán)初始條件do
{ sum+=i; i++;//修改循環(huán)條件
}while(i<=4);for(inti=1,sum=0;i<=4;i++) sum+=i;/*習(xí)慣上:表達(dá)式1:循環(huán)初始條件;表達(dá)式2:循環(huán)終止條件;表達(dá)式3:修改循環(huán)條件*/VC++程序設(shè)計(jì)王金湘40for語(yǔ)句的應(yīng)用for語(yǔ)句的幾點(diǎn)說(shuō)明:1、是先判斷型的,同while語(yǔ)句;2、使用更為靈活:三個(gè)表達(dá)式可以是任意表達(dá)式,因此他們就可以實(shí)現(xiàn)循環(huán)初始化、計(jì)算、修改循環(huán)條件等任務(wù),而不一定非在循環(huán)體中進(jìn)行;如上例:
for(inti=1,sum=0;i<=4;i++)sum+=i;可寫(xiě)成:
for(inti=1,Sum=0;i<=N;Sum+=i,i++);
VC++程序設(shè)計(jì)王金湘41for語(yǔ)句本卷須知:例:計(jì)算1*2+3*4+5*6+…+99*100。
inti,j,sum=0;for(i=1,j=2;i<=99;i=i+2,j=j+2)sum+=i*j;(1)表達(dá)式1、表達(dá)式2、和表達(dá)式3可以是任何類(lèi)型的表達(dá)式。比方說(shuō),這三個(gè)表達(dá)式都可以是逗號(hào)表達(dá)式,即每個(gè)表達(dá)式都可由多個(gè)表達(dá)式組成。逗號(hào)表達(dá)式逗號(hào)表達(dá)式VC++程序設(shè)計(jì)王金湘42#include<iostream.h>voidmain(){inti,sum=0;i=1;for(;i<=100;i++)sum+=i;cout<<sum<<endl;}#include<iostream.h>voidmain(){inti,sum=0;i=1;for(;i<=100;)sum+=i++;
cout<<sum<<endl;}for語(yǔ)句本卷須知:省掉表達(dá)式1,3省掉表達(dá)式1(2)表達(dá)式1、表達(dá)式2、和表達(dá)式3都是任選項(xiàng),可以省掉其中的一個(gè)、兩個(gè)或全部,但其用于間隔的分號(hào)是一個(gè)也不能省的。#include<iostream.h>voidmain(){
inti=1,sum=0;
for(;;){if(i>100)break; sum+=i++;}cout<<sum<<endl;}省掉表達(dá)式1,2,3VC++程序設(shè)計(jì)王金湘43for語(yǔ)句本卷須知:for(a=1;;a++)cout<<a<<endl;(3)表達(dá)式2如果為空那么相當(dāng)于表達(dá)式2的值是真。死循環(huán)!(4)循環(huán)體中的語(yǔ)句可為任意類(lèi)型的C語(yǔ)句。
(5)循環(huán)體可以是空語(yǔ)句。如:for(inti=1,Sum=0;i<=N;Sum+=i,i++);(6)for語(yǔ)句也可以組成多重循環(huán),而且也可以和while語(yǔ)句和do-while語(yǔ)句相互嵌套。
VC++程序設(shè)計(jì)王金湘44
三種循環(huán)可互相嵌套,層數(shù)不限外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉嵌套循環(huán)的執(zhí)行流程:(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}
嵌套循環(huán)的跳轉(zhuǎn)禁止:從外層跳入內(nèi)層跳入同層的另一循環(huán)向上跳轉(zhuǎn)循環(huán)嵌套——循環(huán)體里面又有循環(huán)語(yǔ)句
(4)for(;;){……do{……}while();……while(){……}…...}外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)VC++程序設(shè)計(jì)王金湘45循環(huán)的嵌套【例】打印九九表。打印格式為:*123456789
112243369…991827364554637281嵌套層次一般不超過(guò)3層,以保證可讀性。VC++程序設(shè)計(jì)王金湘46
循環(huán)的嵌套分析:1、計(jì)算機(jī)的輸出是按行進(jìn)行的,因此可以先用一個(gè)循環(huán)語(yǔ)句輸出第一行表頭。2、表中各行數(shù)據(jù)的輸出可以用下面的算法描述:for(i=1;i<10;i++){cout<<i;
//輸出行號(hào)輸出第i行數(shù)據(jù);//Acout<<endl;//準(zhǔn)備輸出下一行
}VC++程序設(shè)計(jì)王金湘473、第A行需要進(jìn)一步細(xì)化。由于第i行數(shù)據(jù)是一組有規(guī)律的數(shù)列,用另一個(gè)變量j來(lái)控制該行輸出的列數(shù),變量的取值從1~i〔即:第i行有i個(gè)數(shù)〕。每個(gè)數(shù)的值是其所在行與列的乘積: for(j=1;j<=i;j++)cout<<i*j;將此語(yǔ)句放到頂層算法的A行即可。
循環(huán)的嵌套VC++程序設(shè)計(jì)王金湘48算法:1、輸出表頭,用一個(gè)循環(huán)語(yǔ)句即可;2、輸出表體://需要循環(huán)嵌套for(i=1;i<10;i++){cout<<i; //輸出行號(hào)
輸出第i行數(shù)據(jù);
//Acout<<endl;//準(zhǔn)備輸出下一行
}3、A行細(xì)化:
for(j=1;j<=i;j++)cout<<i*j;
循環(huán)的嵌套VC++程序設(shè)計(jì)王金湘49#include<iostream.h>voidmain(void){ inti,j; cout<<“*〞; for(i=1;i<10;i++) cout<<i<<“〞;//輸出表頭(乘數(shù)) cout<<‘\n’; for(i=1;i<10;i++){ cout<<i<<“〞; //輸出行號(hào)(被乘數(shù)) for(j=1;j<=i;j++) cout<<i*j<<“〞;cout<<‘\n’;}}循環(huán)嵌套
——打印九九表*123456789
112243369…991827364554637281VC++程序設(shè)計(jì)王金湘50轉(zhuǎn)向語(yǔ)句——控制執(zhí)行順序的語(yǔ)句break語(yǔ)句
continue語(yǔ)句
VC++程序設(shè)計(jì)王金湘51break
語(yǔ)句
break語(yǔ)句只能用在switch語(yǔ)句和循環(huán)語(yǔ)句中,用來(lái)跳出switch語(yǔ)句或提前終止循環(huán),轉(zhuǎn)去執(zhí)行switch語(yǔ)句或循環(huán)語(yǔ)句之后的語(yǔ)句。在for循環(huán)中可以用break結(jié)束循環(huán):
for(;;){ …
if(<表達(dá)式>)break; … }
VC++程序設(shè)計(jì)王金湘52continue
語(yǔ)句continue語(yǔ)句只能用在循環(huán)語(yǔ)句中,用來(lái)終止本次循環(huán)。當(dāng)程序執(zhí)行到continue語(yǔ)句時(shí),將跳過(guò)其后尚未執(zhí)行的循環(huán)體語(yǔ)句,開(kāi)始下一次循環(huán)。下一次循環(huán)是否執(zhí)行仍然取決于循環(huán)條件的判斷。
continue語(yǔ)句與break語(yǔ)句的區(qū)別在于:continue語(yǔ)句結(jié)束的只是本次循環(huán),break
語(yǔ)句結(jié)束的是整個(gè)循環(huán)。
VC++程序設(shè)計(jì)王金湘53例:輸出1~100內(nèi)3的倍數(shù)。分析:設(shè)置整型變量i從1變化到100,依次測(cè)試i是否3的倍數(shù),算法屬于窮舉法。
for(i=1;i<=100;i++){if(i%3!=0)continue;//i不是3的倍數(shù),不輸出,繼續(xù)下一個(gè)i;
輸出i的值;//i是3的倍數(shù)才輸出
}continue
語(yǔ)句VC++程序設(shè)計(jì)王金湘54#include<iostream.h>voidmain(void){inti;for(i=100;i<200;i++){if(i%3!=0)continue; cout<<i<<“〞;}}輸出:102105108112…198continue
語(yǔ)句VC++程序設(shè)計(jì)王金湘55#include<iostream.h>voidmain(void){inti;for(i=100;i<200;i++){if(i%3==0)break; cout<<i<<“〞;}}輸出什么?100101【例1】輸入一段文本,統(tǒng)計(jì)文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之間以空格或跳格或換行符間隔,且文本開(kāi)始沒(méi)有空行。分析:①逐個(gè)讀入文本中的字符,直到讀到一個(gè)輸入結(jié)束符EOF〔如可以用‘#’〕為止。在讀入過(guò)程中,②每讀到一個(gè)非間隔符,ch=ch+1,③每讀到一個(gè)′\n′,line=line+1;④另設(shè)一個(gè)變量isword,讀到字符時(shí)isword=1,讀到間隔符時(shí)isword=0,如果讀到一個(gè)字符而此時(shí)isword值為0時(shí),那么word=word+1。VC++程序設(shè)計(jì)王金湘56#include<iostream.h>voidmain(){ charch;
int nline=0,nword=0,nch=0;
int isword=0;
do{ ch=cin.get();
if(ch=='\n’||ch==‘#’) nline++;
if(ch!=‘’&&ch!=‘\t’&&ch!=‘\n’) //非間隔符 { nch++; isword=1;
if(isword==0)nword++;//之前是間隔 }
else isword=0;//間隔符 }while(ch!='#'); cout<<"行數(shù):"<<nline<<endl; cout<<"單詞數(shù):"<<nword<<endl; cout<<"字符數(shù):"<<nch<<endl;}VC++程序設(shè)計(jì)王金湘57例2:求2~300之間所有素?cái)?shù)求素?cái)?shù)的方法:除自然數(shù)2之外的所有素?cái)?shù)都是奇數(shù),因此,在求300以內(nèi)的所素?cái)?shù)時(shí),只需要從其中的奇數(shù)中尋找;設(shè)x是一個(gè)奇數(shù),判斷x是否素?cái)?shù)時(shí),用3、4...x-1這些自然數(shù)一個(gè)一個(gè)地分別去除x就是一個(gè)簡(jiǎn)單的方法,只要x能被其中任一個(gè)自然數(shù)整除,就證明x不是素?cái)?shù)。而x-1是其中最大一個(gè)除數(shù)。但這種方法比較費(fèi)事,數(shù)論中可以證明,最大一個(gè)除數(shù)可以用sqrt(x)的整數(shù)局部代替,即,用3、4...sqrt(x)分別去除x即可判定x是否素?cái)?shù)。VC++程序設(shè)計(jì)王金湘58VC++程序設(shè)計(jì)王金湘59i=5;i<300;i+=2j=sqrt(i)2<=n<=jTFbreakn++TF
輸出i求出最大一個(gè)除數(shù)判斷i是不是素?cái)?shù)求2~300之間所有素?cái)?shù)N-S圖i%n==0n>=j+1由于例題中用到求平方根的函數(shù)sqrt()和指定輸出項(xiàng)格式符setw(),所以,在程序的開(kāi)頭還分別參加了兩個(gè)包含頭文件:#include<math.h>#include<iomanip.h>因演示版面有限,故下面舉例時(shí)略去了三個(gè)頭文件?,F(xiàn)在來(lái)看該程序的結(jié)構(gòu)和運(yùn)行。VC++程序設(shè)計(jì)王金湘60
求2~300之間所有素?cái)?shù)voidmain(){ inti,j,k,n; cout<<setw(8)<<2<<setw(8)<<3;
for(k=2,i=5;i<300;i+=2) { j=sqrt(i);
for(n=3;n<=j;n++) if(i%n==0)break;
if(n>=j+1)
{ cout<<setw(8)<<i; k++;
if(k%5==0)cout<<‘\n’;} }cout<<‘\n’;}VC++程序設(shè)計(jì)王金湘61判斷是否素?cái)?shù)輸出素?cái)?shù)voidmain(){ inti,j,k,n; cout<<setw(8)<<2<<setw(8)<<3;
for(k=2,i=5;i<300;i+=2) { j=sqrt(i);
for(n=3;n<=j;n++) if(i%n==0)break;
if(n>=j+1)
{ cout<<setw(8)<<i; k++;
if(k%5==0)cout<<‘\n’;} }cout<<‘\n’;}VC++程序設(shè)計(jì)王金湘62//在3~sqrt(i)之間沒(méi)有能和i整除的數(shù)
//找到能和i整除的數(shù)
//在3~sqrt(i)之間搜索//五個(gè)一行//輸出素?cái)?shù)//計(jì)數(shù)考察后一個(gè)奇數(shù)控制大循環(huán)結(jié)束標(biāo)志控制流程語(yǔ)句結(jié)束VC++程序設(shè)計(jì)王金湘63第五周上機(jī)題1.把華氏溫度轉(zhuǎn)換為攝氏溫度的公式為C=(5/9)(F-23),要求輸入攝氏溫度,10℃,0℃,37℃,100℃,要求逐行輸出攝氏溫度,華氏溫度對(duì)照情況,溫度取兩位小數(shù)。VC++程序設(shè)計(jì)王金湘64#include<iostream.h>#include<iomanip.h>voidmain(){ floatf1,f2,f3,f4,c1,c2,c3,c4; cout<<"輸入四個(gè)攝氏溫度值:"; cin>>c
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年04月中國(guó)農(nóng)業(yè)發(fā)展銀行廣東省分行紀(jì)委辦調(diào)查專(zhuān)業(yè)人才社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度常州消防設(shè)施檢測(cè)與鑒定合同4篇
- 2024版水泥混凝土運(yùn)輸合同書(shū)
- 2025年度城市基礎(chǔ)設(shè)施配套拆遷施工合同4篇
- 專(zhuān)業(yè)菊花供應(yīng)商2024年銷(xiāo)售協(xié)議版B版
- 《流行病癥:新型冠狀病毒肺炎》課件
- 二零二五年度玻璃原材料期貨交易合同6篇
- 2024年03月廣東中信銀行深圳分行社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 二零二五版存量房市場(chǎng)政策研究合同3篇
- 2024簡(jiǎn)易散伙協(xié)議規(guī)范格式
- 食堂經(jīng)營(yíng)方案(技術(shù)標(biāo))
- 代收實(shí)收資本三方協(xié)議范本
- 人教版八年級(jí)英語(yǔ)下冊(cè)全冊(cè)課件【完整版】
- 乒乓球比賽表格
- 商務(wù)接待表格
- 腸梗阻導(dǎo)管治療
- word小報(bào)模板:優(yōu)美企業(yè)報(bào)刊報(bào)紙排版設(shè)計(jì)
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)五 其他內(nèi)容類(lèi)型的生產(chǎn)
- 漢語(yǔ)教學(xué) 《成功之路+進(jìn)步篇+2》第17課課件
- 三十頌之格助詞【精品課件】-A3演示文稿設(shè)計(jì)與制作【微能力認(rèn)證優(yōu)秀作業(yè)】
- 浙江省紹興市2023年中考科學(xué)試題(word版-含答案)
評(píng)論
0/150
提交評(píng)論