版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章控制結(jié)構(gòu)第3章控制結(jié)構(gòu)1【本章學(xué)習(xí)要點(diǎn)】1.學(xué)習(xí)C++語(yǔ)句的基本知識(shí)和三種基本程序結(jié)構(gòu);2.掌握構(gòu)成選擇結(jié)構(gòu)的if,if-else和switch語(yǔ)句的使用;3.掌握構(gòu)成循環(huán)結(jié)構(gòu)的for,while和do...while語(yǔ)句的使用;4.能利用三種基本結(jié)構(gòu)解決實(shí)際問題。【本章學(xué)習(xí)要點(diǎn)】1.學(xué)習(xí)C++語(yǔ)句的基本知識(shí)和三種基本程序2第3章控制結(jié)構(gòu)3.1語(yǔ)句概述和程序結(jié)構(gòu)3.2選擇結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)3.4跳轉(zhuǎn)語(yǔ)句第3章控制結(jié)構(gòu)3.1語(yǔ)句概述和程序結(jié)構(gòu)33.1語(yǔ)句概述和程序結(jié)構(gòu)
C++語(yǔ)言中的語(yǔ)句可分為空語(yǔ)句、說明語(yǔ)句、復(fù)合語(yǔ)句、表達(dá)式語(yǔ)句、函數(shù)調(diào)用語(yǔ)句和程序控制語(yǔ)句。3.1語(yǔ)句概述和程序結(jié)構(gòu)C++語(yǔ)43.1.1語(yǔ)句概述1.空語(yǔ)句2.說明語(yǔ)句3.表達(dá)式語(yǔ)句4.函數(shù)調(diào)用語(yǔ)句5.程序控制語(yǔ)句6.復(fù)合語(yǔ)句3.1.1語(yǔ)句概述1.空語(yǔ)句53.1.1語(yǔ)句概述1.空語(yǔ)句只由一個(gè)分號(hào)所構(gòu)成的語(yǔ)句,它不執(zhí)行任何動(dòng)作。例如:;,一般該語(yǔ)句是用來(lái)指明被轉(zhuǎn)向的控制點(diǎn)或在特殊情況下作為循環(huán)語(yǔ)句的循環(huán)體。3.1.1語(yǔ)句概述1.空語(yǔ)句63.1.1語(yǔ)句概述2.說明語(yǔ)句對(duì)數(shù)據(jù)結(jié)構(gòu)定義和描述、對(duì)變量的定義性說明、給變量賦初值的語(yǔ)句。在程序執(zhí)行過程中,不對(duì)數(shù)據(jù)進(jìn)行操作的執(zhí)行,僅向編譯程序提供一些信息。說明語(yǔ)句可放在函數(shù)中允許出現(xiàn)語(yǔ)句的任何位置,也可以放在函數(shù)定義之外。例如:intx,y; //定義整形變量x,yfloata,b=3.5; //定義浮點(diǎn)型變量a,b,并給b賦初值3.53.1.1語(yǔ)句概述2.說明語(yǔ)句73.1.1語(yǔ)句概述3.表達(dá)式語(yǔ)句由表達(dá)式組成的語(yǔ)句,由一個(gè)表達(dá)式接一個(gè)分號(hào)組成。一般是描述算術(shù)運(yùn)算、邏輯運(yùn)算等。例如:a=a+3 //表達(dá)式a=a+3; //表達(dá)式語(yǔ)句3.1.1語(yǔ)句概述3.表達(dá)式語(yǔ)句83.1.1語(yǔ)句概述4.函數(shù)調(diào)用語(yǔ)句在函數(shù)調(diào)用后加一個(gè)分號(hào)所構(gòu)成的語(yǔ)句,稱為函數(shù)調(diào)用語(yǔ)句。例如:sin(x);3.1.1語(yǔ)句概述4.函數(shù)調(diào)用語(yǔ)句93.1.1語(yǔ)句概述5.程序控制語(yǔ)句完成一定控制功能的語(yǔ)句,用于控制程序中語(yǔ)句的執(zhí)行條件和執(zhí)行順序。例如:if(a>b)c=a-b; //若a>b,則c=a-belsec=b-a; //否則c=b-a3.1.1語(yǔ)句概述5.程序控制語(yǔ)句103.1.1語(yǔ)句概述6.復(fù)合語(yǔ)句由一對(duì)花括號(hào)“{}”括起來(lái)的若干語(yǔ)句的組合,在意義上是獨(dú)立的,被視為單獨(dú)一個(gè)語(yǔ)句。凡是能用單獨(dú)一個(gè)語(yǔ)句的地方,都能換用復(fù)合語(yǔ)句。復(fù)合語(yǔ)句的左、右花括號(hào)標(biāo)明了復(fù)合語(yǔ)句的開始和結(jié)束,在右花括號(hào)的后面不需要再加分號(hào)。3.1.1語(yǔ)句概述6.復(fù)合語(yǔ)句113.1.1語(yǔ)句概述例如:if(a>b){ max=a;cout<<a;} //復(fù)合語(yǔ)句else{ max=b;cout<<b;} //復(fù)合語(yǔ)句else{max=b;cout<<b;} //復(fù)合語(yǔ)句3.1.1語(yǔ)句概述例如:123.1.2程序結(jié)構(gòu)一個(gè)程序或函數(shù)從它的執(zhí)行行為的角度來(lái)分析,都是由三種基本結(jié)構(gòu)組合而成的,即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。3.1.2程序結(jié)構(gòu)一個(gè)程序或函數(shù)從它的執(zhí)133.1.2程序結(jié)構(gòu)1.順序結(jié)構(gòu)按語(yǔ)句的先后順序依次執(zhí)行,這種結(jié)構(gòu)稱為順序結(jié)構(gòu)。順序結(jié)構(gòu)語(yǔ)句2語(yǔ)句13.1.2程序結(jié)構(gòu)1.順序結(jié)構(gòu)順序結(jié)構(gòu)語(yǔ)句2語(yǔ)句143.1.2程序結(jié)構(gòu)2.選擇結(jié)構(gòu)根據(jù)某個(gè)條件,選擇執(zhí)行某一個(gè)語(yǔ)句。選擇結(jié)構(gòu)假條件語(yǔ)句2語(yǔ)句1真3.1.2程序結(jié)構(gòu)2.選擇結(jié)構(gòu)選擇結(jié)構(gòu)假條件語(yǔ)句2語(yǔ)句153.1.2程序結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)根據(jù)某種條件,重復(fù)執(zhí)行某一語(yǔ)句或若干個(gè)語(yǔ)句。循環(huán)結(jié)構(gòu)條件循環(huán)體語(yǔ)句真假3.1.2程序結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)條件循環(huán)體語(yǔ)句真假163.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)也稱為條件分支結(jié)構(gòu)。其執(zhí)行流程的方式是:根據(jù)給定的條件,選擇執(zhí)行兩個(gè)或兩個(gè)以上分支程序段中的某一個(gè)分支程序段。C++中可由if語(yǔ)句和switch語(yǔ)句來(lái)實(shí)現(xiàn)這種選擇結(jié)構(gòu)。3.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)也稱為條件分173.2.1條件語(yǔ)句if語(yǔ)句表達(dá)式語(yǔ)句是條件語(yǔ)句之一,它實(shí)現(xiàn)的功能是,根據(jù)給定的條件,決定執(zhí)行兩個(gè)分支中的一個(gè)分支。3.2.1條件語(yǔ)句if語(yǔ)句表達(dá)式語(yǔ)句是183.2.1條件語(yǔ)句1.單選條件語(yǔ)句一般格式if(<表達(dá)式>)語(yǔ)句執(zhí)行過程:先求出表達(dá)式的值,若表達(dá)式的值為非0,則執(zhí)行語(yǔ)句,否則跳過語(yǔ)句,直接執(zhí)行if的后續(xù)語(yǔ)句。表達(dá)式語(yǔ)句是(非0)if語(yǔ)句執(zhí)行程假(0)3.2.1條件語(yǔ)句1.單選條件語(yǔ)句表達(dá)式語(yǔ)句是(非019說明:<表達(dá)式>是符合C++語(yǔ)法規(guī)則的任一表達(dá)式語(yǔ)句是C++中任意合法的語(yǔ)句由于單選條件語(yǔ)句只是一個(gè)語(yǔ)句,所以把“語(yǔ)句”稱為條件語(yǔ)句的內(nèi)嵌語(yǔ)句,并把內(nèi)嵌語(yǔ)句的語(yǔ)句結(jié)束符“;”作為單選條件語(yǔ)句的結(jié)束符。說明:20例如:if(x>2)y=y+4;y=x*x+5*x;上面兩行程序的執(zhí)行過程:若x>2成立,執(zhí)行y=y+4的操作,接著執(zhí)行第二行語(yǔ)句;否則,不執(zhí)行y=y+4的操作,直接執(zhí)行第二行的語(yǔ)句。例如:21如果內(nèi)嵌語(yǔ)句有多個(gè)操作語(yǔ)句,用“{}”將幾個(gè)語(yǔ)句括起來(lái)作為一個(gè)復(fù)合語(yǔ)句,例如:if(a>b){t=a;a=b;b=t;}注意,此時(shí)在“{}”后不需要加分號(hào),因?yàn)椤皗}”是一個(gè)完整的復(fù)合語(yǔ)句,不需要另加分號(hào)。如果內(nèi)嵌語(yǔ)句有多個(gè)操作語(yǔ)句,用“{}”將幾個(gè)語(yǔ)22【例3.1】if語(yǔ)句應(yīng)用舉例#include<iostream.h>voidmain(){ intx=1;inty=3,z=0;if(x<y)z=y-x;cout<<z<<endl;}輸出為2分析:表達(dá)式x<y成立,執(zhí)行“z=y-x;”語(yǔ)句,使z改變了值。所以,輸出的不是z原來(lái)的值0,而是2?!纠?.1】if語(yǔ)句應(yīng)用舉例輸出為232.二選一條件語(yǔ)句一般格式為:if(<表達(dá)式>)語(yǔ)句1else語(yǔ)句2執(zhí)行過程先求出表達(dá)式的值,若表達(dá)式的值為非0,執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。是(非0)if...else語(yǔ)句執(zhí)行流程否(0)表達(dá)式語(yǔ)句2語(yǔ)句12.二選一條件語(yǔ)句是(非0)if...else語(yǔ)句執(zhí)行流程24說明:<表達(dá)式>是符合C++語(yǔ)法規(guī)則的任一表達(dá)式語(yǔ)句1和語(yǔ)句2是C++中任意合法的語(yǔ)句。說明:25【例3.2】某公司計(jì)時(shí)員工的薪金規(guī)定為:月工作時(shí)間在180小時(shí)內(nèi)的,每小時(shí)8元,超過180小時(shí)的作加班計(jì),超出部分為每小時(shí)10元,請(qǐng)編寫程序計(jì)算員工的月工資(設(shè)工作小時(shí)為整數(shù))。分析:若員工的月工作時(shí)間<180小時(shí),那么他的工資=小時(shí)數(shù)×8,若>=180小時(shí),則工資=180×8+超出180小時(shí)部分×10。【例3.2】某公司計(jì)時(shí)員工的薪金規(guī)定為:月工作時(shí)間在180小26程序如下:#include<iostream.h>voidmain(){ inthours,pay; cout<<”輸入員工本月工作時(shí)間(小時(shí)):”; cin>>hours; if(hours>180) pay=180*8+(hours-180)*10; else pay=hours*8; cout<<”該員工本月工作時(shí)間:”<<hours<<”小時(shí)”<<endl; cout<<”應(yīng)得工資為:”<<pay<<endl;}程序如下:27【例3.3】從鍵盤上輸入三個(gè)整數(shù),輸出三個(gè)數(shù)中的最大數(shù)。程序如下:#include<iostream.h>voidmain(){ intx,y,z,t; cout<<”輸入三個(gè)整數(shù):”; cin>>x>>y>>z; cout<<”x=”<<x<<”“<<”y=”<<y<<”“<<”z=”<<z<<endl; if(x>=y)t=x; else t=y; cout<<”三個(gè)數(shù)中的最大數(shù)是:”;if(t>z)cout<<t<<endl;else cout<<z<<endl;}分析:對(duì)三個(gè)數(shù)作兩次比較,1)比較前兩個(gè)數(shù),把大數(shù)存于中間變量;2)把中間變量和第三個(gè)數(shù)比較,輸出其中的較大數(shù)。【例3.3】從鍵盤上輸入三個(gè)整數(shù),輸出三個(gè)數(shù)中的最大數(shù)。分析28【例3.4】從鍵盤輸入兩個(gè)整數(shù),判別其中的較小數(shù)是否是較大數(shù)的約數(shù)。程序如下:#include<iostream.h>#include<math.h>voidmain(){ intmax,min,t; cout<<”輸入兩個(gè)整數(shù):”; cin>>max>>min;分析:從鍵盤輸入的兩數(shù),先判別其大小,再用大數(shù)對(duì)小數(shù)進(jìn)行求余操作,若余數(shù)為0,則說明是約數(shù),否則不是?!纠?.4】從鍵盤輸入兩個(gè)整數(shù),判別其中的較小數(shù)是否是較大數(shù)29
if(max<min) t=max,max=min,min=t; if(max%min!=0) cout<<min<<”不是”<<max<<”的約數(shù)。\n”; else cout<<min<<”是”<<max<<”的約數(shù)。\n”;} if(max<min)303.嵌套的條件語(yǔ)句條件語(yǔ)句中,內(nèi)嵌的語(yǔ)句可以是任一C++的語(yǔ)句,當(dāng)然也可以是條件語(yǔ)句。當(dāng)條件語(yǔ)句的內(nèi)嵌語(yǔ)句是條件語(yǔ)句時(shí),稱為嵌套的條件語(yǔ)句。一般格式為:if(<表達(dá)式1>)語(yǔ)句1elseif(<表達(dá)式2>)語(yǔ)句2elseif(<表達(dá)式3>)語(yǔ)句3……else語(yǔ)句n3.嵌套的條件語(yǔ)句31嵌套的條件語(yǔ)句一般是單選條件語(yǔ)句和二選一條件語(yǔ)句的組合。當(dāng)嵌套條件語(yǔ)句出現(xiàn)如下形式時(shí):if(e1)if(e2)語(yǔ)句1 //內(nèi)嵌的ifelse語(yǔ)句2理解上會(huì)出現(xiàn)二義性。C++規(guī)定:else總是和它前面最近的一個(gè)未配對(duì)過的if進(jìn)行配對(duì)。按照這種規(guī)定,上面嵌套的條件語(yǔ)句中else是與第二個(gè)if而不是和第一個(gè)if配對(duì)。嵌套的條件語(yǔ)句一般是單選條件語(yǔ)句和二選一條件32因此使用內(nèi)嵌的if語(yǔ)句應(yīng)包含else部分,這樣if數(shù)目和else數(shù)目相同,內(nèi)層到外層一一對(duì)應(yīng),不致出錯(cuò),或者將只有if而無(wú)else分支的條件語(yǔ)句內(nèi)嵌在外層的else子句中,這樣也不會(huì)出錯(cuò)?;蛘呖梢约踊ɡㄌ?hào)來(lái)確定配對(duì)關(guān)系。例如,將上述語(yǔ)句寫成下列形式:if(e1){if(e2)語(yǔ)句1} //內(nèi)嵌的ifelse語(yǔ)句2這時(shí),{}限定了內(nèi)嵌if語(yǔ)句的范圍,因此else與第一個(gè)if配對(duì)。因此使用內(nèi)嵌的if語(yǔ)句應(yīng)包含else部分,這樣i33【例3.5】求一元二次方程ax2+bx+c=0的解。其中a,b,c從鍵盤輸入(a不為0)。分析:輸入系數(shù)a,b,c的值后,程序要根據(jù)b2-4ac的值來(lái)確定方程根的情況。當(dāng)b2-4ac<0時(shí),方程無(wú)實(shí)根,當(dāng)b2-4ac=0時(shí),方程有兩個(gè)相同的實(shí)根,若b2-4ac>0,則方程有兩個(gè)不同的實(shí)根?!纠?.5】求一元二次方程ax2+bx+c=0的解。其中a,34程序如下:#include<iostream.h>#include<math.h>voidmain(){ doublea,b,c,d,root1,root2; cout<<”輸入a,b,c的值(a不為0):”; cin>>a>>b>>c; d=b*b-4*a*c; if(d<0) cout<<”該方程無(wú)實(shí)根?!?else //當(dāng)d不小于0時(shí)程序如下:35 if(d) //若d不為0{ root1=(-b+sqrt(d))/(2*a); root2=(-b-sqrt(d))/(2*a); cout<<”該方程有兩個(gè)不同的實(shí)根:”; cout<<”x1=”<<root1<<’\t’<<“x2=”<<root2; } else { root1=-b/(2*a); cout<<”該方程有兩個(gè)相等的實(shí)根:x1=x2=”<<root1; } cout<<endl; } if(d) //若d不為0363.2.2條件運(yùn)算符在C++中提供了一個(gè)條件運(yùn)算符“?:”,它是三元運(yùn)算符,一般格式為:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>執(zhí)行過程:先求出表達(dá)式1的值,若其為非0,則求出表達(dá)式2的值(不求表達(dá)式3的值),把該值作為運(yùn)算的結(jié)果;否則求出表達(dá)式3的值(不求表達(dá)式2的值),把它作為運(yùn)算的結(jié)果。3.2.2條件運(yùn)算符在C++中提供了一個(gè)條件運(yùn)算符“?:”37說明:(1)三個(gè)<表達(dá)式>可以是符合C++語(yǔ)法規(guī)則的任意表達(dá)式。(2)是優(yōu)先級(jí)較低的運(yùn)算符,它僅高于賦值運(yùn)算符、復(fù)合賦值運(yùn)算符和逗號(hào)運(yùn)算符。(3)在某些應(yīng)用場(chǎng)合,它也可以實(shí)現(xiàn)選擇語(yǔ)句的功能。說明:38例如:求兩個(gè)數(shù)中的較小數(shù)min=x<=y?x:y;它等同于條件語(yǔ)句:if(x<=y) min=x;elsemin=y;
例如:求兩個(gè)數(shù)中的較小數(shù)39條件運(yùn)算符的結(jié)合性是從右向左,它的運(yùn)算結(jié)果是一個(gè)數(shù)值,可以繼續(xù)參加運(yùn)算,也可用于表達(dá)式求值的任何地方。例如:if(x<y?x:z<y?z:y)a=b;cout<<x<y?x:y;條件運(yùn)算符的結(jié)合性是從右向左,它的運(yùn)算結(jié)果是一個(gè)數(shù)40條件運(yùn)算符可以嵌套使用。如求三個(gè)變量x,y,z中的最小值,用條件運(yùn)算符可表示為: min=(t=x<=y?x:y)<=z?t:z;等同于以下的條件語(yǔ)句: if(x<=y)t=x; elset=y; if(t<=z)min=t;elsemin=z;顯然,前面的表示法比后一種要簡(jiǎn)潔。條件運(yùn)算符可以嵌套使用。如求三個(gè)變量x,y,z中413.2.3開關(guān)語(yǔ)句開關(guān)語(yǔ)句是switch語(yǔ)句,它也稱為多分支選擇語(yǔ)句。它可以根據(jù)給定的條件,從多個(gè)分支中選擇執(zhí)行一個(gè)分支的語(yǔ)句。3.2.3開關(guān)語(yǔ)句開關(guān)語(yǔ)句是switch語(yǔ)句,它也稱42一般格式為:switch(<表達(dá)式>){ case<常量表達(dá)式1>:<語(yǔ)句1;> <break;> case<常量表達(dá)式2>:<語(yǔ)句2;> <break;> …… case<常量表達(dá)式n>:<語(yǔ)句n;> <break;> default:語(yǔ)句n+1;}一般格式為:43執(zhí)行過程:先計(jì)算條件表達(dá)式的值,從上向下依次與case后面的常量表達(dá)式比較,若與某一常量表達(dá)式的值相等,就轉(zhuǎn)去執(zhí)行該case后的語(yǔ)句,一直執(zhí)行到break語(yǔ)句或開關(guān)語(yǔ)句的右花括號(hào)為止。若無(wú)相等的值,有default分支,就執(zhí)行該分支后的語(yǔ)句,否則什么也不執(zhí)行。執(zhí)行過程:先計(jì)算條件表達(dá)式的值,從上向下依次與case后面的44說明:<表達(dá)式>可以是任一符合C++語(yǔ)法規(guī)則的表達(dá)式,其值只能是整型或字符型;<常量表達(dá)式>只能是由常量所組成的表達(dá)式,其值也只能是整型或字符型,任意兩個(gè)case之后不能出現(xiàn)相同值;“語(yǔ)句”是任意C++語(yǔ)句,它可以是一個(gè)語(yǔ)句,也可以是多個(gè)語(yǔ)句;break語(yǔ)句是可選的。說明:45注意:(1)default分支可放在開關(guān)語(yǔ)句的任何位置,但通常作為最后一個(gè)分支。(2)每個(gè)case均作為開關(guān)語(yǔ)句的一個(gè)分支入口,表達(dá)式的值用來(lái)確定進(jìn)入開關(guān)語(yǔ)句中的哪一個(gè)入口,并開始執(zhí)行該語(yǔ)句。程序執(zhí)行時(shí)遇到break語(yǔ)句就跳出switch。(3)當(dāng)沒有break語(yǔ)句時(shí),流程在執(zhí)行完一個(gè)case后面的語(yǔ)句后,轉(zhuǎn)向下一個(gè)case后的語(yǔ)句繼續(xù)執(zhí)行。注意:46(4)當(dāng)省略case后面的語(yǔ)句時(shí),可實(shí)現(xiàn)多個(gè)入口執(zhí)行同一個(gè)語(yǔ)句。(4)當(dāng)省略case后面的語(yǔ)句時(shí),可實(shí)現(xiàn)多個(gè)入口執(zhí)行同一個(gè)語(yǔ)47例如:intletter,space,other;charc;……switch(c){ case'a': case'b': case'c': case'd':letter++; break; case'\n': case'': case'\t':space++; break; default:other++;}當(dāng)字符變量c的值為'\n',''或'\t'時(shí),均執(zhí)行space++當(dāng)字符變量c的值為'a','b','c'或'd'時(shí),均執(zhí)行l(wèi)etter++例如:當(dāng)字符變量c的值為'\n',''或'\t'時(shí),均執(zhí)行48(5)在運(yùn)用switch時(shí)要注意符合語(yǔ)句的語(yǔ)法規(guī)則。inta,b,c;……a=3;b=4;switch(c) { case2.5:… //常量表達(dá)式的值應(yīng)為字符型或整型,不能為實(shí)型casea+b:…//a+b不是常量表達(dá)式case1,2,3:…//不能用這種表示方法來(lái)實(shí)現(xiàn)多個(gè)入口執(zhí)行同一語(yǔ)句}(5)在運(yùn)用switch時(shí)要注意符合語(yǔ)句的語(yǔ)法規(guī)則。49從開關(guān)語(yǔ)句的執(zhí)行過程可知,任一開關(guān)語(yǔ)句都可以用條件語(yǔ)句來(lái)實(shí)現(xiàn),但有些條件語(yǔ)句不可以用開關(guān)語(yǔ)句來(lái)實(shí)現(xiàn)。這是由于開關(guān)語(yǔ)句中限定了表達(dá)式的取值類型,而條件語(yǔ)句中的條件表達(dá)式可取任意類型的值。從開關(guān)語(yǔ)句的執(zhí)行過程可知,任一開關(guān)語(yǔ)句都可以用條件語(yǔ)句來(lái)實(shí)現(xiàn)50【例3.6】根據(jù)輸入的百分制成績(jī)給學(xué)生打等第。90分及以上為“excellent”80~89分為“fine”70~79分為“better”60~69分為“passed”60分以下為“failed”。分析:輸入的成績(jī)是百分制的,若用原始成績(jī)來(lái)構(gòu)造switch語(yǔ)句,那就需要幾十個(gè)入口,考慮到分?jǐn)?shù)段與等第對(duì)應(yīng)的情況(基本以10分為區(qū)間),先把成績(jī)?nèi)フ?0,這樣對(duì)應(yīng)的case語(yǔ)句的數(shù)量相對(duì)合理。【例3.6】根據(jù)輸入的百分制成績(jī)給學(xué)生打等第。90分及以上為51程序如下:#include<iostream.h>voidmain(){ intscore;cout<<”輸入學(xué)生的成績(jī)(0~100):”;cin>>score;cout<<”\n該學(xué)生的等第為:”;程序如下:52switch(score/10){ case 10: case9: cout<<”excellent!”; break; case8: cout<<”fine!”; break; case7: cout<<”better!”; break; case6: cout<<”passed!”; break; default: cout<<”failed!”;}cout<<endl; }switch(score/10)53【例3.7】設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器:能完成兩個(gè)數(shù)的加、減、乘、除運(yùn)算。如輸入1.5*3,則輸出為1.5*3=4.5。程序如下:#include<iostream.h>voidmain(){floatn1,n2,result;charop; cout<<”輸入數(shù)據(jù),格式為:數(shù)1運(yùn)算符數(shù)2:”;cin>>n1>>op>>n2; cout<<endl; cout<<n1<<op<<n2<<”=”;分析:從鍵盤上讀取運(yùn)算數(shù)和運(yùn)算符,根據(jù)不同的運(yùn)算符進(jìn)行運(yùn)算并輸出結(jié)果。【例3.7】設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器:能完成兩個(gè)數(shù)的加、減、乘、54 switch(op) { case ‘+’:result=n1+n2; cout<<result<<endl; break; case‘-‘:result=n1-n2; cout<<result<<endl; break; case‘*’:result=n1*n2; cout<<result<<endl; break; case‘/’:result=n1/n2; cout<<result<<endl; break; default:cout<<”無(wú)結(jié)果!(運(yùn)算不能進(jìn)行)”<<endl;}} switch(op)553.3循環(huán)結(jié)構(gòu)在進(jìn)行程序設(shè)計(jì)時(shí),常常會(huì)有一些需要重復(fù)執(zhí)行的操作,可通過循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)這種重復(fù)執(zhí)行的操作。例如,求s=1+2+3+……+100的和,在程序中不可能列出100個(gè)數(shù)再相加。3.3循環(huán)結(jié)構(gòu)在進(jìn)行程序設(shè)計(jì)時(shí),常常會(huì)有一些需要重復(fù)執(zhí)行56要完成這樣的求和操作,可用以下步驟實(shí)現(xiàn):(1)設(shè)置整型變量s為累加器,置0;(2)給整型量i置1;(3)使s=s+i;(4)使i=i+1;(5)若i<=100,重復(fù)步驟(3)和(4);(6)輸出s的值。在以上步驟中,步驟(3)和(4)是重復(fù)執(zhí)行部分,這種重復(fù)執(zhí)行的操作稱為循環(huán)體。要完成這樣的求和操作,可用以下步驟實(shí)現(xiàn):573.3.1for語(yǔ)句一般格式為:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)語(yǔ)句其中三個(gè)表達(dá)式可以是C++中的任一符合語(yǔ)法規(guī)則的表達(dá)式;“語(yǔ)句”可以是任意C++的語(yǔ)句,是for的內(nèi)嵌語(yǔ)句,把它稱為循環(huán)體。3.3.1for語(yǔ)句一般格式為:58執(zhí)行過程:1)先求出表達(dá)式1的值;2)求出表達(dá)式2的值,若表達(dá)式2的值為非0,則轉(zhuǎn)去(3),否則轉(zhuǎn)去(4);3)執(zhí)行語(yǔ)句,然后求表達(dá)式3的值,轉(zhuǎn)去(2);4)結(jié)束循環(huán),執(zhí)行for的下一個(gè)語(yǔ)句。表達(dá)式2循環(huán)體語(yǔ)句是(非0)for語(yǔ)句執(zhí)行流程表達(dá)式1表達(dá)式3否(0)for的下一語(yǔ)句執(zhí)行過程:表達(dá)式2循環(huán)體語(yǔ)句是(非0)for語(yǔ)句執(zhí)行流程表達(dá)59例如,求s=1+2+3+……+100的和。……s=0;for(i=1;i<=100;i++)s=s+i;……其中:表達(dá)式1是i=1,即給控制循環(huán)的變量i賦初始值1;表達(dá)式2是i<=100,是控制循環(huán)的條件,即當(dāng)i<=100時(shí),繼續(xù)求累加和(執(zhí)行循環(huán)體s=s+i);表達(dá)式3是i++,使循環(huán)變量發(fā)生增值,以控制循環(huán)可以結(jié)束。例如,求s=1+2+3+……+100的和。60說明:(1)從for語(yǔ)句的執(zhí)行過程可知,語(yǔ)句執(zhí)行時(shí),先判斷循環(huán)條件,若條件滿足,才執(zhí)行循環(huán)體,所以有可能循環(huán)體一次也不執(zhí)行。(2)for語(yǔ)句的三個(gè)表達(dá)式可以是任意表達(dá)式,也可以是逗號(hào)表達(dá)式。例如: for(s=0,i=1;i<=100;i++)s=s+i;逗號(hào)表達(dá)式說明:逗號(hào)表達(dá)式61(3)表達(dá)式之間以分號(hào)間隔;三個(gè)表達(dá)式可以部分省略或全部省略,但分號(hào)不能省略。例如:s=0;i=1;for(;i<=100;i++)s=s+i; //省略了表達(dá)式1或:s=0;i=1;for(;i<=100;){s=s+i;i++;} //省略了表達(dá)式1和表達(dá)式3(3)表達(dá)式之間以分號(hào)間隔;三個(gè)表達(dá)式可以部分省略或全部省略62或:s=0;i=1;for(;;i++)s=s+i; //省略了表達(dá)式1和表達(dá)式2這里省略了表達(dá)式2,系統(tǒng)約定,相當(dāng)于其值為1,這樣循環(huán)就會(huì)無(wú)終止地進(jìn)行,形成了死循環(huán)。為避免這種情況,要在循環(huán)體的語(yǔ)句里增加終止循環(huán)的語(yǔ)句?;颍?3或:s=0;i=1;for(;;) //三個(gè)表達(dá)式都省略{ ……}這時(shí),三個(gè)表達(dá)式都省略了,循環(huán)變量的增值語(yǔ)句放在循環(huán)體內(nèi),同時(shí)在循環(huán)體內(nèi)要有使循環(huán)結(jié)束的條件,否則也會(huì)產(chǎn)生死循環(huán)?;颍?4【例3.8】求n!。程序如下:#include<iostream.h>voidmain(){ intn,i; longs=1; cout<<”輸入n的值(整數(shù)):”; cin>>n;分析:求n的階乘與求累加和方法相似,不同之處在于存放累乘的積初值應(yīng)為1,應(yīng)注意積的大小可能超出int的范圍。【例3.8】求n!。分析:求n的階乘與求累加和方法相似,不同65for(i=1;i<=n;i++) //i從1變化到n,每循環(huán)一次,i增1 s=s*i;cout<<”\n”<<n<<”!=”<<s;cout<<endl;}for(i=1;i<=n;i++) //i從1變化到n66【例3.9】驗(yàn)證一個(gè)數(shù)是否為素?cái)?shù)。程序如下:#include<iostream.h>voidmain(){ intn,m,prime=1;cout<<”輸入一個(gè)正整數(shù):”;cin>>n;分析:驗(yàn)證一個(gè)正整數(shù)(n>3)是否為素?cái)?shù),只要看在2~n/2范圍內(nèi)是否找到一個(gè)整數(shù)m能將n整除,若m存在,則n不是素?cái)?shù),否則n是素?cái)?shù)。【例3.9】驗(yàn)證一個(gè)數(shù)是否為素?cái)?shù)。分析:驗(yàn)證一個(gè)正整數(shù)(n>67 for(m=2;m<=n/2;m++) //在2~范圍里去找是否有能將n整除的m if(n%m==0) prime=0;//當(dāng)找到一個(gè)時(shí),將標(biāo)志prime置0 if(prime) //根據(jù)prime的值來(lái)確認(rèn)n是否為素?cái)?shù) cout<<”\n”<<n<<”是素?cái)?shù)!\n”; else cout<<”\n”<<n<<”不是素?cái)?shù)!\n”;} for(m=2;m<=n/2;m++) //在2~范圍里去683.3.2while語(yǔ)句一般格式為:while(<表達(dá)式>)語(yǔ)句其中:表達(dá)式是C++中的任意的表達(dá)式;語(yǔ)句可以是任意語(yǔ)句,也可以是復(fù)合語(yǔ)句,是while的內(nèi)嵌語(yǔ)句,把它稱為循環(huán)體。3.3.2while語(yǔ)句69執(zhí)行過程:1)先求出表達(dá)式的值;2)當(dāng)表達(dá)式的值為非0,轉(zhuǎn)去(3),否則轉(zhuǎn)去(4);3)執(zhí)行循環(huán)體語(yǔ)句;4)結(jié)束循環(huán),執(zhí)行while的下一個(gè)語(yǔ)句。表達(dá)式循環(huán)體語(yǔ)句是(非0)while語(yǔ)句執(zhí)行流程否(0)while的下一語(yǔ)句執(zhí)行過程:表達(dá)式循環(huán)體語(yǔ)句是(非0)while語(yǔ)句執(zhí)行流程否70說明:從語(yǔ)句的執(zhí)行過程可知,先判斷條件再執(zhí)行循環(huán)體,所以有可能循環(huán)體一次也不執(zhí)行。在循環(huán)體內(nèi)或在表達(dá)式內(nèi),必須有改變表達(dá)式值的操作,否則,會(huì)使循環(huán)無(wú)終止地進(jìn)行,形成死循環(huán)。說明:71例如:求s=1+2+3+……+100的和。……s=0;i=1;while(i<=100){ s=s+i;i++;}……在此程序段中,給控制循環(huán)的變量i賦初始值放在了循環(huán)體外,表達(dá)式i<=100是控制循環(huán)的條件,使循環(huán)變量發(fā)生增值的i++置于循環(huán)體內(nèi)。例如:求s=1+2+3+……+100的和。在此程序段中,給控72【例3.10】打印Fibonacci數(shù)列。程序如下:#include<iostream.h>voidmain(){ intn,m=3; longfib,fib1=1,fib2=1; cout<<”打印數(shù)列的前多少項(xiàng)?”; cin>>n; cout<<endl;
cout<<”數(shù)列的前”<<n<<”項(xiàng)打印如下:”<<endl; 分析:Fibonacci數(shù)列是1,1,2,3,5,8,……,數(shù)列中后一個(gè)數(shù)是前兩個(gè)數(shù)之和,可用迭代的方法進(jìn)行。迭代關(guān)系:【例3.10】打印Fibonacci數(shù)列。分析:Fibona73 cout<<fib1<<’\t’<<fib2; while(m<=n) { fib=fib1+fib2; cout<<’\t’<<fib; m++; fib1=fib2; fib2=fib; } cout<<endl;} cout<<fib1<<’\t’<<fib2;743.3.3do…while語(yǔ)句一般格式為:do語(yǔ)句while(<表達(dá)式>);其中表達(dá)式是C++中的符合語(yǔ)法規(guī)則的表達(dá)式;語(yǔ)句可以是任意C++的語(yǔ)句,是內(nèi)嵌語(yǔ)句,把它稱為循環(huán)體。3.3.3do…while語(yǔ)句一般格式為:75執(zhí)行過程:1)執(zhí)行循環(huán)體語(yǔ)句;2)求表達(dá)式的值;3)若表達(dá)式的值為非0,則轉(zhuǎn)去(1),否則轉(zhuǎn)去(4);4)結(jié)束循環(huán),執(zhí)行do…while的下一個(gè)語(yǔ)句。表達(dá)式循環(huán)體語(yǔ)句是(非0)do...while語(yǔ)句執(zhí)行流程否(0)do...while的下一語(yǔ)句執(zhí)行過程:表達(dá)式循環(huán)體語(yǔ)句是(非0)do...while語(yǔ)句76說明:從do…while語(yǔ)句的執(zhí)行過程可知,是先執(zhí)行循環(huán)體再判斷條件,所以不管表達(dá)式的值是否為0,循環(huán)體至少執(zhí)行一次。在循環(huán)體內(nèi)或在表達(dá)式內(nèi),同樣要有改變表達(dá)式值的操作,否則會(huì)使循環(huán)無(wú)終止地進(jìn)行。說明:77例如:求s=1+2+3+……+100的和。……s=0;i=1;do{ s=s+i;i++;}while(i<=100);……在此程序段中,給控制循環(huán)的變量i賦初始值放在了循環(huán)體外,執(zhí)行循環(huán)時(shí),先執(zhí)行s=s+i;i++;,再計(jì)算i<=100,循環(huán)是先執(zhí)行再判斷,與while語(yǔ)句不同。例如:求s=1+2+3+……+100的和。在此程序段中,給控78【例3.11】輸入一行字符,以換行符結(jié)束,并依次輸出該行字符。#include<iostream.h> voidmain() { charc; cout<<”輸入一行字符:”; cin.get(c);
分析:從輸入緩沖區(qū)中讀取字符,每讀取一個(gè)就輸出一個(gè),直到讀到的是換行符為止。【例3.11】輸入一行字符,以換行符結(jié)束,并依次輸出該行字符79 do { cout<<c; cin.get(c); } while(c!=’\n’); cout<<endl; }執(zhí)行程序時(shí)屏幕顯示: 輸入一行字符:若輸入: Hello!Howareyou?↙則輸出: Hello!Howareyou?執(zhí)行程序時(shí),輸入的字符先送到輸入緩沖區(qū),只有按下回車后,系統(tǒng)才開始在輸入緩沖區(qū)依次讀取字符。 do執(zhí)行程序時(shí),輸入的字符先送到輸入緩沖區(qū),只有按下回車803.3.4三種循環(huán)語(yǔ)句的比較1.對(duì)于重復(fù)結(jié)構(gòu)的程序段,可用三種循環(huán)語(yǔ)句中的一個(gè)來(lái)實(shí)現(xiàn),一般情況下它們可以互相代替。2.for和while語(yǔ)句都是先判斷,再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行;而do…while循環(huán)是先執(zhí)行循環(huán)體,后判斷,因此,循環(huán)體至少執(zhí)行一次。3.用while和do…while循環(huán)時(shí),循環(huán)變量賦初始值應(yīng)在循環(huán)語(yǔ)句之前完成;而for語(yǔ)句中表達(dá)式1可以用來(lái)給循環(huán)變量賦初始值。4.在while和do…while循環(huán)中,只在while后指定循環(huán)條件,在循環(huán)體內(nèi)包含需要重復(fù)執(zhí)行的語(yǔ)句,也要有使循環(huán)能趨于結(jié)束的語(yǔ)句。3.3.4三種循環(huán)語(yǔ)句的比較1.對(duì)于重復(fù)結(jié)構(gòu)的程序段,813.3.5循環(huán)的嵌套及應(yīng)用在循環(huán)語(yǔ)句的中,其循環(huán)體語(yǔ)句可以是任意合法的C++語(yǔ)句,當(dāng)然也可以是另一個(gè)循環(huán)語(yǔ)句。一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套,內(nèi)嵌的循環(huán)中還可以嵌套循環(huán)。這種嵌套的循環(huán)也稱多重循環(huán)。在構(gòu)造多重循環(huán)時(shí)應(yīng)注意循環(huán)不能交叉,只能嵌套。在C++中,對(duì)循環(huán)嵌套的層次沒有限制。3.3.5循環(huán)的嵌套及應(yīng)用在循環(huán)語(yǔ)句的中,其循環(huán)82【例3.12】打印九九乘法表分析:乘法表共有九行,用變量i控制行數(shù)(i取1~9),作為外循環(huán);對(duì)每一行,輸出的列數(shù)也不同,用變量j來(lái)控制第i行輸出的列數(shù),j的變化范圍取決于i的值(j取1~i),j可作為循環(huán)變量來(lái)控制內(nèi)循環(huán),這樣就要構(gòu)造兩重循環(huán)。程序如下:【例3.12】打印九九乘法表83#include<iostream.h>#include<iomanip.h>voidmain(){ inti,j; cout<<setw(30)<<” 九九乘法表\n”; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) cout<<j<<’*’<<i<<”=”<<j*i<<’\t’; cout<<endl; //當(dāng)內(nèi)循環(huán)執(zhí)行完畢后,一行結(jié)束,打印換行符 }}注意:多重循環(huán)在執(zhí)行時(shí),外循環(huán)每執(zhí)行一次,內(nèi)循環(huán)要執(zhí)行完畢。#include<iostream.h>注意:多重循環(huán)在執(zhí)行84【例3.13】用雙重循環(huán)控制打印下列圖形********
********
********
********分析:這個(gè)圖形4行8列,每行的起始位置稍有變化,可以用setw()來(lái)實(shí)現(xiàn)。
【例3.13】用雙重循環(huán)控制打印下列圖形85#include<iostream.h>#include<iomanip.h>voidmain(){ inti,j; for(i=1;i<=4;i++) { cout<<setw(10+i)<<””;//用setw()控制每行的打印起始位置 for(j=1;j<=8;j++) cout<<’*’; cout<<endl;//當(dāng)內(nèi)循環(huán)執(zhí)行完畢,一行結(jié)束,打印換行符 }}#include<iostream.h>863.4跳轉(zhuǎn)語(yǔ)句前述C++語(yǔ)句都是根據(jù)其在程序中的先后次序,依次執(zhí)行,即使是選擇語(yǔ)句或循環(huán)語(yǔ)句,由于它本身只是一個(gè)語(yǔ)句,因此在整個(gè)程序中,它仍是順序被執(zhí)行的。而在C++中還有一類語(yǔ)句,當(dāng)執(zhí)行到該類語(yǔ)句時(shí),會(huì)改變程序的執(zhí)行順序,不是順序地執(zhí)行其后續(xù)的語(yǔ)句,而是進(jìn)行跳轉(zhuǎn),轉(zhuǎn)到另一個(gè)語(yǔ)句處繼續(xù)執(zhí)行。介紹到的switch時(shí)涉及的break語(yǔ)句就是這類語(yǔ)句。3.4跳轉(zhuǎn)語(yǔ)句前述C++語(yǔ)句都是根據(jù)其在873.4.1break語(yǔ)句其一般格式:break;該語(yǔ)句可用在switch中,還可用于循環(huán)體內(nèi),執(zhí)行到break時(shí),使流程從循環(huán)體內(nèi)跳出,轉(zhuǎn)去執(zhí)行該循環(huán)語(yǔ)句的下一個(gè)語(yǔ)句。3.4.1break語(yǔ)句其一般格式:88例如,在for語(yǔ)句中省略表達(dá)式2時(shí),在循環(huán)體內(nèi)要控制循環(huán)結(jié)束時(shí),就可用if語(yǔ)句和break語(yǔ)句結(jié)合使用。s=0; for(i=1;;i++) //無(wú)表達(dá)式2{ s=s+i; if(i>100)break;}注意:break語(yǔ)句只用于循環(huán)語(yǔ)句和開關(guān)語(yǔ)句,不用于其他任何語(yǔ)句中。例如,在for語(yǔ)句中省略表達(dá)式2時(shí),在循環(huán)體內(nèi)要控制循環(huán)結(jié)束893.4.2continue語(yǔ)句一般形式:continue;該語(yǔ)句只能用于循環(huán)語(yǔ)句的循環(huán)體中,其作用是結(jié)束本次循環(huán),跳到判斷循環(huán)的位置,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判斷。3.4.2continue語(yǔ)句90注意:continue和break的區(qū)別在于,continue語(yǔ)句只提前結(jié)束本次循環(huán),而不是終止循環(huán)的執(zhí)行,循環(huán)是否結(jié)束,取決于對(duì)循環(huán)條件的判斷;而break語(yǔ)句是結(jié)束循環(huán),不再進(jìn)行條件的判斷。注意:continue和break的區(qū)別在于,continu91如果有以下兩個(gè)循環(huán)結(jié)構(gòu):1. while(表達(dá)式1) 2.while(表達(dá)式1) { { …… …… if(表達(dá)式2)break; if(表達(dá)式2)continue; …… …… } }執(zhí)行流程分別如后圖如果有以下兩個(gè)循環(huán)結(jié)構(gòu):92表達(dá)式1是(非0)break語(yǔ)句流程轉(zhuǎn)向否(0)while的下一語(yǔ)句表達(dá)式2否(0)是(非0)break表達(dá)式1是(非0)continue語(yǔ)句流程轉(zhuǎn)向否(0)while的下一語(yǔ)句表達(dá)式2否(0)是(非0)continue注意區(qū)別表達(dá)式2成立時(shí)的流程轉(zhuǎn)向表達(dá)式1是(非0)break語(yǔ)句流程轉(zhuǎn)向否(0)while的93【例3.14】在例3.9中,要判別一個(gè)數(shù)是否為素?cái)?shù),可以在程序中加入break,只要找到一個(gè)能被n整除的m就可以跳出循環(huán),而不需要等到整個(gè)循環(huán)結(jié)束,從而提高效率?!纠?.14】在例3.9中,要判別一個(gè)數(shù)是否為素?cái)?shù),可以在程94#include<iostream.h>voidmain(){ intn,m,prime=1; cout<<”輸入一個(gè)正整數(shù):”; cin>>n; for(m=2;m<=n/2;m++) { if(n%m==0) prime=0;
break; //當(dāng)找到一個(gè)m時(shí),將prime置0,并跳出循環(huán) } if(prime) cout<<”\n”<<n<<”是素?cái)?shù)!\n”; else cout<<”\n”<<n<<”不是素?cái)?shù)!\n”; }#include<iostream.h>95【例3.15】打印100以內(nèi)3的倍數(shù),并計(jì)算它們的和。#include<iostream.h>voidmain(){ inti,sum=0; i=0; while(++i<=100) { if(i%3) continue;//當(dāng)i不是3的倍數(shù)時(shí),進(jìn)行下一次循環(huán) else {sum+=i; cout<<i<<’\t’; } } cout<<endl<<”sum=”<<sum; cout<<endl;}【例3.15】打印100以內(nèi)3的倍數(shù),并計(jì)算它們的和。96【復(fù)習(xí)與提示】1.語(yǔ)句是程序的基本構(gòu)成單位,正確使用各類語(yǔ)句,并養(yǎng)成良好的程序書寫風(fēng)格能使程序的可讀性強(qiáng),利于程序修改。程序的基本結(jié)構(gòu)有順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。2.選擇結(jié)構(gòu)語(yǔ)句主要有單分支if語(yǔ)句,雙分支if...else語(yǔ)句以及多分支的if...else嵌套、switch語(yǔ)句,某些場(chǎng)合也可以用條件運(yùn)算符實(shí)現(xiàn)選擇結(jié)構(gòu),在實(shí)際應(yīng)用中注意區(qū)別。3.循環(huán)語(yǔ)句有for語(yǔ)句、while語(yǔ)句和do...while語(yǔ)句,應(yīng)注意三種循環(huán)的不同之處?!緩?fù)習(xí)與提示】97第3章控制結(jié)構(gòu)第3章控制結(jié)構(gòu)98【本章學(xué)習(xí)要點(diǎn)】1.學(xué)習(xí)C++語(yǔ)句的基本知識(shí)和三種基本程序結(jié)構(gòu);2.掌握構(gòu)成選擇結(jié)構(gòu)的if,if-else和switch語(yǔ)句的使用;3.掌握構(gòu)成循環(huán)結(jié)構(gòu)的for,while和do...while語(yǔ)句的使用;4.能利用三種基本結(jié)構(gòu)解決實(shí)際問題?!颈菊聦W(xué)習(xí)要點(diǎn)】1.學(xué)習(xí)C++語(yǔ)句的基本知識(shí)和三種基本程序99第3章控制結(jié)構(gòu)3.1語(yǔ)句概述和程序結(jié)構(gòu)3.2選擇結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)3.4跳轉(zhuǎn)語(yǔ)句第3章控制結(jié)構(gòu)3.1語(yǔ)句概述和程序結(jié)構(gòu)1003.1語(yǔ)句概述和程序結(jié)構(gòu)
C++語(yǔ)言中的語(yǔ)句可分為空語(yǔ)句、說明語(yǔ)句、復(fù)合語(yǔ)句、表達(dá)式語(yǔ)句、函數(shù)調(diào)用語(yǔ)句和程序控制語(yǔ)句。3.1語(yǔ)句概述和程序結(jié)構(gòu)C++語(yǔ)1013.1.1語(yǔ)句概述1.空語(yǔ)句2.說明語(yǔ)句3.表達(dá)式語(yǔ)句4.函數(shù)調(diào)用語(yǔ)句5.程序控制語(yǔ)句6.復(fù)合語(yǔ)句3.1.1語(yǔ)句概述1.空語(yǔ)句1023.1.1語(yǔ)句概述1.空語(yǔ)句只由一個(gè)分號(hào)所構(gòu)成的語(yǔ)句,它不執(zhí)行任何動(dòng)作。例如:;,一般該語(yǔ)句是用來(lái)指明被轉(zhuǎn)向的控制點(diǎn)或在特殊情況下作為循環(huán)語(yǔ)句的循環(huán)體。3.1.1語(yǔ)句概述1.空語(yǔ)句1033.1.1語(yǔ)句概述2.說明語(yǔ)句對(duì)數(shù)據(jù)結(jié)構(gòu)定義和描述、對(duì)變量的定義性說明、給變量賦初值的語(yǔ)句。在程序執(zhí)行過程中,不對(duì)數(shù)據(jù)進(jìn)行操作的執(zhí)行,僅向編譯程序提供一些信息。說明語(yǔ)句可放在函數(shù)中允許出現(xiàn)語(yǔ)句的任何位置,也可以放在函數(shù)定義之外。例如:intx,y; //定義整形變量x,yfloata,b=3.5; //定義浮點(diǎn)型變量a,b,并給b賦初值3.53.1.1語(yǔ)句概述2.說明語(yǔ)句1043.1.1語(yǔ)句概述3.表達(dá)式語(yǔ)句由表達(dá)式組成的語(yǔ)句,由一個(gè)表達(dá)式接一個(gè)分號(hào)組成。一般是描述算術(shù)運(yùn)算、邏輯運(yùn)算等。例如:a=a+3 //表達(dá)式a=a+3; //表達(dá)式語(yǔ)句3.1.1語(yǔ)句概述3.表達(dá)式語(yǔ)句1053.1.1語(yǔ)句概述4.函數(shù)調(diào)用語(yǔ)句在函數(shù)調(diào)用后加一個(gè)分號(hào)所構(gòu)成的語(yǔ)句,稱為函數(shù)調(diào)用語(yǔ)句。例如:sin(x);3.1.1語(yǔ)句概述4.函數(shù)調(diào)用語(yǔ)句1063.1.1語(yǔ)句概述5.程序控制語(yǔ)句完成一定控制功能的語(yǔ)句,用于控制程序中語(yǔ)句的執(zhí)行條件和執(zhí)行順序。例如:if(a>b)c=a-b; //若a>b,則c=a-belsec=b-a; //否則c=b-a3.1.1語(yǔ)句概述5.程序控制語(yǔ)句1073.1.1語(yǔ)句概述6.復(fù)合語(yǔ)句由一對(duì)花括號(hào)“{}”括起來(lái)的若干語(yǔ)句的組合,在意義上是獨(dú)立的,被視為單獨(dú)一個(gè)語(yǔ)句。凡是能用單獨(dú)一個(gè)語(yǔ)句的地方,都能換用復(fù)合語(yǔ)句。復(fù)合語(yǔ)句的左、右花括號(hào)標(biāo)明了復(fù)合語(yǔ)句的開始和結(jié)束,在右花括號(hào)的后面不需要再加分號(hào)。3.1.1語(yǔ)句概述6.復(fù)合語(yǔ)句1083.1.1語(yǔ)句概述例如:if(a>b){ max=a;cout<<a;} //復(fù)合語(yǔ)句else{ max=b;cout<<b;} //復(fù)合語(yǔ)句else{max=b;cout<<b;} //復(fù)合語(yǔ)句3.1.1語(yǔ)句概述例如:1093.1.2程序結(jié)構(gòu)一個(gè)程序或函數(shù)從它的執(zhí)行行為的角度來(lái)分析,都是由三種基本結(jié)構(gòu)組合而成的,即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。3.1.2程序結(jié)構(gòu)一個(gè)程序或函數(shù)從它的執(zhí)1103.1.2程序結(jié)構(gòu)1.順序結(jié)構(gòu)按語(yǔ)句的先后順序依次執(zhí)行,這種結(jié)構(gòu)稱為順序結(jié)構(gòu)。順序結(jié)構(gòu)語(yǔ)句2語(yǔ)句13.1.2程序結(jié)構(gòu)1.順序結(jié)構(gòu)順序結(jié)構(gòu)語(yǔ)句2語(yǔ)句1113.1.2程序結(jié)構(gòu)2.選擇結(jié)構(gòu)根據(jù)某個(gè)條件,選擇執(zhí)行某一個(gè)語(yǔ)句。選擇結(jié)構(gòu)假條件語(yǔ)句2語(yǔ)句1真3.1.2程序結(jié)構(gòu)2.選擇結(jié)構(gòu)選擇結(jié)構(gòu)假條件語(yǔ)句2語(yǔ)句1123.1.2程序結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)根據(jù)某種條件,重復(fù)執(zhí)行某一語(yǔ)句或若干個(gè)語(yǔ)句。循環(huán)結(jié)構(gòu)條件循環(huán)體語(yǔ)句真假3.1.2程序結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)條件循環(huán)體語(yǔ)句真假1133.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)也稱為條件分支結(jié)構(gòu)。其執(zhí)行流程的方式是:根據(jù)給定的條件,選擇執(zhí)行兩個(gè)或兩個(gè)以上分支程序段中的某一個(gè)分支程序段。C++中可由if語(yǔ)句和switch語(yǔ)句來(lái)實(shí)現(xiàn)這種選擇結(jié)構(gòu)。3.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)也稱為條件分1143.2.1條件語(yǔ)句if語(yǔ)句表達(dá)式語(yǔ)句是條件語(yǔ)句之一,它實(shí)現(xiàn)的功能是,根據(jù)給定的條件,決定執(zhí)行兩個(gè)分支中的一個(gè)分支。3.2.1條件語(yǔ)句if語(yǔ)句表達(dá)式語(yǔ)句是1153.2.1條件語(yǔ)句1.單選條件語(yǔ)句一般格式if(<表達(dá)式>)語(yǔ)句執(zhí)行過程:先求出表達(dá)式的值,若表達(dá)式的值為非0,則執(zhí)行語(yǔ)句,否則跳過語(yǔ)句,直接執(zhí)行if的后續(xù)語(yǔ)句。表達(dá)式語(yǔ)句是(非0)if語(yǔ)句執(zhí)行程假(0)3.2.1條件語(yǔ)句1.單選條件語(yǔ)句表達(dá)式語(yǔ)句是(非0116說明:<表達(dá)式>是符合C++語(yǔ)法規(guī)則的任一表達(dá)式語(yǔ)句是C++中任意合法的語(yǔ)句由于單選條件語(yǔ)句只是一個(gè)語(yǔ)句,所以把“語(yǔ)句”稱為條件語(yǔ)句的內(nèi)嵌語(yǔ)句,并把內(nèi)嵌語(yǔ)句的語(yǔ)句結(jié)束符“;”作為單選條件語(yǔ)句的結(jié)束符。說明:117例如:if(x>2)y=y+4;y=x*x+5*x;上面兩行程序的執(zhí)行過程:若x>2成立,執(zhí)行y=y+4的操作,接著執(zhí)行第二行語(yǔ)句;否則,不執(zhí)行y=y+4的操作,直接執(zhí)行第二行的語(yǔ)句。例如:118如果內(nèi)嵌語(yǔ)句有多個(gè)操作語(yǔ)句,用“{}”將幾個(gè)語(yǔ)句括起來(lái)作為一個(gè)復(fù)合語(yǔ)句,例如:if(a>b){t=a;a=b;b=t;}注意,此時(shí)在“{}”后不需要加分號(hào),因?yàn)椤皗}”是一個(gè)完整的復(fù)合語(yǔ)句,不需要另加分號(hào)。如果內(nèi)嵌語(yǔ)句有多個(gè)操作語(yǔ)句,用“{}”將幾個(gè)語(yǔ)119【例3.1】if語(yǔ)句應(yīng)用舉例#include<iostream.h>voidmain(){ intx=1;inty=3,z=0;if(x<y)z=y-x;cout<<z<<endl;}輸出為2分析:表達(dá)式x<y成立,執(zhí)行“z=y-x;”語(yǔ)句,使z改變了值。所以,輸出的不是z原來(lái)的值0,而是2?!纠?.1】if語(yǔ)句應(yīng)用舉例輸出為1202.二選一條件語(yǔ)句一般格式為:if(<表達(dá)式>)語(yǔ)句1else語(yǔ)句2執(zhí)行過程先求出表達(dá)式的值,若表達(dá)式的值為非0,執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。是(非0)if...else語(yǔ)句執(zhí)行流程否(0)表達(dá)式語(yǔ)句2語(yǔ)句12.二選一條件語(yǔ)句是(非0)if...else語(yǔ)句執(zhí)行流程121說明:<表達(dá)式>是符合C++語(yǔ)法規(guī)則的任一表達(dá)式語(yǔ)句1和語(yǔ)句2是C++中任意合法的語(yǔ)句。說明:122【例3.2】某公司計(jì)時(shí)員工的薪金規(guī)定為:月工作時(shí)間在180小時(shí)內(nèi)的,每小時(shí)8元,超過180小時(shí)的作加班計(jì),超出部分為每小時(shí)10元,請(qǐng)編寫程序計(jì)算員工的月工資(設(shè)工作小時(shí)為整數(shù))。分析:若員工的月工作時(shí)間<180小時(shí),那么他的工資=小時(shí)數(shù)×8,若>=180小時(shí),則工資=180×8+超出180小時(shí)部分×10。【例3.2】某公司計(jì)時(shí)員工的薪金規(guī)定為:月工作時(shí)間在180小123程序如下:#include<iostream.h>voidmain(){ inthours,pay; cout<<”輸入員工本月工作時(shí)間(小時(shí)):”; cin>>hours; if(hours>180) pay=180*8+(hours-180)*10; else pay=hours*8; cout<<”該員工本月工作時(shí)間:”<<hours<<”小時(shí)”<<endl; cout<<”應(yīng)得工資為:”<<pay<<endl;}程序如下:124【例3.3】從鍵盤上輸入三個(gè)整數(shù),輸出三個(gè)數(shù)中的最大數(shù)。程序如下:#include<iostream.h>voidmain(){ intx,y,z,t; cout<<”輸入三個(gè)整數(shù):”; cin>>x>>y>>z; cout<<”x=”<<x<<”“<<”y=”<<y<<”“<<”z=”<<z<<endl; if(x>=y)t=x; else t=y; cout<<”三個(gè)數(shù)中的最大數(shù)是:”;if(t>z)cout<<t<<endl;else cout<<z<<endl;}分析:對(duì)三個(gè)數(shù)作兩次比較,1)比較前兩個(gè)數(shù),把大數(shù)存于中間變量;2)把中間變量和第三個(gè)數(shù)比較,輸出其中的較大數(shù)。【例3.3】從鍵盤上輸入三個(gè)整數(shù),輸出三個(gè)數(shù)中的最大數(shù)。分析125【例3.4】從鍵盤輸入兩個(gè)整數(shù),判別其中的較小數(shù)是否是較大數(shù)的約數(shù)。程序如下:#include<iostream.h>#include<math.h>voidmain(){ intmax,min,t; cout<<”輸入兩個(gè)整數(shù):”; cin>>max>>min;分析:從鍵盤輸入的兩數(shù),先判別其大小,再用大數(shù)對(duì)小數(shù)進(jìn)行求余操作,若余數(shù)為0,則說明是約數(shù),否則不是。【例3.4】從鍵盤輸入兩個(gè)整數(shù),判別其中的較小數(shù)是否是較大數(shù)126
if(max<min) t=max,max=min,min=t; if(max%min!=0) cout<<min<<”不是”<<max<<”的約數(shù)。\n”; else cout<<min<<”是”<<max<<”的約數(shù)。\n”;} if(max<min)1273.嵌套的條件語(yǔ)句條件語(yǔ)句中,內(nèi)嵌的語(yǔ)句可以是任一C++的語(yǔ)句,當(dāng)然也可以是條件語(yǔ)句。當(dāng)條件語(yǔ)句的內(nèi)嵌語(yǔ)句是條件語(yǔ)句時(shí),稱為嵌套的條件語(yǔ)句。一般格式為:if(<表達(dá)式1>)語(yǔ)句1elseif(<表達(dá)式2>)語(yǔ)句2elseif(<表達(dá)式3>)語(yǔ)句3……else語(yǔ)句n3.嵌套的條件語(yǔ)句128嵌套的條件語(yǔ)句一般是單選條件語(yǔ)句和二選一條件語(yǔ)句的組合。當(dāng)嵌套條件語(yǔ)句出現(xiàn)如下形式時(shí):if(e1)if(e2)語(yǔ)句1 //內(nèi)嵌的ifelse語(yǔ)句2理解上會(huì)出現(xiàn)二義性。C++規(guī)定:else總是和它前面最近的一個(gè)未配對(duì)過的if進(jìn)行配對(duì)。按照這種規(guī)定,上面嵌套的條件語(yǔ)句中else是與第二個(gè)if而不是和第一個(gè)if配對(duì)。嵌套的條件語(yǔ)句一般是單選條件語(yǔ)句和二選一條件129因此使用內(nèi)嵌的if語(yǔ)句應(yīng)包含else部分,這樣if數(shù)目和else數(shù)目相同,內(nèi)層到外層一一對(duì)應(yīng),不致出錯(cuò),或者將只有if而無(wú)else分支的條件語(yǔ)句內(nèi)嵌在外層的else子句中,這樣也不會(huì)出錯(cuò)?;蛘呖梢约踊ɡㄌ?hào)來(lái)確定配對(duì)關(guān)系。例如,將上述語(yǔ)句寫成下列形式:if(e1){if(e2)語(yǔ)句1} //內(nèi)嵌的ifelse語(yǔ)句2這時(shí),{}限定了內(nèi)嵌if語(yǔ)句的范圍,因此else與第一個(gè)if配對(duì)。因此使用內(nèi)嵌的if語(yǔ)句應(yīng)包含else部分,這樣i130【例3.5】求一元二次方程ax2+bx+c=0的解。其中a,b,c從鍵盤輸入(a不為0)。分析:輸入系數(shù)a,b,c的值后,程序要根據(jù)b2-4ac的值來(lái)確定方程根的情況。當(dāng)b2-4ac<0時(shí),方程無(wú)實(shí)根,當(dāng)b2-4ac=0時(shí),方程有兩個(gè)相同的實(shí)根,若b2-4ac>0,則方程有兩個(gè)不同的實(shí)根?!纠?.5】求一元二次方程ax2+bx+c=0的解。其中a,131程序如下:#include<iostream.h>#include<math.h>voidmain(){ doublea,b,c,d,root1,root2; cout<<”輸入a,b,c的值(a不為0):”; cin>>a>>b>>c; d=b*b-4*a*c; if(d<0) cout<<”該方程無(wú)實(shí)根?!?else //當(dāng)d不小于0時(shí)程序如下:132 if(d) //若d不為0{ root1=(-b+sqrt(d))/(2*a); root2=(-b-sqrt(d))/(2*a); cout<<”該方程有兩個(gè)不同的實(shí)根:”; cout<<”x1=”<<root1<<’\t’<<“x2=”<<root2; } else { root1=-b/(2*a); cout<<”該方程有兩個(gè)相等的實(shí)根:x1=x2=”<<root1; } cout<<endl; } if(d) //若d不為01333.2.2條件運(yùn)算符在C++中提供了一個(gè)條件運(yùn)算符“?:”,它是三元運(yùn)算符,一般格式為:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>執(zhí)行過程:先求出表達(dá)式1的值,若其為非0,則求出表達(dá)式2的值(不求表達(dá)式3的值),把該值作為運(yùn)算的結(jié)果;否則求出表達(dá)式3的值(不求表達(dá)式2的值),把它作為運(yùn)算的結(jié)果。3.2.2條件運(yùn)算符在C++中提供了一個(gè)條件運(yùn)算符“?:”134說明:(1)三個(gè)<表達(dá)式>可以是符合C++語(yǔ)法規(guī)則的任意表達(dá)式。(2)是優(yōu)先級(jí)較低的運(yùn)算符,它僅高于賦值運(yùn)算符、復(fù)合賦值運(yùn)算符和逗號(hào)運(yùn)算符。(3)在某些應(yīng)用場(chǎng)合,它也可以實(shí)現(xiàn)選擇語(yǔ)句的功能。說明:135例如:求兩個(gè)數(shù)中的較小數(shù)min=x<=y?x:y;它等同于條件語(yǔ)句:if(x<=y) min=x;elsemin=y;
例如:求兩個(gè)數(shù)中的較小數(shù)136條件運(yùn)算符的結(jié)合性是從右向左,它的運(yùn)算結(jié)果是一個(gè)數(shù)值,可以繼續(xù)參加運(yùn)算,也可用于表達(dá)式求值的任何地方。例如:if(x<y?x:z<y?z:y)a=b;cout<<x<y?x:y;條件運(yùn)算符的結(jié)合性是從右向左,它的運(yùn)算結(jié)果是一個(gè)數(shù)137條件運(yùn)算符可以嵌套使用。如求三個(gè)變量x,y,z中的最小值,用條件運(yùn)算符可表示為: min=(t=x<=y?x:y)<=z?t:z;等同于以下的條件語(yǔ)句: if(x<=y)t=x; elset=y; if(t<=z)min=t;elsemin=z;顯然,前面的表示法比后一種要簡(jiǎn)潔。條件運(yùn)算符可以嵌套使用。如求三個(gè)變量x,y,z中1383.2.3開關(guān)語(yǔ)句開關(guān)語(yǔ)句是switch語(yǔ)句,它也稱為多分支選擇語(yǔ)句。它可以根據(jù)給定的條件,從多個(gè)分支中選擇執(zhí)行一個(gè)分支的語(yǔ)句。3.2.3開關(guān)語(yǔ)句開關(guān)語(yǔ)句是switch語(yǔ)句,它也稱139一般格式為:switch(<表達(dá)式>){ case<常量表達(dá)式1>:<語(yǔ)句1;> <break;> case<常量表達(dá)式2>:<語(yǔ)句2;> <break;> …… case<常量表達(dá)式n>:<語(yǔ)句n;> <break;> default:語(yǔ)句n+1;}一般格式為:140執(zhí)行過程:先計(jì)算條件表達(dá)式的值,從上向下依次與case后面的常量表達(dá)式比較,若與某一常量表達(dá)式的值相等,就轉(zhuǎn)去執(zhí)行該case后的語(yǔ)句,一直執(zhí)行到break語(yǔ)句或開關(guān)語(yǔ)句的右花括號(hào)為止。若無(wú)相等的值,有default分支,就執(zhí)行該分支后的語(yǔ)句,否則什么也不執(zhí)行。執(zhí)行過程:先計(jì)算條件表達(dá)式的值,從上向下依次與case后面的141說明:<表達(dá)式>可以是任一符合C++語(yǔ)法規(guī)則的表達(dá)式,其值只能是整型或字符型;<常量表達(dá)式>只能是由常量所組成的表達(dá)式,其值也只能是整型或字符型,任意兩個(gè)case之后不能出現(xiàn)相同值;“語(yǔ)句”是任意C++語(yǔ)句,它可以是一個(gè)語(yǔ)句,也可以是多個(gè)語(yǔ)句;break語(yǔ)句是可選的。說明:142注意:(1)default分支可放在開關(guān)語(yǔ)句的任何位置,但通常作為最后一個(gè)分支。(2)每個(gè)case均作為開關(guān)語(yǔ)句的一個(gè)分支入口,表達(dá)式的值用來(lái)確定進(jìn)入開關(guān)語(yǔ)句中的哪一個(gè)入口,并開始執(zhí)行該語(yǔ)句。程序執(zhí)行時(shí)遇到break語(yǔ)句就跳出switch。(3)當(dāng)沒有break語(yǔ)句時(shí),流程在執(zhí)行完一個(gè)case后面的語(yǔ)句后,轉(zhuǎn)向下一個(gè)case后的語(yǔ)句繼續(xù)執(zhí)行。注意:143(4)當(dāng)省略case后面的語(yǔ)句時(shí),可實(shí)現(xiàn)多個(gè)入口執(zhí)行同一個(gè)語(yǔ)句。(4)當(dāng)省略case后面的語(yǔ)句時(shí),可實(shí)現(xiàn)多個(gè)入口執(zhí)行同一個(gè)語(yǔ)144例如:intletter,space,other;charc;……switch(c){ case'a': case'b': case'c': case'd':letter++; break; case'\n': case'': case'\t':space++; break; default:other++;}當(dāng)字符變量c的值為'\n',''或'\t'時(shí),均執(zhí)行space++當(dāng)字符變量c的值為'a','b','c'或'd'時(shí),均執(zhí)行l(wèi)etter++例如:當(dāng)字符變量c的值為'\n',''或'\t'時(shí),均執(zhí)行145(5)在運(yùn)用switch時(shí)要注意符合語(yǔ)句的語(yǔ)法規(guī)則。inta,b,c;……a=3;b=4;switch(c) { case2.5:… //常量表達(dá)式的值應(yīng)為字符型或整型,不能為實(shí)型casea+b:…//a+b不是常量表達(dá)式case1,2,3:…//不能用這種表示方法來(lái)實(shí)現(xiàn)多個(gè)入口執(zhí)行同一語(yǔ)句}(5)在運(yùn)用switch時(shí)要注意符合語(yǔ)句的語(yǔ)法規(guī)則。146從開關(guān)語(yǔ)句的執(zhí)行過程可知,任一開關(guān)語(yǔ)句都可以用條件語(yǔ)句來(lái)實(shí)現(xiàn),但有些條件語(yǔ)句不可以用開關(guān)語(yǔ)句來(lái)實(shí)現(xiàn)。這是由于開關(guān)語(yǔ)句中限定了表達(dá)式的取值類型,而條件語(yǔ)句中的條件表達(dá)式可取任意類型的值。從開關(guān)語(yǔ)句的執(zhí)行過程可知,任一開關(guān)語(yǔ)句都可以用條件語(yǔ)句來(lái)實(shí)現(xiàn)147【例3.6】根據(jù)輸入的百分制成績(jī)給學(xué)生打等第。90分及以上為“excellent”80~89分為“fine”70~79分為“better”60~69分為“passed”60分以下為“failed”。分析:輸入的成績(jī)是百分制的,若用原始成績(jī)來(lái)構(gòu)造switch語(yǔ)句,那就需要幾十個(gè)入口,考慮到分?jǐn)?shù)段與等第對(duì)應(yīng)的情況(基本以10分為區(qū)間),先把成績(jī)?nèi)フ?0,這樣對(duì)應(yīng)的case語(yǔ)句的數(shù)量相對(duì)合理。【例3.6】根據(jù)輸入的百分制成績(jī)給學(xué)生打等第。90分及以上為148程序如下:#include<iostream.h>voidmain(){ intscore;cout<<”輸入學(xué)生的成績(jī)(0~100):”;cin>>score;cout<<”\n該學(xué)生的等第為:”;程序如下:149switch(score/10){ case 10: case9: cout<<”excellent!”; break; case8: cout<<”fine!”; break; case7: cout<<”better!”; break; case6: cout<<”passed!”; break; default: cout<<”failed!”;}cout<<endl; }switch(score/10)150【例3.7】設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器:能完成兩個(gè)數(shù)的加、減、乘、除運(yùn)算。如輸入1.5*3,則輸出為1.5*3=4.5。程序如下:#include<iostream.h>voidmain(){floatn1,n2,result;charop; cout<<”輸入數(shù)據(jù),格式為:數(shù)1運(yùn)算符數(shù)2:”;cin>>n1>>op>>n2; cout<<endl; cout<<n1<<op<<n2<<”=”;分析:從鍵盤上讀取運(yùn)算數(shù)和運(yùn)算符,根據(jù)不同的運(yùn)算符進(jìn)行運(yùn)算并輸出結(jié)果。【例3.7】設(shè)計(jì)一個(gè)簡(jiǎn)單的計(jì)算器:能完成兩個(gè)數(shù)的加、減、乘、151 switch(op) { case ‘+’:result=n1+n2; cout<<result<<endl; break; case‘-‘:result=n1-n2; cout<<result<<endl; break; case‘*’:result=n1*n2; cout<<result<<endl; break; case‘/’:result=n1/n2; cout<<result<<endl; break; default:cout<<”無(wú)結(jié)果!(運(yùn)算不能進(jìn)行)”<<endl;}} switch(op)1523.3循環(huán)結(jié)構(gòu)在進(jìn)行程序設(shè)計(jì)時(shí),常常會(huì)有一些需要重復(fù)執(zhí)行的操作,可通過循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)這種重復(fù)執(zhí)行的操作。例如,求s=1+2+3+……+100的和,在程序中不可能列出100個(gè)數(shù)再相加。3.3循環(huán)結(jié)構(gòu)在進(jìn)行程序設(shè)計(jì)時(shí),常常會(huì)有一些需要重復(fù)執(zhí)行153要完成這樣的求和操作,可用以下步驟實(shí)現(xiàn):(1)設(shè)置整型變量s為累加器,置0;(2)給整型量i置1;(3)使s=s+i;(4)使i=i+1;(5)若i<=100,重復(fù)步驟(3)和(4);(6)輸出s的值。在以上步驟中,步驟(3)和(4)是重復(fù)執(zhí)行部分,這種重復(fù)執(zhí)行的操作稱為循環(huán)體。要完成這樣的求和操作,可用以下步驟實(shí)現(xiàn):1543.3.1for語(yǔ)句一般格式為:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)語(yǔ)句其中三個(gè)表達(dá)式可以是C++中的任一符合語(yǔ)法規(guī)則的表達(dá)式;“語(yǔ)句”可以是任意C++的語(yǔ)句,是for的內(nèi)嵌語(yǔ)句,把它稱為循環(huán)體。3.3.1for語(yǔ)句一般格式為:155執(zhí)行過程:1)先求出表達(dá)式1的值;2)求出表達(dá)式2的值,若表達(dá)式2的值為非0,則轉(zhuǎn)去(3),否則轉(zhuǎn)去(4);3)執(zhí)行語(yǔ)句,然后求表達(dá)式3的值,轉(zhuǎn)去(2);4)結(jié)束循環(huán),執(zhí)行for的下一個(gè)語(yǔ)句。表達(dá)式2循環(huán)體語(yǔ)句是(非0)for語(yǔ)句執(zhí)行流程表達(dá)式1表達(dá)式3否(0)for的下一語(yǔ)句執(zhí)行過程:表達(dá)式2循環(huán)體語(yǔ)句是(非0)for語(yǔ)句執(zhí)行流程表達(dá)156例如,求s=1+2+3+……+100的和?!璼=0;for(i=1;i<=100;i++)s=s+i;……其中:表達(dá)式1是i=1,即給控制循環(huán)的變量i賦初始值1;表達(dá)式2是i<=100,是控制循環(huán)的條件,即當(dāng)i<=100時(shí),繼續(xù)求累加和(執(zhí)行循環(huán)體s=s+i);表達(dá)式3是i++,使循環(huán)變量發(fā)生增值,以控制循環(huán)可以結(jié)束。例如,求s=1+2+3+……+100的和。157說明:(1)從for語(yǔ)句的執(zhí)行過程可知,語(yǔ)句執(zhí)行時(shí),先判斷循環(huán)條件,若條件滿足,才執(zhí)行循環(huán)體,所以有可能循環(huán)體一次也不執(zhí)行。(2)for語(yǔ)句的三個(gè)表達(dá)式可以是任意表達(dá)式,也可以是逗號(hào)表達(dá)式。例如: for(s=0,i=1;i<=100;i++)s=s+i;逗號(hào)表達(dá)式說明:逗號(hào)表達(dá)式158(3)表達(dá)式之間以分號(hào)間隔;三個(gè)表達(dá)式可以部分省略或全部省略,但分號(hào)不能省略。例如:s=0;i=1;for(;i<=100;i++)s=s+i; //省略了表達(dá)式1或:s=0;i=1;for(;i<=100;){s=s+i;i++;} //省略了表達(dá)式1和表達(dá)式3(3)表達(dá)式之間以分號(hào)間隔;三個(gè)表達(dá)式可以部分省略或全部省略159或:s=0;i=1;for(;;i++)s=s+i; //省略了表達(dá)式1和表達(dá)式2這里省略了表達(dá)式2,系統(tǒng)約定,相當(dāng)于其值為1,這樣循環(huán)就會(huì)無(wú)終止地進(jìn)行,形成了死循環(huán)。為避免這種情況,要在循環(huán)體的語(yǔ)句里增加終止循環(huán)的語(yǔ)句?;颍?60或:s=0;i=1;for(;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年橋梁安全性分析與技術(shù)措施
- 2026春招:行政專員真題及答案
- 2026春招:銷售代表面試題及答案
- 人工智能在康復(fù)醫(yī)學(xué)中的應(yīng)用
- 手術(shù)室護(hù)理要點(diǎn)解讀
- 人工智能在疾病診斷與治療中的應(yīng)用
- 2026年河南水利與環(huán)境職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考試題帶答案解析
- 2026年廣西安全工程職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考試題帶答案解析
- 醫(yī)療單位醫(yī)護(hù)人員職業(yè)操守
- 醫(yī)學(xué)倫理學(xué)在臨床實(shí)踐
- 石油高級(jí)中學(xué)高二上學(xué)期10月月考語(yǔ)文試題(含解析)
- 2024年大學(xué)生電子版三方協(xié)議書模板
- 2024新版(閩教版)三年級(jí)英語(yǔ)上冊(cè)單詞帶音標(biāo)
- 福建省廈門市七年級(jí)語(yǔ)文上學(xué)期期末測(cè)試題(含答案)
- 無(wú)人機(jī)駕駛員培訓(xùn)計(jì)劃及大綱
- 五軸加工管理制度
- 4M變化點(diǎn)管理記錄表
- Tickets-please《請(qǐng)買票》 賞析完整
- 《馬克的怪病》課件
- 部編版八年級(jí)道德與法治上冊(cè)《樹立維護(hù)國(guó)家利益意識(shí)捍衛(wèi)國(guó)家利益》教案及教學(xué)反思
- 基于單片機(jī)的智能家居控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論