版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1第C的流程控制24.1.2算法的設(shè)計(jì)原則
1.符合數(shù)學(xué)計(jì)算規(guī)則只有符合數(shù)學(xué)規(guī)則的計(jì)算步驟才可以被計(jì)算機(jī)正確執(zhí)行。2.保證結(jié)果確定如果一個(gè)算法對(duì)同一組數(shù)據(jù)進(jìn)行多次計(jì)算,竟然獲得多個(gè)不同的結(jié)果,這種算法是不確定的,是無效的。保證算法的確定性,最重要的方面是排除程序中隨機(jī)數(shù)的產(chǎn)生(變量初始化)。
3.程序能夠正常結(jié)束一個(gè)合理的算法應(yīng)包含有限的操作步驟,而不能是無限的。
第1頁/共87頁34.1.2算法的設(shè)計(jì)原則
4.合理的輸入
一個(gè)實(shí)際有效的程序中應(yīng)該含有零個(gè)或者多個(gè)輸入(一般會(huì)在程序的算法中加入一個(gè)或者多個(gè)輸入
)。
5.合理的輸出
一個(gè)有效的程序在設(shè)計(jì)算法時(shí)必須保證程序至少要有一個(gè)輸出。
第2頁/共87頁44.1.3算法的表示工具怎樣來描述一個(gè)算法呢?⑴自然語言⑵流程圖⑶N-S圖⑷偽代碼(類似于數(shù)學(xué)語言)
流程圖是目前全球軟件開發(fā)領(lǐng)域使用最廣泛的算法表示工具,它通過一些嚴(yán)格定義圖形的組合來表示算法的步驟以及數(shù)據(jù)變化的走向。用圖形表示算法,直觀形象,易于理解。
自然語言就是人們?nèi)粘I钪惺褂玫恼Z言。容易造成誤解
1973年美國(guó)學(xué)者I.Nassi和B.Shneideman提出的一種無流線的流程圖第3頁/共87頁5起止框流程圖表示算法輸入輸出框判斷框流程線處理框連接點(diǎn)注釋框流程圖符號(hào):第4頁/共87頁6例:求的值。求多項(xiàng)式的累乘積問題。
定義變量:M—累乘積
N—代表一項(xiàng)的分母算法描述:自然語言+偽代碼算法:⑴M←1,N←1⑵M←M×⑶N←N+1⑷如果N≤100,轉(zhuǎn)⑵否則,轉(zhuǎn)⑸⑸輸出M的值⑹結(jié)束1N循環(huán)第5頁/共87頁7開始結(jié)束M←1N←1M←M×N←N+11N輸出M的值N≤100TrueFalse處理框流程線判斷框M←1N←1M←M×N←N+1N>100
輸出M的值1N用N-S圖描述用流程圖描述第6頁/共87頁8結(jié)構(gòu)化程序設(shè)計(jì)的基本結(jié)構(gòu):三種。
1.順序結(jié)構(gòu):先執(zhí)行A操作,再執(zhí)行B操作.AB(a)流程圖(b)N-S圖ABA、B可以是一個(gè)簡(jiǎn)單語句或一個(gè)基本結(jié)構(gòu)4.1.4結(jié)構(gòu)化程序設(shè)計(jì)中基本結(jié)構(gòu)的表示第7頁/共87頁92.選擇結(jié)構(gòu):C(Condition)代表一個(gè)條件C
TrueFalse
AB(a)流程圖(b)N-S圖
True
FalseCAB第8頁/共87頁103.循環(huán)結(jié)構(gòu):當(dāng)(while)型循環(huán)
(1)當(dāng)條件C成立時(shí),反復(fù)執(zhí)行A操作,直到C為假時(shí),才停止循環(huán)。CAFalseTrue
當(dāng)C為真
A(a)流程圖(b)N-S圖有可能循環(huán)體一次都不執(zhí)行
第9頁/共87頁113.循環(huán)結(jié)構(gòu):直到(until)型循環(huán)(2)先執(zhí)行A操作,再判條件C,若為“假”重復(fù)執(zhí)行A,直到C為“真”停止ACFalseTrue
A
直到C為真(a)流程圖(b)N-S圖循環(huán)體至少要被執(zhí)行一次第10頁/共87頁12AB三種結(jié)構(gòu)特點(diǎn):⑴單入口、單出口。⑵每一部分都可能被執(zhí)行到。⑶沒有死循環(huán)。⑷A、B可能是一個(gè)更基本的結(jié)構(gòu)。CAFalseTrueACFalseTrue
True
FalseCAB第11頁/共87頁134.2C++語言程序的結(jié)構(gòu)和語句
計(jì)算機(jī)程序運(yùn)行的時(shí)候是將一條條的語句翻譯成機(jī)器指令,控制計(jì)算機(jī)產(chǎn)生計(jì)算的結(jié)果的。所以語句是計(jì)算機(jī)程序的基本組成單位。
注意:在C++程序中,任何執(zhí)行語句都必須寫在函數(shù)中,不允許出現(xiàn)不屬于函數(shù)的獨(dú)立執(zhí)行語句。
1.定義語句
inta,b;語句分類:(6類)C++程序是由若干函數(shù)構(gòu)成,而一個(gè)函數(shù)由若干語句構(gòu)成。這些語句組合成上述三種結(jié)構(gòu)以實(shí)現(xiàn)算法。第12頁/共87頁142.控制語句:(9種,控制語句的執(zhí)行流程
)(1)if()~else~條件語句(2)for()~循環(huán)語句(3)while()~循環(huán)語句(4)do~while()循環(huán)語句(5)continue結(jié)束本次循環(huán)語句(6)break中止執(zhí)行switch或循環(huán)語句(7)switch多分支選擇語句(8)goto轉(zhuǎn)向語句(9)return從函數(shù)返回語句第13頁/共87頁155.空語句:;
只有一個(gè)分號(hào),什么都不做。主要用于作被轉(zhuǎn)向點(diǎn),或空循環(huán)體。3.函數(shù)調(diào)用語句:
例:cos(x);調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)
a=maxx(x1,x2);調(diào)用自定義函數(shù)4.表達(dá)式語句:由“表達(dá)式+分號(hào)”構(gòu)成。例:a+b;a=3+x;
i++;第14頁/共87頁16
6.復(fù)合語句:
用{}把多條語句括起來構(gòu)成復(fù)合語句,從語法上看成一條簡(jiǎn)單語句。例:{a=1;b=2;c=3;}三個(gè)簡(jiǎn)單語句一個(gè)復(fù)合語句或?qū)懗桑簕a=1;b=2;c=3;}第15頁/共87頁174.3選擇結(jié)構(gòu)語句的使用4.3.1if語句1.
if(<表達(dá)式>)語句2.
if(<表達(dá)式>)語句1else語句2語句
表達(dá)式假真語句1
表達(dá)式假真語句2
if語句----根據(jù)給定條件選擇所執(zhí)行的操作。不平衡if語句單選平衡if語句二中選一第16頁/共87頁18#include<iostream.h>voidmain(){floata,b,c,max;cout<<"請(qǐng)輸入三個(gè)數(shù):";cin>>a>>b>>c;max=a;if(max<b)t=b;if(max<c)t=c;cout<<"最大值:"<<max<<endl;}[例4.1]輸入三個(gè)數(shù),求出并輸出其中最大數(shù)兩個(gè)獨(dú)立的不平衡if語句動(dòng)態(tài)看程序的執(zhí)行,有些部分可能執(zhí)行到,也可能執(zhí)行不到。第17頁/共87頁19max=b
max<b假真max=cmax<c假真cin>>a>>b>>c;max=a;cout<<"最大值:"<<max<<endl;流程圖如:輸入數(shù)據(jù)123和132,程序每次執(zhí)行的語句不同。第18頁/共87頁20#include<iostream.h>voidmain(){
floata,b,c,max;cout<<"請(qǐng)輸入三個(gè)數(shù):";cin>>a>>b>>c;if(a<b)max=b;else max=a;if(max<c)cout<<"最大值:"<<c<<endl;elsecout<<"最大值:"<<max<<endl;}[例4.2]輸入三個(gè)數(shù),求出并輸出其中最大數(shù)兩個(gè)獨(dú)立的平衡if語句第19頁/共87頁213.if(<表達(dá)式1>)語句1elseif語句
elseif(<表達(dá)式2>)語句2組合if語句
elseif(<表達(dá)式3>)語句3…else語句n
語句1表達(dá)式1假真語句2表達(dá)式2表達(dá)式3語句3語句4假假真真對(duì)程序的一次執(zhí)行,只可能執(zhí)行語句1、語句2、
……語句n中的一個(gè)語句…第20頁/共87頁22[例4.3]輸入三個(gè)數(shù),求出并輸出其中最大數(shù)組合if語句的使用,一條語句#include<iostream.h>voidmain(){floata,b,c;cout<<"請(qǐng)輸入三個(gè)數(shù):";cin>>a>>b>>c;if(a>=b&&a>=c)cout<<"最大值:"<<a<<endl;elseif(b>=a&&b>=c)cout<<"最大值:"<<b<<endl;elsecout<<"最大值:"<<c<<endl;}第21頁/共87頁23例:輸入學(xué)生的分?jǐn)?shù)x,根據(jù)成績(jī)的高低,輸出不同等級(jí)若x為:90~100分則輸出A80~89分則輸出B70~79分則輸出C60~69分則輸出D60分以下則輸出E#include<iostream.h>voidmain(){intx;cin>>x;if(x>=90)cout<<'A'<<'\n';elseif(x>=80)cout<<'B'<<'\n';elseif(x>=70)cout<<'C'<<'\n';elseif(x>=60)cout<<'D'<<'\n';elsecout<<'E'<<'\n';}例如輸入:75執(zhí)行順序輸出結(jié)果注意:條件的寫法第22頁/共87頁24例:輸入學(xué)生的分?jǐn)?shù)x,根據(jù)成績(jī)的高低,輸出不同等級(jí)#include<iostream.h>voidmain(){intx;cin>>x;if(x>=90)cout<<'A'<<'\n';elseif(80<=x<90)cout<<'B'<<'\n';elseif(70<=x<80)cout<<'C'<<'\n';elseif(60<=x<70)cout<<'D'<<'\n';elsecout<<'E'<<'\n';}注意:條件的寫法此寫法錯(cuò)誤:若x=-1則表達(dá)式結(jié)果為真!正確的寫法為:80<=x&&x<90或簡(jiǎn)寫為x>=80(以下類推)第23頁/共87頁25例:輸入學(xué)生的分?jǐn)?shù)x,根據(jù)成績(jī)的高低,輸出不同等級(jí)#include<iostream.h>voidmain(){intx,d;cin>>x;d=x/10;if(d>=9)cout<<'A'<<'\n';elseif(d=8)cout<<'B'<<'\n';elseif(d=7)cout<<'C'<<'\n';elseif(d=6)cout<<'D'<<'\n';elsecout<<'E'<<'\n';}注意:條件的寫法正確的寫法為:d==8(以下類推)此寫法錯(cuò)誤:若x<90,則不論x為何值總是輸出B。第24頁/共87頁26例:任意輸入一個(gè)小于等于5位數(shù)的正整數(shù),輸出其位數(shù)。例:輸入23輸出2輸入13579輸出5#include<iostream.h>voidmain(){intx,ws;cin>>x;if(x>=10000)ws=5;elseif(x>=1000)ws=4;elseif(x>=100)ws=3;elseif(x>=10)ws=2;elsews=1;cout<<ws<<endl;}注意:條件的寫法第25頁/共87頁27voidmain(){charc;cin>>c;
if(c<32)cout<<"控制字符\n";elseif('0'<=c&&c<='9')cout<<"數(shù)字字符\n";elseif('A'<=c&&c<='Z')cout<<"大寫字母\n";elseif('a'<=c&&c<='z')cout<<"小寫字母\n";elsecout<<"其他字符\n";}[例]判斷輸入字符的種類。把字符分為五類:
①數(shù)字字符
②大寫字母
③小寫字母、
④控制字符(ASCII碼<32)⑤其他字符第26頁/共87頁284.3.2if語句的嵌套形式if()if()語句1else語句2elseif()語句3else語句4內(nèi)嵌if內(nèi)嵌if內(nèi)嵌的if-else語句為一條語句第27頁/共87頁29#include<iostream.h>voidmain(){floatx,y;cout<<"請(qǐng)輸入x變量的值:";cin>>x;if(x<=10) if(x<10)y=-10;elsey=5;elsey=20;cout<<"y="<<y<<endl;}[例4.5]用嵌套的if語句解決數(shù)學(xué)問題
y=-10 (x<10)5 (x=10)20 (x>10) 嵌套if語句,流程圖見書第28頁/共87頁30if(a+b>c&&b+c>a&&c+a>b){s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<area<<endl;}elsecout<<"itisnotatrilateral\n";if語句中需要注意的問題
在if和else后面可以有多個(gè)操作語句,此時(shí)用花括號(hào)將幾個(gè)語句括起來形成復(fù)合語句
復(fù)合語句用{和}括起來復(fù)合語句后無分號(hào)“;”第29頁/共87頁314.3.3條件運(yùn)算符if(a>b)max=a;elsemax=b;max=(a>b)?a:b;運(yùn)算原則:當(dāng)表達(dá)式1為真時(shí),整個(gè)表達(dá)式的值為表達(dá)式2
當(dāng)表達(dá)式1為假時(shí),整個(gè)表達(dá)式的值為表達(dá)式3運(yùn)算優(yōu)先級(jí):比賦值運(yùn)算符高比算術(shù)、關(guān)系、邏輯運(yùn)算符低結(jié)合性:自右向左C++語言中唯一的三目運(yùn)算符一般形式:表達(dá)式1?表達(dá)式2
:表達(dá)式3第30頁/共87頁32voidmain(){charch;cin>>ch;ch=(ch>='A'&&ch<='Z')?(ch+32):ch;cout<<ch<<'\n';}[例]輸入一個(gè)字符,判別它是否是大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字母。第31頁/共87頁334.3.4開關(guān)語句(多分支選擇,switch語句)一般形式switch(表達(dá)式){case常量表達(dá)式1:語句1
case常量表達(dá)式2:語句2……case常量表達(dá)式n:語句n
default:
語句n+1}3.當(dāng)表達(dá)式的值與所有常量表達(dá)式的值均不相等時(shí),就執(zhí)行default后面的語句2.當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),就執(zhí)行后面相應(yīng)的語句1.整型表達(dá)式或字符型表達(dá)式第32頁/共87頁34chargrade;cin>>grade;switch(grade){case‘A’:cout<<“優(yōu)“<<endl;case‘B’:cout<<“良“<<endl;case‘C’:cout<<“中“<<endl;case‘D’:cout<<“及格“<<endl;default:cout<<“不及格“<<endl;}4.執(zhí)行完一個(gè)case后面語句后,流程轉(zhuǎn)下一個(gè)case繼續(xù)執(zhí)行。本例中,若grade的值等于‘A’,則將連續(xù)輸出:優(yōu)良中及格不及格switch語句示例根據(jù)考試成績(jī)的等級(jí)打印出百分制分?jǐn)?shù)段break;break;break;break;default后可以不加break語句5.加上break語句后,就可以實(shí)現(xiàn)執(zhí)行一個(gè)case后,終止switch語句第33頁/共87頁35加
break
語句后程序的流程圖語句1‘A’輸出“優(yōu)”輸出“良”輸出“中”輸出“及格”輸出“不及格”
‘B’‘C’‘D’其他第34頁/共87頁366.switch語句中多個(gè)case共用一組執(zhí)行語句chargrade;
cin>>grade;
switch(grade)
{case'A':
case'B':
case'C':cout<<">60\n";break;
case'D':
case'E':cout<<"<60\n";
}grade的值為'A'、'B'或'C'時(shí)執(zhí)行同一組語句grade的值為'D'或'E'時(shí)執(zhí)行另外一組語句第35頁/共87頁37注意:1.在switch語句中,default分支可以放在任何位置。但是為了配合常量表達(dá)式匹配查詢的執(zhí)行流程,使得程序書寫和閱讀方便,一般將default分支寫在switch語句的最后一行。
2.每個(gè)常量表達(dá)式的值都必須互不相同,否則當(dāng)表達(dá)式的值與多個(gè)常量表達(dá)式的值都匹配時(shí),計(jì)算機(jī)將無法決定到底執(zhí)行哪一個(gè)常量表達(dá)式后面的語句序列。
3.常量表達(dá)式必須是一個(gè)確定的字符類型或者整數(shù)類型的常量數(shù)值,而不能是浮點(diǎn)數(shù)或者變量表達(dá)式。
4.switch語句并不與組合的if語句完全等價(jià)。switch語句只能處理字符類型和整數(shù)類型的條件判斷,而組合的if語句不但可以處理字符類型和整數(shù)類型的條件判斷,還可以對(duì)浮點(diǎn)數(shù)等其它的條件進(jìn)行判斷。
第36頁/共87頁38例:i=2;switch(i){case1:i++;case2:i++;case3:i++;case4:i++;default:i++;}cout<<i<<'\n';輸出:?輸出:6第37頁/共87頁39[例4.6]
根據(jù)收入,計(jì)算應(yīng)繳納的公積金特點(diǎn):根據(jù)收入,繳納比例不同
in<1000 2%比例1000<=in<2000 3%比例2000<=in<5000 4%比例5000<=in<100005%比例10000<=in6%比例繳納總金額:
fee=in*r%in收入r繳納比例的分子程序舉例temp=in/1000;當(dāng)in<1000 temp=0r=2當(dāng)1000<=in<2000 temp=1r=3當(dāng)2000<=in<5000 temp=2,3,4r=4當(dāng)5000<=in<10000temp=5,6,7,8,9r=5當(dāng)10000<=intemp=其它值
r=6第38頁/共87頁40case5:case6:case7:case8:case9:r=5;break;default:r=6;}fee=in*r/100.0;cout<<"公積金為:"<<fee<<endl;}運(yùn)行過程:輸入:3500
輸出:公積金為:140#include<iostream.h>voidmain(){intin,temp,r;floatfee;cout<<"請(qǐng)輸入您的收入:";cin>>in;temp=in/1000;switch(temp)
{case0:r=2;break;case1:r=3;break;case2:case3:case4:r=4;break;第39頁/共87頁41#include<iostream.h>voidmain(){ intin,r; floatfee; cin>>in;//輸入收入
if(in<1000)r=2; elseif(in<2000)r=3; elseif(in<5000)r=4; elseif(in<10000)r=5; elser=6; fee=in*r/100.0; cout<<"公積金為:"<<fee<<endl;}[例]設(shè)用條件語句實(shí)現(xiàn)上例公積金的計(jì)算第40頁/共87頁42voidmain(){charop;floatnum1,num2,result=0;cin>>num1>>op>>num2;switch(op)
{case'+':result=num1+num2;break;case'-':result=num1-num2;break;case'*':result=num1*num2;break;case'/':result=num1/num2;break;default:"無效運(yùn)算符\n";
}
cout<<num1<<op<<num2<<'='<<result<<'\n';}[例]設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器程序,
完成簡(jiǎn)單的四則運(yùn)算如:輸入2.5*4輸出2.5*4=10又如:輸入2.5+4輸出2.5+4=6.5第41頁/共87頁434.4循環(huán)結(jié)構(gòu)語句的使用循環(huán)
—當(dāng)滿足一定的條件,重復(fù)處理的過程如:解決步驟:(1)整型變量sum=0,i=0(2)令i=i+1,sum=sum+i,(3)若i<100,則重復(fù)步驟(2)(4)輸出sum步驟(2)稱為循環(huán)體實(shí)現(xiàn)循環(huán)的四種方式goto+語句標(biāo)號(hào)
while語句
for語句
do-while語句第42頁/共87頁444.4.1goto語句和標(biāo)號(hào)goto標(biāo)號(hào);一般形式:
其作用是確定流程跳轉(zhuǎn)目標(biāo)語句標(biāo)號(hào):用標(biāo)識(shí)符表示,命名規(guī)則與變量名相同。goto語句主要用途與if語句一起構(gòu)成循環(huán)結(jié)構(gòu)從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外
第43頁/共87頁45例4.7用if語句、goto語句構(gòu)成循環(huán)的實(shí)例if、goto語句求和#include<iostream.h>voidmain(){inti=1,sum=0;loop:if(i<=100){sum=sum+i;i++;gotoloop;}cout<<sum<<'\n';}i=1sum=0sum=sum+ii++i<=100真假第44頁/共87頁46由于在程序中大量使用goto跳轉(zhuǎn)命令會(huì)造成程序結(jié)構(gòu)的混亂,該命令要限制使用第45頁/共87頁474.4.2while()語句
一般形式while(<表達(dá)式>)<語句>當(dāng)表達(dá)式為真(非0)值時(shí),執(zhí)行while語句中的內(nèi)嵌語句。語句表達(dá)式假真先判斷表達(dá)式后執(zhí)行語句第46頁/共87頁48[例4.8]while語句求和實(shí)例#include<iostream.h>voidmain(){inti=1,sum=0;while(i<=100)
{sum=sum+i;i=i+1;}cout<<"sum="<<sum<<'\n';}循環(huán)體假sum=sum+ii=i+1i<=100真i=1sum=0輸出sum第47頁/共87頁49while語句中應(yīng)注意的問題循環(huán)體包含一個(gè)以上的語句時(shí),應(yīng)該用大括號(hào)括起來#include<iostream.h>voidmain(){inti=1,sum=0;while(i<=100)
{sum=sum+i;i=i+1;}cout<<"sum="<<sum<<'\n';}在循環(huán)體內(nèi)應(yīng)有使循環(huán)趨于結(jié)束的語句
累加計(jì)算中的累加和變量一般初始化為0,累乘計(jì)算中的累乘積變量一般初始化為1。第48頁/共87頁504.4.3for語句for([初始化表達(dá)式];[條件表達(dá)式];[修正表達(dá)式])語句一、一般形式語句條件表達(dá)式假真修正表達(dá)式初始化表達(dá)式相當(dāng)于“當(dāng)型”循環(huán)初始化表達(dá)式;while(條件表達(dá)式){
語句;
修正表達(dá)式;};第49頁/共87頁51二、for語句最簡(jiǎn)單的應(yīng)用形式for(i=1;i<=100;i++)sum=sum+i;i=1;while(i<=100){sum=sum+i;i++;}for([初始化表達(dá)式];[條件表達(dá)式];[修正表達(dá)式])語句第50頁/共87頁52[例4.9]用for語句求和實(shí)例#include<iostream.h>voidmain(){intsum=0;for(inti=1;i<=100;i++)sum+=i;cout<<"從1加到100的總和是:"<<sum<<endl;}第51頁/共87頁53分號(hào)不能省略i=1;for(;i<=100;i++)sum=sum+i;分號(hào)不能省略for語句有關(guān)說明2.“初始化表達(dá)式”可省略,初始化移至循環(huán)體前3.“條件表達(dá)式”可省略,做“永真”處理,循環(huán)無終止地進(jìn)行。真sum=sum+ii++i=1for(i=1;;i++)sum=sum+i;1.在C++的for語句的初始化表達(dá)式中,不但可以為變量賦初始值,還可以定義變量。
for(inti=0;i<100;i++);
第52頁/共87頁54for語句有關(guān)說明4.“修正表達(dá)式”可省略,“修正”移至循環(huán)體內(nèi)循環(huán)變量在循環(huán)體內(nèi)變化5.“循環(huán)體”可為空,for(i=1;i<=100;sum=sum+i,i++);將循環(huán)體中應(yīng)做的工作,放在“修正表達(dá)式”中。for(i=1;i<=100;){sum=sum+i;i++;}第53頁/共87頁556.三個(gè)“表達(dá)式”和“語句”都可省略,無限循環(huán)7.“初始化表達(dá)式”和“修正表達(dá)式”可以是一個(gè)以上的表達(dá)式while(1);for語句有關(guān)說明for(sum=0,i=1;i<=100;i++,j--)sum=sum+i;for(i=1;i<=100;i++,i++)sum=sum+i;for(;;);第54頁/共87頁564.4.4do-while()語句do<語句>while(<表達(dá)式>)一、一般形式
先執(zhí)行指定的內(nèi)嵌語句,然后判斷表達(dá)式。語句表達(dá)式假真先執(zhí)行語句然后再判斷表達(dá)式第55頁/共87頁57二、[例4.10]do-while()語句求和#include<iostream.h>voidmain(){inti=1,sum=0;
do{sum+=i;i++;}while(i<=100);cout<<"sum="<<sum<<'\n';}假sum+=ii++i<=100真i=1sum=0輸出sum第56頁/共87頁58三、while和do-while循環(huán)比較while(表達(dá)式)語句語句表達(dá)式假真do語句while(表達(dá)式)語句表達(dá)式假真第57頁/共87頁59三、while和do-while循環(huán)比較main(){inti,sum=0;cin>>i;while(i<=10){sum=sum+i;i++;}cout<<sum;}main(){inti,sum=0;cin>>i;do{sum=sum+i;i++;}while(i<=10);cout<<sum;}程序運(yùn)行過程155程序運(yùn)行過程155程序運(yùn)行過程110程序運(yùn)行過程1111第58頁/共87頁60例:輸入一個(gè)4位數(shù)的整數(shù),輸出其各位數(shù)字之和。如:輸入2426輸出14解1
(硬性分解各位)
#include<iostream.h>voidmain(){intn,a,b,c,d;cin>>n;/*n=abcda千位,b百位,c十位,d個(gè)位*/a=n/1000;b=n%1000/100;c=n%100/10;d=n%10;cout<<a+b+c+d<<"\n";}沒有使用循環(huán),若n是4位以上的數(shù)字,此方法不適用。第59頁/共87頁61解2
(循環(huán)分解各位)
#include<iostream.h>voidmain(){intn,sum=0;cin>>n;
while(n>0){sum+=n%10;n=n/10;}cout<<sum<<"\n";}可將n推廣為任意位!?。〉?0頁/共87頁62例:分解整數(shù):找出100到1000之間的符合下述條件的數(shù),條件為:該數(shù)能被5整除而且該數(shù)各位數(shù)字之和等于9。如:數(shù)225#include<iostream.h>voidmain(){inti,a,b,c;for(i=100;i<1000;i+=5){a=i/100;b=i%100/10;c=i%10;if(a+b+c==9)cout<<i<<"\n";}}第61頁/共87頁63三種循環(huán)的比較三種循環(huán)可以處理同一問題。while和do-while循環(huán),循環(huán)變量應(yīng)在循環(huán)語句前初始化。while循環(huán)和for循環(huán)是先判斷表達(dá)式后執(zhí)行語句,而do-while循環(huán)是先執(zhí)行語句,然后判斷表達(dá)式。對(duì)while、do-while和for循環(huán),可用break語句跳出循環(huán),而用continue語句結(jié)束本次循環(huán)whilefordo-while第62頁/共87頁644.4.5break語句和continue語句break;break語句1.break語句可以使流程跳出switch結(jié)構(gòu)2.break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句。for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;cout<<area;}當(dāng)面積值大于100時(shí),跳出循環(huán)體,不再執(zhí)行其余幾次循環(huán)一般形式:第63頁/共87頁65continue語句continue;一般形式:
其作用是結(jié)束本次循環(huán),即跳過循環(huán)體下面未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。for(n=100;n<=200;n++){if(n%3==0)
continue;cout<<n<<‘\n’;}當(dāng)n能被3整除時(shí),跳出本次循環(huán),不再執(zhí)行cout語句,但是還要繼續(xù)循環(huán)判斷本程序的功能是打印出100~200之間不能被3整除的整數(shù)第64頁/共87頁66for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;cout<<area;}for(n=100;n<=200;n++){if(n%3==0)
continue;cout<<n<<‘\n’;}三、break和continue語句的區(qū)別第65頁/共87頁67例:比較兩段程序的區(qū)別for(i=1;i<=5;i++){x=i*i;if(x==9)break;cout<<x<<'\n';}cout<<"i="<<i<<'\n';for(i=1;i<=5;i++){x=i*i;if(x==9)continue;cout<<x<<'\n';}cout<<"i="<<i<<'\n';輸出:
14i=3輸出:
141625i=6第66頁/共87頁68[例4.11]使用循環(huán)語句按照定義求任意兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。
#include<iostream.h>voidmain(){intx,y,i,k;cout<<"請(qǐng)輸入兩個(gè)整數(shù):";cin>>x>>y;k=x<y?x:y;//取兩數(shù)中的小數(shù)
for(i=k;i>=1;i--)//求最大公約數(shù)
if(x%i==0&&y%i==0){ cout<<"最大公約數(shù)是:"<<i<<endl; break;}
第67頁/共87頁69k=x>y?x:y;//取兩數(shù)中的大數(shù)
for(i=k;i<=x*y;i++)//求最小公倍數(shù)
if(i%x==0&&i%y==0){cout<<"最小公倍數(shù)是:"<<i<<endl;break;}}第68頁/共87頁704.4.6循環(huán)的嵌套及其應(yīng)用嵌套:一個(gè)循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán)結(jié)構(gòu)多層循環(huán):內(nèi)嵌的循環(huán)體內(nèi)又嵌套循環(huán)結(jié)構(gòu)
前述的三種循環(huán)都可以互相嵌套三重循環(huán)雙重循環(huán)第69頁/共87頁71#include<iostream.h>#include<iostream.h>voidmain(){inti,j;cout<<"乘法表:"<<endl;for(i=1;i<=9;i++)//外循環(huán)控制輸出的行數(shù)
{for(j=1;j<=i;j++)//內(nèi)循環(huán)
cout<<i<<"×"<<j<<"="<<i*j<<'\t';cout<<endl;}}[例4.12]用循環(huán)嵌套技術(shù)輸出99乘法表
第70頁/共87頁72[例4.13]求ax2+bx+c=0方程的根,#include<iostream.h>#include<math.h>voidmain(){floata,b,c,disc,x1,x2,real,image;cout<<"請(qǐng)輸入三個(gè)實(shí)數(shù):";cin>>a>>b>>c;cout<<"\n方程";if(fabs(a)<=1e-7)//a==0,注意寫法
cout<<"不是二次方程,解為:"<<-c/b<<endl;else
{//處理其它三種情況
disc=b*b-4*a*c;第71頁/共87頁73if(fabs(disc)<=1e-7)//disc==0cout<<"有兩個(gè)相等的實(shí)數(shù)根:"<<-b/(2*a)<<endl;elseif(disc>1e-7) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);cout<<"有兩個(gè)不相等的實(shí)數(shù)根:"<<x1<<"和"<<x2<<endl; }else {real=-b/(2*a);image=sqrt(-disc)/(2*a);cout<<"有兩個(gè)復(fù)數(shù)根:"<<endl; cout<<real<<"+"<<image<<"i"<<endl;cout<<real<<"-"<<image<<"i"<<endl; }}}第72頁/共87頁74[例4.14]輸入一個(gè)int型整數(shù)num,逆向輸出其各位數(shù)字,同時(shí)求出其位數(shù)以及各位數(shù)字之和。#include<iostream.h>voidmain(){ intnum,sum=0,k,i=0; cin>>num; while(num>0) { k=num%10; cout<<k<<""; sum+=k; i++; num=num/10; } cout<<"\n各位數(shù)字之和:"<<sum<<endl; cout<<"數(shù)字位數(shù):"<<i<<endl;}第73頁/共87頁75例4.15:循環(huán)求cos(x)#include<iostream.h>#include"math.h"voidmain(){ intsign,i;floatx,m,n,t,cos; cout<<"請(qǐng)輸入X的值:"; cin>>x;
第74頁/共87頁76cos=0;t=1;n=1.0;m=1.0;sign=1;i=0;while((fabs(t))>=1e-9){ cos=cos+t;//累加和
i=i+2;//項(xiàng)數(shù)
n=n*x*x;//分子的值
m=m*i*(i-1);//分母的值
sign=-sign;//符號(hào)
t=sign*n/m;//通項(xiàng)的值
}cout<<"cos(x)="<<cos<<endl;}
注意:●循環(huán)結(jié)束條件。第75頁/共87頁77[例4.16]
使用循環(huán)語句求解1!+2!+…+20!多項(xiàng)式求和問題。#include<iostream.h>voidmain(){ doublesum,t;sum=0; t=1; for(inti=1;i<=20;i++){ t=t*i;//計(jì)算每一個(gè)階乘
sum=sum+t;}cout<<"sum="<<sum<<endl;}
第76頁/共87頁78#include<iostream.h>#include<iomanip.h>voidmain(){intf1=1,f2=1;
for(inti=1;i<=20;i++)
{
cout<<setw(12)<<f1<<setw(12)<<f2;if(i%2==0)cout<<endl;f1=f1+f2;f2=f2+f1;
}}[例4.17]求Fabonacci數(shù)列前40個(gè)數(shù)1,1,2,3,5,8,13,……f1+f2=f3↓↓f1f2控制換行=f3第77頁/共87頁79運(yùn)行結(jié)果如下:
11235813213455891442333776109871597258441816765 …
第78頁/共87頁80[例]判斷m是否是素?cái)?shù)(框圖)讀入mk=mi=2m被i整除用break結(jié)束循環(huán)i=i+1i>=k+1輸出:m是素?cái)?shù)輸出:m不是素?cái)?shù)當(dāng)i<=k真假返回第79頁/共87頁81#include<iostream.h>#include<math.h>voidmain
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度集合大合集人員管理篇
- 單位管理制度匯編大合集人力資源管理
- 《家具導(dǎo)購(gòu)圣經(jīng)》課件
- 單位管理制度分享匯編職員管理篇十篇
- 單位管理制度分享大全職工管理十篇
- 2024教科室工作計(jì)劃
- 單位管理制度呈現(xiàn)合集職工管理篇十篇
- 《投資管理復(fù)習(xí)》課件
- 《市場(chǎng)考察報(bào)告》課件
- 《廣告效果的測(cè)定》課件
- 美的供應(yīng)鏈變革及智慧采購(gòu)解決方案
- 高低壓電力系統(tǒng)預(yù)試驗(yàn)及維保服務(wù)方案
- 教師教育技能培訓(xùn)(3篇模板)
- 代發(fā)工資委托書格式樣本
- YBT 6246-2024《核電工程用熱軋帶肋鋼筋》
- 管桁架焊接 (1)講解
- 大學(xué)助農(nóng)直播創(chuàng)業(yè)計(jì)劃書
- 心理健康教育國(guó)內(nèi)外研究現(xiàn)狀
- 燃?xì)饨?jīng)營(yíng)安全重大隱患判定標(biāo)準(zhǔn)課件
- 《經(jīng)濟(jì)學(xué)原理》題庫(kù)(含參考答案)
- 廣州社會(huì)保險(xiǎn)退款申請(qǐng)表
評(píng)論
0/150
提交評(píng)論