版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1的流程控制語(yǔ)句C++語(yǔ)句的分類說(shuō)明語(yǔ)句:完成數(shù)據(jù)類型和變量的定義??刂普Z(yǔ)句:改變程序執(zhí)行順序的語(yǔ)句,包括:條件、循環(huán)、開(kāi)關(guān)、轉(zhuǎn)向、返回語(yǔ)句。函數(shù)調(diào)用語(yǔ)句:在函數(shù)調(diào)用后加分號(hào)構(gòu)成。如:
sin(x);表達(dá)式語(yǔ)句:在表達(dá)式后加分號(hào)構(gòu)成。如:i=i+1;空語(yǔ)句:僅由一個(gè)分號(hào)所構(gòu)成,不執(zhí)行任何動(dòng)作。復(fù)合語(yǔ)句(也稱塊語(yǔ)句):用花括號(hào){}把一個(gè)或多個(gè)語(yǔ)句括起來(lái)后構(gòu)成的語(yǔ)句。作為一個(gè)語(yǔ)句處理。第1頁(yè)/共62頁(yè)5.2選擇結(jié)構(gòu)語(yǔ)句選擇語(yǔ)句也稱分支語(yǔ)句:根據(jù)給定條件,選擇執(zhí)行兩個(gè)或兩個(gè)以上分支程序段中的某一個(gè)。C++語(yǔ)言的選擇語(yǔ)句:
條件語(yǔ)句:if。有三種形式。開(kāi)關(guān)語(yǔ)句:switch。第2頁(yè)/共62頁(yè)條件語(yǔ)句格式1:if(<表達(dá)式>)S其中,<表達(dá)式>是任何C++表達(dá)式,通常為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式或逗號(hào)表達(dá)式;S是一個(gè)單一語(yǔ)句,包括復(fù)合語(yǔ)句和空語(yǔ)句。作為判斷條件的<表達(dá)式>必須用括號(hào)括起來(lái)。格式2:if(<表達(dá)式>)S1elseS2第3頁(yè)/共62頁(yè)例5.1從鍵盤上輸入三個(gè)整數(shù),輸出三個(gè)數(shù)中的最大數(shù)。分析:先讀入三個(gè)數(shù),求出前兩個(gè)數(shù)中的大數(shù),再求出該大數(shù)與第三個(gè)數(shù)之間的最大數(shù)。#include<iostream.h>voidmain(void){inta,b,c,t;cout<<"輸入三個(gè)整數(shù):";
cin>>a>>b>>c;if(a>b)t=a;elset=b;//Acout<<"\n最大數(shù)是";//Bif(t>c)cout<<t<<'\n';elsecout<<c<<'\n';//C}A、B、C三行可用下列語(yǔ)句替代:t=a;if(t<b)t=b;if(t<c)t=c;cout<<"\n最大數(shù)是"<<t<<endl;第4頁(yè)/共62頁(yè)例5.2求ax2+bx+c=0的根。a、b、c從鍵盤輸入,a≠0。分析:當(dāng)輸入a、b、c的值后,若b2-4ac<0,則方程無(wú)實(shí)根;若b2-4ac>0,則方程有兩個(gè)不同的實(shí)根;若b2-4ac=O,則方程有兩個(gè)相等的實(shí)根。#include<iostream.h>#include<math.h>voidmain(void){floata,b,c,delta;cout<<"輸入三個(gè)系數(shù):";
cin>>a>>b>>c;delta=b*b-4*a*c;第5頁(yè)/共62頁(yè)if(delta>=0)//使用復(fù)合語(yǔ)句{delta=sqrt(delta);if(delta){cout<<"方程有兩個(gè)不同的實(shí)根:";
cout<<"\nx1="<<(-b+delta)/2/a;cout<<"\tx2="<<(-b-delta)/2/a<<'\n';}elsecout<<"方程有兩個(gè)相等的實(shí)根:x1=x2="<<-b/2/a<<'\n';}elsecout<<"方程沒(méi)有實(shí)根!\n";}第6頁(yè)/共62頁(yè)條件語(yǔ)句格式3:
if(<表達(dá)式1>)S1elseif(<表達(dá)式2>)S2elseif...elseSn注意,當(dāng)出現(xiàn)如下形式的嵌套條件語(yǔ)句時(shí):
if(e1)if(e2)S1elseS2C++規(guī)定:else與其前面最近的還沒(méi)有配對(duì)的if進(jìn)行配對(duì)。這樣,上面的條件語(yǔ)句中else與第二個(gè)if配對(duì)。若希望else與第一個(gè)if配對(duì),則可用{}改變:
if(e1){if(e2)S1}elseS2第7頁(yè)/共62頁(yè)例5.3輸入三角形的三邊,判斷其為何種三角形。#include<iostream.h>voidmain(void){inta,b,c;cout<<"輸入三角形的三邊?";
cin>>a>>b>>c;if(a+b<=c||b+c<=a||a+c<=b)cout<<"不能組成三角形!\n";elseif(a==b&&b==c)cout<<"等邊三角形\n";elseif(a==b||b==c||c==a)cout<<"等腰三角形\n";elseif(a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b)cout<<"直角三角形\n";elsecout<<"普通三角形\n";}第8頁(yè)/共62頁(yè)開(kāi)關(guān)語(yǔ)句:switch格式:switch(<表達(dá)式>){case<常量表達(dá)式1>:[<語(yǔ)句序列1>];[break;]case<常量表達(dá)式2>:[<語(yǔ)句序列2>];[break;]
…case<常量表達(dá)式n>:[<語(yǔ)句序列n>];[break;][default:<語(yǔ)句序列>]}
值只能是字符型或整型可選項(xiàng)default分支可放在開(kāi)關(guān)語(yǔ)句中的任何位置,通常為開(kāi)關(guān)語(yǔ)句的最后一個(gè)分支。應(yīng)加空格,否則被認(rèn)為是語(yǔ)句標(biāo)號(hào),如case9,并不出現(xiàn)語(yǔ)法錯(cuò),這類錯(cuò)誤較難查找。<常量表達(dá)式>的值必須互不相同第9頁(yè)/共62頁(yè)開(kāi)關(guān)語(yǔ)句:switch執(zhí)行過(guò)程:先求<表達(dá)式>的值,再依次與case后面的<常量表達(dá)式>比較,若與某一<常量表達(dá)式>的值相等,則轉(zhuǎn)去執(zhí)行該case后邊的語(yǔ)句序列,一直執(zhí)行下去,直至遇到break語(yǔ)句或開(kāi)關(guān)語(yǔ)句的右花括號(hào)為止。否則,若有default分支,則執(zhí)行該分支后邊的語(yǔ)句序列,否則什么也不執(zhí)行。與if語(yǔ)句相比:⑴任一開(kāi)關(guān)語(yǔ)句均可用條件語(yǔ)句來(lái)實(shí)現(xiàn),但反之不然。原因是開(kāi)關(guān)語(yǔ)句限定表達(dá)式的取值類型,而條件語(yǔ)句中的條件表達(dá)式可取任意類型的值。⑵開(kāi)關(guān)語(yǔ)句結(jié)構(gòu)清晰,易理解。第10頁(yè)/共62頁(yè)例5.4輸入一個(gè)字符,判斷它是元音字母還是空白符。#include<iostream.h>voidmain(void){charc;cin.get(c);switch(c){case'a':case'A':case'e':case'E':case'i':case'I':case'o':case'O':case'u':case'U':cout<<"這是元音字母\n";break;case'':case'\n':case'\t':cout<<"這是空白符\n";break;default:cout<<"這是其它字符\n";}}請(qǐng)畫(huà)程序流程圖用if語(yǔ)句改寫本例若default分支及其語(yǔ)句前移到第一個(gè)分支,則如何修改程序而保持功能不變?當(dāng)省略case后面的語(yǔ)句序列時(shí),則可實(shí)現(xiàn)多個(gè)入口,執(zhí)行同一語(yǔ)句序列。第11頁(yè)/共62頁(yè)5.3循環(huán)結(jié)構(gòu)語(yǔ)句循環(huán):某條件成立時(shí),重復(fù)執(zhí)行的操作。問(wèn)題:計(jì)算1+2+3+…+100。分析:編程時(shí)不可能依次列出1~100個(gè)數(shù)。設(shè)變量sum--累計(jì)和值,初值為1;變量i--存放當(dāng)前待累計(jì)的數(shù),初值為2。算法:
s1.給變量sum賦初值1,i賦初值2;
s2.令sum=sum+i,i=i+1;s3.若i<=100,則轉(zhuǎn)s2;s4.輸出sum的值。s2和s3是重復(fù)執(zhí)行的操作。while、do…while和for語(yǔ)句實(shí)現(xiàn)循環(huán),并把這三個(gè)語(yǔ)句稱為循環(huán)結(jié)構(gòu)語(yǔ)句。第12頁(yè)/共62頁(yè)while語(yǔ)句格式:while(<表達(dá)式>)S其中,表達(dá)式是任何表達(dá)式;語(yǔ)句S是任一語(yǔ)句,稱為循環(huán)體。執(zhí)行過(guò)程:先計(jì)算表達(dá)式的值,若表達(dá)式的值不等于0,則執(zhí)行語(yǔ)句S,再計(jì)算表達(dá)式的值,重復(fù)以上過(guò)程,直到表達(dá)式的值等于0為止。特點(diǎn):先判斷后執(zhí)行,故循環(huán)體有可能一次也不執(zhí)行。第13頁(yè)/共62頁(yè)例5.6用while語(yǔ)句求1+2+3+…+100的值。#include<iostream.h>voidmain(void){inti=2,//待求和的當(dāng)前項(xiàng)
s=1;//當(dāng)前項(xiàng)前所有項(xiàng)的累加和
while(i<=100){s+=i;i++;}cout<<"1+2+3+…+100="<<s<<'\n';}必須明確所用變量的含義及初值或:while(i<=100)s+=i,i++;或:while(i<=100)s+=i++;此處無(wú)須使用復(fù)合語(yǔ)句此處必須使用復(fù)合語(yǔ)句在循環(huán)體或表達(dá)式內(nèi),應(yīng)有改變表達(dá)式的值的成分,否則,會(huì)產(chǎn)生無(wú)休止的循環(huán)(稱死循環(huán))。第14頁(yè)/共62頁(yè)第15頁(yè)/共62頁(yè)do…while語(yǔ)句格式:
do
語(yǔ)句
while(<表達(dá)式>);語(yǔ)句為任一語(yǔ)句,是循環(huán)體;表達(dá)式是任一表達(dá)式。執(zhí)行過(guò)程:先執(zhí)行語(yǔ)句,后判斷表達(dá)式的值;若表達(dá)式的值不為0,則繼續(xù)執(zhí)行循環(huán)體,直到表達(dá)式的值為0時(shí)為止。特點(diǎn):先執(zhí)行后判斷,故循環(huán)體至少執(zhí)行一次。第16頁(yè)/共62頁(yè)例5.7用do…while語(yǔ)句求1+2+…+100。#include<iostream.h>voidmain(void){inti=2,//待求和的當(dāng)前項(xiàng)
s=1;//當(dāng)前項(xiàng)前所有項(xiàng)的累加和
dos+=i++;while(i<=100);cout<<"1+2+3+…+100="<<s<<'\n';}在循環(huán)體或表達(dá)式內(nèi),應(yīng)有改變表達(dá)式的值的成分,否則,會(huì)產(chǎn)生無(wú)休止的循環(huán)(稱死循環(huán))。分號(hào)不能忘!第17頁(yè)/共62頁(yè)第18頁(yè)/共62頁(yè)for語(yǔ)句格式:
for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)語(yǔ)句表達(dá)式1~3是任何表達(dá)式;語(yǔ)句是任一語(yǔ)句,為循環(huán)體。特點(diǎn):先判斷后執(zhí)行,循環(huán)體有可能一次也不執(zhí)行。執(zhí)行過(guò)程:⑴計(jì)算表達(dá)式1;⑵若表達(dá)式2的值為0,則執(zhí)行⑷,否則轉(zhuǎn)⑶;⑶執(zhí)行語(yǔ)句,計(jì)算表達(dá)式3,轉(zhuǎn)⑵;⑷結(jié)束循環(huán)。第19頁(yè)/共62頁(yè)例5.8用for語(yǔ)句求1+2+…+100。#include<iostream.h>voidmain(void){inti,//待求和的當(dāng)前項(xiàng)
s;//當(dāng)前項(xiàng)前所有項(xiàng)的累加和
for(i=2,s=1;i<=100;i++)s+=i;cout<<"1+2+3+…+100="<<s<<endl;}表達(dá)式1通常用于設(shè)置循環(huán)初值,多為賦值表達(dá)式和逗號(hào)表達(dá)式。表達(dá)式2通常用于循環(huán)結(jié)束條件的判斷,多為關(guān)系表達(dá)式、邏輯表達(dá)式。表達(dá)式3通常用于改變循環(huán)的結(jié)束條件。表達(dá)式2也可?。篿=2,s=1;for(;;){s+=i++;if(i>100)break;}三個(gè)表達(dá)式可分別省和同時(shí)省,但兩個(gè)分號(hào)不可省,三個(gè)表達(dá)式的作用不能省:i=2,s=1;
for(;i<=100;)s+=i++;第20頁(yè)/共62頁(yè)第21頁(yè)/共62頁(yè)從循環(huán)的組成要素上講,for語(yǔ)句的常用形式應(yīng)為:
for(循環(huán)變量初始化;循環(huán)結(jié)束條件;循環(huán)變量更新)循環(huán)體語(yǔ)句例5.9輸入一行字符,并按輸入的順序輸出該行字符。#include<iostream.h>voidmain(void){charc;cout<<“輸入一行字符串:\n";
for(cin.get(c);c!='\n';cin.get(c))cout<<c;//依次輸出字符cout<<c;//輸出最后一個(gè)字符,即結(jié)束條件'\n'}依次讀取字符直到讀取的是換行符為止第22頁(yè)/共62頁(yè)三種循環(huán)語(yǔ)句的比較for和while語(yǔ)句都是先判斷循環(huán)條件,循環(huán)體可能一次也不執(zhí)行。而do…while語(yǔ)句是先執(zhí)行循環(huán)體,后判斷循環(huán)條件,所以循環(huán)體至少要執(zhí)行一次。因此對(duì)于至少要執(zhí)行一次重復(fù)結(jié)構(gòu)的程序段,建議使用do…while語(yǔ)句,而對(duì)于其他的重復(fù)結(jié)構(gòu)的程序段,可使用for或while語(yǔ)句。由于for語(yǔ)句有三個(gè)表達(dá)式,可分別用于循環(huán)變量初始化、循環(huán)結(jié)束條件和循環(huán)控制變量的更新,所以用得最多的是for語(yǔ)句,其次是while語(yǔ)句,而do…while語(yǔ)句相對(duì)于前兩種語(yǔ)句用得少一些。第23頁(yè)/共62頁(yè)合理使用循環(huán)語(yǔ)句合理使用循環(huán)語(yǔ)句,可優(yōu)化程序結(jié)構(gòu),精簡(jiǎn)程序。例如,例5.9再用while和do…while語(yǔ)句實(shí)現(xiàn):#include<iostream.h>voidmain(void){charc;cout<<“輸入字符串:\n";cin.get(c);while(c!='\n'){cout<<c;cin.get(c);}cout<<c;}#include<iostream.h>voidmain(void){charc;cout<<“輸入字符串:\n";do{cin.get(c);cout<<c;}while(c!='\n');}從例5.9的三個(gè)程序可見(jiàn),本例用do…while語(yǔ)句時(shí),程序最簡(jiǎn),其次為for語(yǔ)句,再次為while語(yǔ)句。第24頁(yè)/共62頁(yè)循環(huán)的嵌套及其應(yīng)用循環(huán)的嵌套:循環(huán)的內(nèi)嵌語(yǔ)句也可以是循環(huán)語(yǔ)句。例5.10輸出1000以內(nèi)所有完數(shù)?!巴陻?shù)”是指與其因子之和相等的數(shù)。例如6=1+2+3,即6是完數(shù)。輸出完數(shù)按如下形式,例如,對(duì)于完數(shù)6,應(yīng)顯示:6=1+2+3分析:⑴sum——保存一個(gè)數(shù)的因子和;⑵i——1000以內(nèi)的一個(gè)數(shù),初值為2,終值為1000;⑶j——i的試探因子,取值從1到i/2。因1是i的因子,故直接作為sum的初值,j的初值為2。若i%j為0,則說(shuō)明j是i的因子,則sum+=j。第25頁(yè)/共62頁(yè)#include<iostream.h>voidmain(void){inti,//1000以內(nèi)的一個(gè)數(shù)
j,//i的試探因子
sum;//i的因子和
for(i=2;i<=1000;i++)//外層for語(yǔ)句{for(sum=1,j=2;j<=i/2;j++)//內(nèi)層for語(yǔ)句
if(i%j==0)sum+=j;if(sum==i)//i是完數(shù),按指定格式輸出{cout<<i<<"=1”;for(j=2;j<=i/2;j++)//因未存i的因子,需再求
if(i%j==0)cout<<'+'<<j;cout<<endl;}}}第26頁(yè)/共62頁(yè)5.4轉(zhuǎn)向語(yǔ)句goto語(yǔ)句是一條非常簡(jiǎn)單的無(wú)條件轉(zhuǎn)向語(yǔ)句,它可以將程序的執(zhí)行流程轉(zhuǎn)到程序中的任何位置,通常是從它所在的地方轉(zhuǎn)移到帶有標(biāo)號(hào)的語(yǔ)句處。goto語(yǔ)句與條件語(yǔ)句組合,可形成當(dāng)型和直到型循環(huán)。濫用goto語(yǔ)句,會(huì)導(dǎo)致程序流程過(guò)于復(fù)雜,降低程序的可讀性、可維護(hù)性等。軟件危機(jī)爆發(fā)后,goto語(yǔ)句一度成為爭(zhēng)論的焦點(diǎn)。結(jié)構(gòu)化程序設(shè)計(jì)為了保持程序結(jié)構(gòu)的"單入口、單出口"特性,嚴(yán)格限制直接使用goto語(yǔ)句,但考慮到有時(shí)不得不改變程序執(zhí)行的流程,C++語(yǔ)言提供了功能受到限制的轉(zhuǎn)向語(yǔ)句break和continue來(lái)替代goto語(yǔ)句。第27頁(yè)/共62頁(yè)break語(yǔ)句格式:
break;該語(yǔ)句只用在switch或循環(huán)語(yǔ)句中。用在開(kāi)關(guān)語(yǔ)句switch中的某個(gè)分支語(yǔ)句中,其作用是結(jié)束開(kāi)關(guān)語(yǔ)句的執(zhí)行,并把控制轉(zhuǎn)移到該開(kāi)關(guān)語(yǔ)句之后的第一個(gè)語(yǔ)句執(zhí)行。用在循環(huán)語(yǔ)句的循環(huán)體中,當(dāng)執(zhí)行到break語(yǔ)句時(shí),直接結(jié)束該循環(huán)語(yǔ)句的執(zhí)行,把控制轉(zhuǎn)移到緊跟該循環(huán)語(yǔ)句之后的語(yǔ)句執(zhí)行。第28頁(yè)/共62頁(yè)例5.11判別所輸入的一個(gè)大于1的正整數(shù)是否是素?cái)?shù)。#include<iostream.h>#include<math.h>voidmain(void){intx,i,j;//x存放所輸入的正整數(shù)
cout<<"輸入兩個(gè)大于1的正整數(shù)?";
cin>>x;for(i=2,j=(int)sqrt(x);i<=j;i++)if(x%i==0)break;if(i>j)cout<<x<<"是素?cái)?shù)!\n";elsecout<<x<<"不是素?cái)?shù)!\n";}若x%i為0,說(shuō)明i是x的因子,即x不可能是素?cái)?shù),無(wú)需再做后續(xù)的循環(huán)。因此,用break語(yǔ)句提前結(jié)束循環(huán)。for有兩個(gè)出口:i>j:說(shuō)明x沒(méi)有大于2和小于自身的因子,即x是素?cái)?shù)。x%i==0:說(shuō)明x不可能是素?cái)?shù),此時(shí)i肯定小于等于j。根據(jù)i與j的關(guān)系來(lái)確定是何種情況結(jié)束for循環(huán)的。第29頁(yè)/共62頁(yè)特別關(guān)注:當(dāng)循環(huán)語(yǔ)句存在多個(gè)結(jié)束出口時(shí),通常會(huì)在該循環(huán)結(jié)束后,對(duì)不同結(jié)束出口作出不同的處理,因此,正確區(qū)分不同結(jié)束出口是非常重要的。問(wèn)題:例5.11程序中的for語(yǔ)句能否不用break語(yǔ)句?若能,如何修改for語(yǔ)句?第30頁(yè)/共62頁(yè)continue語(yǔ)句格式:
continue;只用在循環(huán)語(yǔ)句的循環(huán)體中,作用是結(jié)束本次循環(huán)的循環(huán)體,提前進(jìn)入下一次循環(huán)。對(duì)于while和do…while循環(huán)來(lái)說(shuō),若遇到continue,則跳到循環(huán)<表達(dá)式>的位置;而對(duì)于for循環(huán)來(lái)說(shuō),則跳到for循環(huán)的<表達(dá)式3>處。與break語(yǔ)句的區(qū)別:break是結(jié)束循環(huán);continue是結(jié)束本次循環(huán),提前進(jìn)入下一次循環(huán)。第31頁(yè)/共62頁(yè)例5.12輸入兩個(gè)大于1的正整數(shù)并輸出。若輸入有誤,則給出提示并允許重新輸入,直到輸入正確為止。分析:⑴檢查輸入數(shù)據(jù)很重要。例如在例5.11中,若運(yùn)行時(shí)輸入整數(shù)1,程序輸出也是"1是素?cái)?shù)!"。程序運(yùn)行時(shí),難免輸入出錯(cuò),應(yīng)允許用戶重新輸入,直到輸入正確為止,除非特殊場(chǎng)合,如用戶身份驗(yàn)證等。⑵為了便于輸入出錯(cuò)時(shí)重新輸入,程序使用do…while循環(huán),并設(shè)置一個(gè)輸入出錯(cuò)標(biāo)志error,用作輸出不同提示信息的依據(jù)和循環(huán)結(jié)束條件。第32頁(yè)/共62頁(yè)#include<iostream.h>voidmain(void){intx,y,//x、y分別存放所輸入的正整數(shù)
error=0;//輸入出錯(cuò)標(biāo)志。為1時(shí)出錯(cuò),為0時(shí)正常
cout<<"輸入兩個(gè)大于1的正整數(shù)?";
do{if(error)cout<<"\n\n輸入無(wú)效!\n重輸兩個(gè)大于1的正整數(shù)?";
error=0;cin>>x;if(x<2){error=1;continue;}cin>>y;if(y<2)error=1;}while(error);//error為1表示輸入出錯(cuò),需要重新輸入
cout<<"\n\n輸入的兩個(gè)數(shù)為"<<x<<','<<y<<endl;}第33頁(yè)/共62頁(yè)goto語(yǔ)句簡(jiǎn)介*標(biāo)號(hào)
label:S
S是任一語(yǔ)句,包括空語(yǔ)句;label為語(yǔ)句標(biāo)號(hào),簡(jiǎn)稱為標(biāo)號(hào),采用標(biāo)識(shí)符。標(biāo)號(hào)無(wú)需定義,可直接使用。goto語(yǔ)句
gotolabel;其中,label是語(yǔ)句標(biāo)號(hào),當(dāng)執(zhí)行到該語(yǔ)句時(shí),無(wú)條件地將控制轉(zhuǎn)移到標(biāo)有該標(biāo)號(hào)的語(yǔ)句處執(zhí)行。第34頁(yè)/共62頁(yè)*goto語(yǔ)句的主要用途從循環(huán)體內(nèi)轉(zhuǎn)移到循環(huán)體外:但可用break或continue替代。從多層循環(huán)的內(nèi)層跳到外層循環(huán)外:但這種用法不符合結(jié)構(gòu)化編程原則,不提倡使用。不允許從循環(huán)語(yǔ)句的外面轉(zhuǎn)移到循環(huán)語(yǔ)句的里面。與if語(yǔ)句構(gòu)成循環(huán):如例5.13所示。但可由while、do…while和for取代,因此也不提倡這樣使用。第35頁(yè)/共62頁(yè)例5.13用goto和if構(gòu)成循環(huán),求1+2+…+100的值。#include<iostream.h>voidmain(void){inti=2,//待求和的當(dāng)前項(xiàng)
s=1;//當(dāng)前項(xiàng)前的所有項(xiàng)的累加和lp:if(i<=100)//goto語(yǔ)句和if語(yǔ)句構(gòu)成while型循環(huán){s+=i++;gotolp;}cout<<"1+2+3+…+100="<<s<<'\n';}lp:s+=i++;//do…while型循環(huán)
if(i<=100)gotolp;第36頁(yè)/共62頁(yè)exit()函數(shù)exit()函數(shù)是stdlib.h庫(kù)中的函數(shù),原型為:
voidexit(intstatus);執(zhí)行該函數(shù)時(shí),將終止當(dāng)前程序的執(zhí)行并將控制返還操作系統(tǒng)。但終止前,系統(tǒng)要做必要的收尾工作,如關(guān)閉該程序打開(kāi)的文件,寫完緩沖輸出的內(nèi)容,釋放變量占用內(nèi)存(不含堆內(nèi)存)等。status為終止程序的原因,0表示正常退出,非0表示異常退出。第37頁(yè)/共62頁(yè)5.5程序舉例例5.14編程計(jì)算1!+2!+…+10!。分析:每項(xiàng)都是計(jì)算階乘,可用循環(huán)結(jié)構(gòu)處理。#include<iostream.h>voidmain(void){inti,//取值從1~10,初值為2
p,//保存i!,初值為1
s;//前i個(gè)階乘和,初值為1
for(i=2,p=1,s=1;i<=10;i++){p*=i;s+=p;}cout<<"1!+2!+3!+…+10!="<<s<<'\n';}程序運(yùn)行結(jié)果:1!+2!+3!+…+10!=4037913循環(huán)程序設(shè)計(jì)要點(diǎn):找出重復(fù)計(jì)算規(guī)律;合理安排計(jì)算,提高計(jì)算效率。如計(jì)算i!不是每次從頭開(kāi)始計(jì)算,而是利用(i-1)!(保存在p中)再乘i所得。第38頁(yè)/共62頁(yè)n!的溢出問(wèn)題及處理用double或longdouble型變量存放階乘值。對(duì)于某些C++系統(tǒng),可用8字節(jié)整型,如VC++的_int64。自編大整數(shù)運(yùn)算程序:例如使用字符型數(shù)組實(shí)現(xiàn)。近似方法:當(dāng)階乘值大于等于10時(shí),就除以10,使指數(shù)加1。最后將尾數(shù)和指數(shù)分別輸出。第39頁(yè)/共62頁(yè)#include<iostream.h>voidmain(void){inti,e;//e保存階乘的指數(shù),初值為0
doublep;//保存階乘的尾數(shù),初值為1
for(i=2,p=1,e=0;i<=1000000;i++){p*=i;
while(p>=10)//階乘p反復(fù)除以10,分離指數(shù)
{p/=10.0;e++;}}cout<<"1000000!="<<p<<'e'<<e<<endl;}程序運(yùn)行結(jié)果:1000000!=8.26393e5565708第40頁(yè)/共62頁(yè)例5.15編寫程序,利用以下公式計(jì)算π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-8為止。
分析:本題屬于求和問(wèn)題,可用循環(huán)語(yǔ)句解決。主要特點(diǎn):⑴所算的項(xiàng)數(shù)是未知,循環(huán)的結(jié)束條件是最后一項(xiàng)的絕對(duì)值小于10-8。⑵每個(gè)計(jì)算項(xiàng)的符號(hào)正負(fù)相間,每一項(xiàng)的分母比前一項(xiàng)增加2。⑶要求計(jì)算到最后一項(xiàng)的絕對(duì)值小于10-8,即有效位數(shù)超過(guò)7位,已超出float型的精度范圍,應(yīng)使用double型。第41頁(yè)/共62頁(yè)#include<iostream.h>#include<math.h>#include<iomanip.h>voidmain(){doublepi=0,//π/4的前n項(xiàng)的和,初值為0t=1,//π/4的當(dāng)前項(xiàng)的值,初值為1n=1;//n表示分母
ints=-1;//s表示符號(hào)
while(fabs(t)>=1E-8){pi+=t;n+=2;s=-s;t=-s/n;}cout<<"π≈"<<setiosflags(ios::fixed)<<setprecision(8)<<pi*4<<endl;}程序運(yùn)行結(jié)果:
π≈3.14159263第42頁(yè)/共62頁(yè)例5.16用迭代法求的近似值。求平方根的迭代公式為:
直到|xn+1-xn|≤10-8為止。分析:迭代法是數(shù)值近似計(jì)算的重要方法之一。變量a—存放輸入的正數(shù)變量x0—代表公式里的xn,初值為a/2變量x1—代表公式里的xn+1,其值由公式計(jì)算算法:若|x1-x0|≤10-8則x1就是所求平方根的近似值;否則將x1賦給x0,再計(jì)算新的x1,重復(fù)上述過(guò)程。第43頁(yè)/共62頁(yè)#include<iostream.h>#include<iomanip.h>#include<math.h>voidmain(void){doublex0,x1,a;cout<<"輸入一個(gè)正數(shù):";cin>>a;while(a<0)//檢查輸入數(shù)據(jù)
{cout<<a<<"不能開(kāi)方!\n請(qǐng)重輸入一個(gè)正數(shù):";cin>>a;}第44頁(yè)/共62頁(yè)x1=a/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x1-x0)>1e-8);cout<<a<<"的平方根等于:"<<setiosflags(ios::fixed)<<setprecision(8)<<x1<<'\n';}程序運(yùn)行結(jié)果:輸入一個(gè)正數(shù):3↙3的平方根等于:1.73205081第45頁(yè)/共62頁(yè)例5.17輸入一行字符,分別統(tǒng)計(jì)數(shù)字字符、字母字符和其它字符的個(gè)數(shù)。分析:輸入任何字符使用cin.get()函數(shù)。源程序:#include<iostream.h>voidmain(void){intdigit=0,//統(tǒng)計(jì)數(shù)字字符的個(gè)數(shù)
letter=0,//統(tǒng)計(jì)字母字符的個(gè)數(shù)
other=0;//統(tǒng)計(jì)其他字符的個(gè)數(shù)
charc;第46頁(yè)/共62頁(yè)cout<<“輸入一行字符串:\n";do{cin.get(c);if(c>='0'&&c<='9')digit++;elseif(c>='a'&&c<='z'||c>='A'&&c<='Z')letter++;elseother++;}while(c!='\n');cout<<"\n數(shù)字字符的個(gè)數(shù)="<<digit++<<",字母字符的個(gè)數(shù)="<<letter++<<",其它字符的個(gè)數(shù)="<<other++<<endl;}第47頁(yè)/共62頁(yè)例5.18用生成偽隨機(jī)數(shù)的庫(kù)函數(shù)rand(),設(shè)計(jì)一個(gè)自動(dòng)出題程序,能實(shí)現(xiàn)兩位正整數(shù)的四則運(yùn)算。四則運(yùn)算的具體類型也由隨機(jī)數(shù)確定。共出10題,每題10分,最后給出總分。注意,減法計(jì)算題要保證被減數(shù)大于等于減數(shù),除法的結(jié)果為商。分析:①偽隨機(jī)數(shù)庫(kù)函數(shù)rand()的介紹參見(jiàn)3.4.2節(jié)。②兩位正整數(shù)的范圍是10~99,共90個(gè)數(shù),因此,用rand()函數(shù)生成的兩位正整數(shù)可表示為:
rand()%90+10③其它說(shuō)明參見(jiàn)程序中的注釋。源程序如下。第48頁(yè)/共62頁(yè)源程序:#include<iostream.h>#include<stdlib.h>voidmain(void){inti,//循環(huán)變量,用作出題序號(hào)
a,b,//隨機(jī)生成的兩個(gè)操作數(shù)
c,//計(jì)算機(jī)算出的參考答案
d,//答題者算出的答案
op,//隨機(jī)生成的運(yùn)算類型
sum=0;//答題者答題累計(jì)所得分?jǐn)?shù)
srand(c);//初始化偽隨機(jī)數(shù)發(fā)生器第49頁(yè)/共62頁(yè)for(i=0;i<10;i++){a=rand()%90+10;b=rand()%90+10;op=rand()%4;switch(op){case0:cout<<a<<'+'<<b<<'=';c=a+b;break;case1:if(a<b){intt=a;a=b;b=t;}cout<<a<<'-'<<b<<'=';c=a-b;break;case2:cout<<a<<'*'<<b<<'=';c=a*b;break;case3:cout<<a<<'/'<<b<<'=';c=a/b;}第50頁(yè)/共62頁(yè)cin>>d;if(d==c){sum+=10;cout<<"正確,加10分!\n";}elsecout<<"錯(cuò)誤,不得分!\n";}cout<<“10題中,答對(duì):”<<sum/10<<“題,得分:"<<sum<<'\n';}第51頁(yè)/共62頁(yè)例5.19在同一坐標(biāo)中輸出sinx和cosx兩條曲線。應(yīng)注意處理以下問(wèn)題:⑴用's'代表sinx曲線,用'c'代表cosx曲線;⑵當(dāng)x為某值時(shí),若sinx=cosx,此時(shí)只要求輸出's';⑶輸出一條軸(x軸),由字符'l'或'!'或'|'構(gòu)成。分析:⑴字符界面:每屏25行,每行80個(gè)字符。若顯示內(nèi)容超過(guò)25行,則前面顯示的內(nèi)容向前滾動(dòng)并消失。⑵坐標(biāo)系統(tǒng):為了便于周期性顯示正弦和余弦曲線,將顯示器的水平方向作為y軸,垂直方向作為x軸。⑶正弦和余弦函數(shù)的取值范圍為[-1,1],需將其展寬映射到[-38,38],再映射到[1,77],以便顯示。⑷為了整屏顯示正弦和余弦函數(shù)的一個(gè)周期,從一個(gè)周期上等間隔取了24點(diǎn)。第52頁(yè)/共62頁(yè)第53頁(yè)/共62頁(yè)#include<iostream.h>#include<math.h>#definePI3.1415926voidmain(void
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版承包工地食堂餐廚垃圾處理合同模板3篇
- 2024蔬菜加工產(chǎn)品銷售合作協(xié)議3篇
- 2024年股權(quán)轉(zhuǎn)讓合同標(biāo)的及屬性詳細(xì)描述
- 2024年版物業(yè)托管服務(wù)協(xié)議版B版
- 二零二五版離婚協(xié)議書(shū)起草與審核合同2篇
- 2024版房屋贈(zèng)與合同協(xié)議書(shū)大全
- 天津中德應(yīng)用技術(shù)大學(xué)《教育技術(shù)與傳播》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版家政服務(wù)+家庭健康促進(jìn)合同3篇
- 太原幼兒師范高等專科學(xué)?!段麽t(yī)外科學(xué)醫(yī)學(xué)免疫學(xué)與病原生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年特殊用途變壓器安裝與性能測(cè)試合同2篇
- 對(duì)口升學(xué)《計(jì)算機(jī)應(yīng)用基礎(chǔ)》復(fù)習(xí)資料總匯(含答案)
- 《浸沒(méi)式液冷冷卻液選型要求》
- 迪士尼樂(lè)園總體規(guī)劃
- 2024年江蘇省蘇州市中考數(shù)學(xué)試卷含答案
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項(xiàng)考試題庫(kù)
- 介紹蝴蝶蘭課件
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第2版) 課件 第1章 計(jì)算機(jī)概述
- 數(shù)字化年終述職報(bào)告
- 2024年職工普法教育宣講培訓(xùn)課件
- 安保服務(wù)評(píng)分標(biāo)準(zhǔn)
- T-SDLPA 0001-2024 研究型病房建設(shè)和配置標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論