c++課件1cppChp2章節課件_第1頁
c++課件1cppChp2章節課件_第2頁
c++課件1cppChp2章節課件_第3頁
c++課件1cppChp2章節課件_第4頁
c++課件1cppChp2章節課件_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

13:04:061第二章內容說明語句(DeclarativeStatements)條件語句(ConditionStatements

)

循環語句(LoopStatements

)

循環設計(LoopDesigns

)輸入輸出語句(Input/OutputStatements

)

轉移語句(MoveStatements

)

再做循環設計(MoreLoopDesigns

)

13:04:0621.說明語句(DeclarativeStatements)數據說明:求解問題所使用的數據是什么性質,進行什么運算,表達范圍如何,必須預先說明說明方式:既要指明其名字,也要指明其是什么類型,還可以順便初始化.如:

inta;doubled=3.5;說明數據的另一個目的是創建一個所需大小的實體空間給該名字,以便存儲所用的數據值若數據名字沒有說明,使用其便是非法的13:04:063過程(函數)說明:

求解中需要通過函數調用來實施求解時,便要對函數的性質進行說明,說明其返回類型,參數類型,參數個數

函數說明分函數聲明和函數定義兩種:

函數聲明是說明函數的名字,函數的返回類型,以及函數的參數和個數.如:

doublearea(doublera);

函數定義是在函數聲明的基礎上,對整個實現過程進行詳細定義.如:

doublearea(doublera){

returnra*ra*3.14;

}

13:04:064調用函數就是使用函數名字,使用名字前必須清楚名字的性質,所以必須先對函數進行聲明.

運行程序中,會涉及到被調用函數的執行,所以凡是被調用的函數都必須有函數定義,不管該定義在程序的什么位置.如:

doublesphere();//聲明

intmain(){

doubleresult=sphere();//調用

cout<<“area:”<<result<<“\n”;

}

voidsphere(){//定義

cout<<“Pleaseinputradius:”;

doubler;cin>>r;

returnr*r*3.14;

}13:04:0652.條件語句(ConditionStatements

)if語句的兩種形態:

語句1條件語句1條件語句2是是否否13:04:066對應語句:

if(a>b)cout<<a<<endl;if(a==b)cout<<a<<endl;elsecout<<b<<endl;

13:04:067錯綜復雜時,必須注意兩義性:

if(x>0)if(x<50)cout<<”xisok.\n”;elsecout<<”xisnotok.\n”;正解:else從屬于緊挨的if

if(x>0){if(x<50)cout<<”OK\n”;elsecout<<”NOTOK\n”;}誤解:else從屬于外面的if

if(x>0){if(x<50)cout<<”OK\n”;}elsecout<<”NOTOK\n”;13:04:068條件表達式:對于

if(x)a=327981;elseb=327981;可表示為:

x?a=327981:b=327981;如果a和b為同類型,則還可以:

(x?a:b)=327981;13:04:069switch多分支語句:

switch(整數表達式){casevalue1:

語句1;break;casevalue2:

語句2;break;…default:

語句n;}等價于:

if(整數表達式==value1)

語句1;elseif(整數表達式==value2)

語句2;…else

語句n;}13:04:0610雖然switch有等價的復合if表示,而且,分支判斷值只能是整數,顯得應用范圍狹窄,但是switch在使用上的直觀和靈活形式,使得其仍具有編程價值.如:break可選,甚至case可以重疊:

casevalue1:

語句1;casevalue2:

語句2;casev1:casev2:casev3:語句;13:04:06113.循環語句

(LoopStatements

)for循環結構:

開始循環初始狀態循環體狀態修正條件判斷未結束結束結束13:04:0612對應語句為:

for(inti=1;i<=10;i++)cout<<”hello.\n”;循環初始狀態條件判斷狀態修正循環體13:04:0613每次循環體執行,都改變循環狀態,直到條件不滿足而終止.如,設置求和的初始值,交給循環計算,完成循環后,輸出求和結果:intsum=0;for(inti=1;i<=100;i++){sum=sum+i;}cout<<sum<<endl;循環開始循環結束13:04:0614因為并不是所有循環都有明顯的循環初始狀態和狀態修正的,所以,while循環是一種for循環的簡潔形式.如,同樣的求和:intsum=0,i=1;while(i<=100)sum+=i++;cout<<sum<<endl;循環開始循環結束13:04:06154.循環設計(LoopDesigns

)(1)簡單字符圖形的雙重循環MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM13:04:0616分析方法:該圖形一共10行,每一行增加一個字符,所以,應循環10次,每次輸出一行,其循環模式為:for(inti=1;i<=10;++i){

輸出第i行(循環)

換行}行iM個數

111222333444...10101013:04:0617for(inti=1;i<=10;++i){

for(intj=1;j<=i;++j)cout<<”M”;cout<<endl;}13:04:0618(2)判斷素數:(利用數學定律)m=i×j假定i≤j,則i2≤i×j=m≤j2

即i2≤m≤j2

即i≤√m≤j

boolisPrime(intm){

doublesqm=sqrt(m*1.0);

for(inti=2;i<=sqm;++i)

if(m%i==0)return

false;

return

true;}13:04:06195.輸入輸出語句(Input/OutputStatements

)

標準輸出流:可以控制輸出格式cout<<showpos<<12;//+12cout<<hex<<18<<”“<<showbase<<18;//120x12cout<<hex<<255<<”“<<uppercase<<255;//ffFFcout<<123.0<<”“<<showpoint<<123.0;//123123.000cout<<(2>3)<<”“<<boolalpha<<(2>3);//0falsecout<<fixed<<12345.678;//12345.678000cout<<scientific<<123456.678;//1.234568e+0513:04:0620控制寬度和填充字符的操作是帶參數的,注意width(n)為一次性操作,即第二次顯示時將不再有效。默認為width(0),表示僅顯示數值。例如:cout.width(5);cout.fill(‘S’);cout<<23<<23;//輸出:SSS2323在頭文件iomanip的支持下,還可以直接由<<操作:#include<iomanip>…cout<<setw(6)<<setfill(‘$’)<<27<<endl;//輸出:$$$$2713:04:0621文件流的輸入出操作與標準輸入出基本相同,只是需要以一定方式打開和關閉如,將文件a.in打開,逐行讀入字符,輸出到文件a.out:

ifstreamin(“a.in”);ofstreamout(“a.out”);

for(strings;getline(in,s);)out<<s<<endl;其中文件流讀入操作總是伴隨著狀態返回,判斷狀態就可以確定文件是否正常讀入,如getline(in,s)當讀到文件尾時,便返回false,以使循環結束13:04:06226.轉移語句(MoveStatements

)

break除了用在switch之外,主要的是用在終結本次循環for(inti;;){

for(;;){//...

if(i==1)

break;//...}a=1;//...}break跳到此處13:04:0623continue一般是用條件判斷執行的,通過反條件,可以免去continue的使用,所以,它用來構筑良好的程序風格

for(intn=100;n<=200;++n){

if(n%3==0)

continue;cout<<n<<endl;}免去continue的情形:

for(intn=100;n<=200;++n)

if(n%3!=0)cout<<n<<endl;

13:04:0624goto的程序段除了系統跟蹤和架構困難外,閱讀也相對復雜:

inta;

gotoInit;Forward:a=a+1;Print:cout<<a<<endl;

gotoDown;Init:a=1;

gotoPrint;Down:

if(a<100)gotoForward;等價于:

for(inti=1;i<=100;++i)cout<<i<<“\n”;13:04:0625break語句的可取之處://用break語句的代碼段boolflag=false;//用于做退出記號for(inti=1;i<100;++i){for(intj=1;j<100;++j)

if(i*j==651){flag=true;

break;}else{//...}

if(flag)break;}//goto語句的代碼段for(inti=1;i<100;++i)for(intj=1;j<100;++j){

if(i*j==651)gotoEnd;//...}End:13:04:06267.再做循環設計(MoreLoopDesigns

)

邏輯判斷類的語句控制結構:

for(所有可能情況){//可為多重循環

if(條件1不滿足)continue;

if(條件2不滿足)continue;//…

if(條件n不滿足)continue;

輸出所要的結果

}13

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論