《Visual C++程序設計》課件第3章_第1頁
《Visual C++程序設計》課件第3章_第2頁
《Visual C++程序設計》課件第3章_第3頁
《Visual C++程序設計》課件第3章_第4頁
《Visual C++程序設計》課件第3章_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

3.1

程序設計概述

程序是計算機指令的序列,是用計算機語言來編寫的,計算機語言通常被稱為“程序語言”。

程序=數(shù)據(jù)結構+算法對于程序設計的初學者來說,首先要學會設計一個正確的程序。一個正確的程序通常包括:書寫正確與結果正確兩個含義。除此之外,還應追求高質(zhì)量:結構化程度高、可讀性好、可靠性高、便于調(diào)試等。通常一個簡單的程序設計一般包含以下幾個步驟:

1.分析問題,明確要求,建立數(shù)學模型。

2.確定數(shù)據(jù)結構和算法(有窮性、確定性、可執(zhí)行性、有零個或多個輸入、有一個或多個輸出)。

3.選擇語言,編制程序。

4.調(diào)試程序。

5.整理文檔,編制說明。

程序設計的基本目標是用算法對問題的原始數(shù)據(jù)進行處理,從而獲得所期望的效果。要做到這一點,就必須要掌握正確的程序設計方法和技術。結構化程序設計方法是公認的面向過程編程應遵循的基本方法和原則。該方法包括:

1.只采用順序結構、選擇結構和循環(huán)結構這三種基本的程序控制結構來編制程序,從而使程序具有“單入口和單出口”良好的結構;

2.程序設計自頂向下;

3.用結構化流程圖表示算法。3.2C++語句

1.聲明語句

聲明語句又稱說明語句,它可以用來對程序中出現(xiàn)的各種名稱進行聲明。這些名稱通常是表示變量、常量、函數(shù)、結構、類、對象等實際的標識符。如:charch;//聲明和定義char型變量intcount=1;//聲明、定義和初始化int型變量constdoublePI=3.14159;//聲明、定義和初始化double型變量

C++語言規(guī)定:一個實體的定義只能出現(xiàn)一次,而其聲明卻可以出現(xiàn)多次。但同一實體的多個聲明必須在類型上保持一致。形式:表達式;例如:

i++;sum=a+b; cout<<a<<b<<endl;3.控制語句

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

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

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

(3)循環(huán)語句:for語句、while語句、do-while語句2.表達式語句4.空語句

如:for(m=0;m<1000;m++);

形式:

;

作用:

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

例如:

if(x==0){cout<<a;cout<<b;}形式:{ [變量定義]

語句組

}作用:當程序中某個位置在語法上只允許一條語句,而在語義上要執(zhí)行多條語句才能完成某個操作時,需要使用復合語句。常出現(xiàn)在選擇、循環(huán)語句中3.3

順序結構

順序結構:按照語句出現(xiàn)的先后順序依次執(zhí)行。語句1語句2其中的語句可以是輸入/出、表達式、空或復合等【例3.1】輸入兩個整數(shù)給變量x和y,然后交換x和y的值。3.4選擇結構

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

形式1:

if(表達式)語句

作用:當表達式為真(非0)時,執(zhí)行表達式后面的語句,否則繞過該語句,而執(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(表達式)

語句1else

語句2

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

要使max存放x、y中大者,min存放小者,分析下面程序段正確否? if(x>y)max=x;min=y;elsemax=y;min=x;形式3:if(表達式1)

語句1elseif(表達式2)

語句2┆elseif(表達式n)

語句nelse

語句n+1作用:當表達式1的值為true時,執(zhí)行語句1;否則判斷當表達式2的值為true時執(zhí)行語句2;依此類推,若表達式的值都為false,則執(zhí)行語句n+1。【例3.4】已知成績mark,要求顯示對應五級制的評定,評定條件: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。③當多分支中有多個表達式同時滿足,則只執(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(表達式1)

if(表達式2)

語句1else

語句2注意:為了增強程序的可讀性,建議采用鋸齒型的書寫形式。

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

if(表達式11)

語句11else

語句12else

語句2【例3.5】已知x,y,z三個數(shù),使得x>y>z。可用一個IF語句和一個嵌套的IF語句實現(xiàn)。

if(x<y)

{t=x;x=y;y=t;}

if(y<z)

{t=y;y=z;z=t; if(x<y) {t=x;x=y;y=t;}}3.4.2switch語句執(zhí)行順序:當表達式的值與某個常量表達式的值相等時,則執(zhí)行該常量表達式后面相應的語句,若使用了break,則執(zhí)行完該語句后便退出switch語句;否則,還要依次執(zhí)行其后面的各條語句。若找不到相匹配的常量表達式,則執(zhí)行default后面的語句。必須為整型或字符型形式:switch(表達式){case常量表達式1:語句組1;[break;]case常量表達式2:語句組2;[break;]┆case常量表達式n:語句組n;[break;][default:語句組n+1]} 2a+1(1<=a<2)【例3.6】用switch結構求分段函數(shù)b=a2-3(2<=a<4) a其它共用同一個語句組:switch((int)a){case1:b=2*a+1;break;case2:case3:b=a*a-3;break;default:b=a;}錯誤:switch((int)a){casea>=1&&a<2:……casea>=2&&a<4:.…..default:b=a;}思考:若省去break語句,情況會怎樣?

3.5循環(huán)結構

C++語言提供了三種循環(huán)語句,流程圖如下:

whilewhile(表達式)

語句do

語句while(表達式);for(表達式1;表達式2;表達式3)

語句do-whilefor【例3.7】用上述三種循環(huán)語句求while語句:n=1;s=0;while(n<=100){s=s+n;n=n+1;}n=1;s=0;do{s=s+n;n=n+1;}while(n<=100);do-while語句:for語句:for(n=1,s=0;n<=100;n++)s=s+n;【例3.8】求下列級數(shù)的前m項和,要求其誤差小于0.00001。分析:

級數(shù)的通項為xm/m!,第i項ti與第i-1項ti-1之間存在如下關系:ti=ti-1*x/iinti(1);floatt(1),e(0),x;cin>>x;while(t>1e-5){e+=t;t=t*x/i;i++;}inti(1);floatt(1),e(0),x;cin>>x;for(;t>1e-5;){e+=t;t=t*x/i;i++;}for(i=1,t=1,e=0;t>1e-5;e+=t,t=t*x/i,i++);分號不能省略空語句3.5.3循環(huán)的嵌套循環(huán)的嵌套:循環(huán)體內(nèi)包含另一個完整的循環(huán)結構。三種循環(huán)語句皆可以相互嵌套。【例3.9】打印九九乘法表#include"iostream.h"voidmain(){cout<<"\t九九乘法表"<<endl;cout<<"\t-----------"<<endl;for(inti=1;i<=9;i++){ for(intj=1;j<=9;j++) cout<<i<<"×"<<j<<"="<<i*j<<'\t'; cout<<endl;}}程序:思考:打印上三角或下三角程序如何改動?3.6其它控制語句

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

for(m=20;m>0;m--){if(m%6==0)break;cout<<m<<"";}for(m=20;m>0;m--){if(m%6==0)continue;cout<<m<<"";}1.break語句break語句有兩個作用:用于switch語句中,保證多分支情況的正確執(zhí)行;用于循環(huán)語句中,強制終止本層循環(huán)(跳出本層循環(huán))。2.continue語句continue語句的作用:繞過本次循環(huán),強行進入下一次循環(huán)。即它只能跳過循環(huán)體中continue后面的語句。注意:

continue只能用于循環(huán)語句3.7應用舉例1.求最大值(或最小值)【例3.11】從鍵盤輸入一組數(shù),求這組數(shù)中的最大值。cin>>m;max=m;//第一個數(shù)假設為最大數(shù)

while(cin>>m,m!=0)if(m>max)max=m;max=0;//設一個較小的數(shù)為最大值的初值

for(inti=0;i<10;i++){cin>>m;if(m>max)max=m;}以輸入0作為結束,輸入數(shù)的個數(shù)未知輸入數(shù)的個數(shù)已知2.最大公約數(shù)

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

m=m-nm>nn=n-mn>m

m、n為公約數(shù)m=nwhile(m!=n)if(m>n)m-=n;elsen-=m;

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

m,r

n,再重復執(zhí)行(2)#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ù)為:"<<m<<endl;}程序:【例3.13】求2~100之間的素數(shù),并以每行顯示8個質(zhì)數(shù)。質(zhì)數(shù):除1和它本身外,不能被其他任何一個整數(shù)整除的自然數(shù)。分析:

(1)判別某數(shù)m是否為素數(shù)最簡單的方法是:用i=2,3,…,m-1逐個判別m能否被j整除,只要有一個能整除,m不是素數(shù),退出循環(huán);若都不能整除,則m是素數(shù)??蛇M一步證明:若m不能被3.質(zhì)數(shù)

........for(i=2;m%i!=0;i++);if(i==m)................k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)......中任一整數(shù)整除,則m為質(zhì)數(shù)。

(2)每行顯示8個,只要對求得的質(zhì)數(shù)計數(shù),滿8個換行。程序:#include

"iostream.h"voidmain(){intm,i,countm(0);booltag;for(m=2;m<=100;m++) {tag=false;//tag初值為false for(i=2;i<=m-1;i++) if(m%i==0)tag=true; if(tag==false) //等價于if(!tag) {cout<<m<<'\t'; countm++; if(countm%8==0)cout<<endl; } }}4.求部分級數(shù)和t=x;while(fabs(t)>=1e-5){sinx+=t;t=-t*x*x/((i+1)*(i+2));i=i+2;}【例3.14】計算sin(x)的值,公式為:當?shù)趎項的絕對值小于10-5時結束。分析:關鍵是找部分級數(shù)和的通項,如下表示:

ti+2=-1*ti*x*x/((i+1)*(i+2))i=1,3,5,7…5.窮舉法【例3.15】百元買百雞問題。假定小雞每只5角,公雞每只2元,母雞每只3元?,F(xiàn)有100元錢要買100只雞,列出所有可能的購雞方案。分析:

(1)設母雞、公雞、小雞各為x、y、z只,列出方程為:

x+y+y=100 3x+2y+0.5z=100三個未知數(shù),兩個方程,此題有若干個整數(shù)解。

(2)采用試湊法(也稱為窮舉法或枚舉法)來實現(xiàn),即將可能出現(xiàn)的各種情況一一羅列測試,判斷是否滿足條件,采用循環(huán)結構來實現(xiàn)。用三重循環(huán)來實現(xiàn):

for(x=0;x<33;x++)for(y=0;y<51;y++)for(z=0;z<201;z++){if(((3*x+2*y+0.5*z)==100)&&((x+y+z)==100))cout<<setw(9)<<x<<setw(9)<<y<<setw(9)<<z<<endl;}用二重循環(huán)來實現(xiàn):

for(x=0;x<=33;x++)for(y=0;y<=50;y++){z=100-x-y;if((3*x+2*y+0.5*z)==100)cout<<setw(9)<<x<<setw(9)<<y<<setw(9)<<z<<endl;}5.遞推法0yx(x0,f(x0))(x1,f(x1))x0x1x2x3x“遞推法”也稱為“迭代法”,其基本思想是把一個復雜的計算過程轉化為簡單過程的多次重復,每次重復都從舊值的基礎上遞推出新值,并由新值代替舊值。【例3.16】利用牛頓迭代法求方程在x0附近的根的近似值。牛頓迭代公式為:輸入x0值,由公式求出x1,再由x1從公式求出x2,...,直到時可視xn+1為方程f(x)=0在X0附近的一個近似根,設

為10-5

。x1=1;do{x0=x1;

溫馨提示

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

評論

0/150

提交評論