第三章 基本控制結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
第三章 基本控制結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
第三章 基本控制結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
第三章 基本控制結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
第三章 基本控制結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩90頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第三章基本控制結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn)是任何程序都可由三種基本結(jié)構(gòu)及其組合來描述。本章將介紹C++分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的設(shè)計(jì)方法。還將介紹一些常用算法。第三章基本控制結(jié)構(gòu)程序設(shè)計(jì)

3.1分支結(jié)構(gòu)程序設(shè)計(jì)

3.5枚舉類型

3.4常用算法的應(yīng)用實(shí)例

3.3轉(zhuǎn)向語(yǔ)句

3.2循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

3.6輸入輸出文件簡(jiǎn)介3.1分支結(jié)構(gòu)程序設(shè)計(jì)對(duì)程序的運(yùn)行流程進(jìn)行控制,主要通過執(zhí)行專門用來控制流程的語(yǔ)句來實(shí)現(xiàn)。流程控制語(yǔ)句也稱為過程化語(yǔ)句。分支語(yǔ)句是三種基本流程控制語(yǔ)句之一。C++提供以下三種分支語(yǔ)句:

if語(yǔ)句

條件運(yùn)算符“?:”

swith

語(yǔ)句

3.1分支結(jié)構(gòu)程序設(shè)計(jì)3.1.1if語(yǔ)句

3.1.2條件運(yùn)算符“?:”

3.2.1swich語(yǔ)句

3.1.1if

語(yǔ)句if語(yǔ)句有兩種基本格式為:1、if(<表達(dá)式>)<語(yǔ)句1>;2、if(<表達(dá)式>)<語(yǔ)句1>else <語(yǔ)句2>;

if語(yǔ)句【例3.1】輸入一個(gè)年份,判斷是否閏年。算法分析:假定年份為year,閏年的條件是:year%4==0&&year%100!=0||year%400==0。#include<iostream.h>voidmain(){ intyear; cout<<"輸入年份:"<<endl; cin>>year; if(year%4==0&&year%100!=0 ||year%400==0)

cout<<year<<"是閏年"<<endl; elsecout<<year<<"不是閏年"<<endl;}ok分析:讀入三個(gè)數(shù),先求出兩個(gè)數(shù)中較大者,再將該大數(shù)與第三個(gè)數(shù)比較,求出最大數(shù)。#include<iostream.h>voidmain(){inta,b,c,max;cout<<"輸入三個(gè)正數(shù):";cin>>a>>b>>c;

cout<<"a="<<a<<'\t'<<"b="<<b<<'\t‘ <<"c="<<c<<endl;if(a>b)max=a;elsemax=b;if(c>max)cout<<“最大數(shù)為:”<<c<<endl;elsecout<<“最大數(shù)為:”<<max<<endl;}

if

語(yǔ)句【例3.2】從鍵盤上輸入三個(gè)整數(shù),輸出其中的最大數(shù)。ok

if語(yǔ)句中,如果內(nèi)嵌語(yǔ)句又是if語(yǔ)句,就構(gòu)成了嵌套if語(yǔ)句。if語(yǔ)句可實(shí)現(xiàn)二選一分支,而嵌套if語(yǔ)句則可以實(shí)現(xiàn)多選一的多路分支情況。嵌套有兩種形式,第一種是嵌套在else分支中:if(<表達(dá)式1>)<語(yǔ)句1>;elseif(<表達(dá)式2>)語(yǔ)句2;elseif…else<語(yǔ)句n>;

第二種是嵌套在if分支中為:if(<表達(dá)式1>)if(<表達(dá)式2>)<語(yǔ)句1>;

else<語(yǔ)句2>;

if語(yǔ)句//方法1:采用if中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個(gè)正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl; if(a>b)if(a>c)max=a;//a>b且a>c elsemax=c;//a>b且a<c else if(b>c)max=b;//a<=b且b>c elsemax=c;//a<=b且b<c cout<<"最大數(shù)max="<<max;}

if

語(yǔ)句【例3.3】用嵌套if語(yǔ)句完成【例3.2】的任務(wù)。ok//方法2:采用else中嵌套形式#include<iostream.h>voidmain(){ inta,b,c,max; cout<<"輸入三個(gè)正數(shù):"; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl; if(a>b&&a>c)max=a; elseif(b>a&&b>c)max=b; elsemax=c; cout<<"最大數(shù)為:max="<<max;}

if

語(yǔ)句ok

要特別注意else和if的配對(duì)關(guān)系。C++規(guī)定了if和else的“就近配對(duì)”原則,即相距最近且還沒有配對(duì)的一對(duì)if和else首先配對(duì)。按上述規(guī)定,第二種嵌套形式中的else應(yīng)與第二個(gè)if配對(duì)。如果根據(jù)程序的邏輯需要改變配對(duì)關(guān)系,則要將屬于同一層的語(yǔ)句放在一對(duì)“{}”中。如第二種嵌套形式中,要讓else和第一個(gè)if配對(duì),語(yǔ)句必須寫成:if(表達(dá)式1){if(表達(dá)式2)語(yǔ)句1;}else語(yǔ)句2;

第二種嵌套形式較容易產(chǎn)生邏輯錯(cuò)誤,而第一種形式配對(duì)關(guān)系則非常明確,因此從程序可讀性角度出發(fā),建議盡量使用第一種嵌套形式。請(qǐng)看以下兩個(gè)語(yǔ)句://語(yǔ)句1:if(n%3==0)if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;elsecout<<n<<″是3的倍數(shù)但不是5的倍數(shù)″<<endl;//語(yǔ)句2:if(n%3==0){if(n%5==0)cout<<n<<″是15的倍數(shù)″<<endl;}elsecout<<n<<″不是3的倍數(shù)″兩個(gè)語(yǔ)句的差別只在于一個(gè)“{}”,但表達(dá)的邏輯關(guān)系卻完全不同。【例3.4】某商場(chǎng)優(yōu)惠活動(dòng)規(guī)定,某種商品單價(jià)為80元,一次購(gòu)買5件以上(包含

5件)10件以下(不包含10件)打9

折,一次購(gòu)買10件以上(包含10件)打8折。設(shè)計(jì)程序根據(jù)客戶的購(gòu)買量計(jì)算總價(jià)。

if

語(yǔ)句算法1、輸入購(gòu)買件數(shù)count,設(shè)置單價(jià)price=80(元)2、根據(jù)count值確定折扣discount;3、實(shí)際售價(jià)amount=price*count*discount;4、輸出amount的值。算法細(xì)化:2.1、if(count<5)discount=1;2.2、if(count>=5&&count<10)discount=0.9;2.3、if(count>=10)discount=0.8;ok#include<iostream.h>voidmain(){floatprice=80,discount,amount;//單價(jià),折扣,總價(jià)

intcount; //購(gòu)買件數(shù)

cout<<"輸入購(gòu)買件數(shù):"<<endl;

cin>>count;

if(count<5)discount=1;elseif(count<10)discount=0.9;elsediscount=0.8;amount=price*count*discount;

cout<<"購(gòu)買件數(shù):"<<count<<endl;

cout<<"單價(jià):"<<price<<'\t'<<"折扣:“

<<discount<<endl;

cout<<"總價(jià):"<<amount<<endl;}請(qǐng)?jiān)赩C++平臺(tái)上運(yùn)行,輸入不同的件數(shù),使程序所有分支都可以被執(zhí)行一次。ok【例3.5】求一元二次方程

ax2+bx+c=0的根。其中系數(shù)a(a≠0)、b、c的值由鍵盤輸入。分析:輸入系數(shù)a(a≠0)、b、c后,令delta=b2–4ac,結(jié)果有三種情況:若delta=0,方程有兩個(gè)相同實(shí)根;若delta>0,方程有兩個(gè)不同實(shí)根;若delta<0,方程無(wú)實(shí)根。

if

語(yǔ)句算法1、輸入系數(shù)a(a≠0)、b、c;2、令delta=b2–4ac;3、根據(jù)delta的值求方程的根;4、輸出方程的根;算法細(xì)化:3.1、if(delta==0)方程有兩個(gè)相同實(shí)根;計(jì)算…3.2、if(delta>0)方程有兩個(gè)不同實(shí)根;計(jì)算…3.3、if(delta<0)方程無(wú)實(shí)根;計(jì)算…ok#include<iostream.h>#include<math.h>voidmain(){ floata,b,c; floatdelta,x1,x2; constfloatzero=0.0001;//定義一個(gè)很小的常數(shù)

cout<<"輸入三個(gè)系數(shù)a(a!=0),b,c:"<<endl;

cin>>a>>b>>c;

cout<<"a="<<a<<'\t'<<"b="<<b<<'\t‘ <<"c="<<c<<endl; delta=b*b-4*a*c;求一元二次方程的根源程序if(fabs(delta)<zero){//絕對(duì)值很小的數(shù)即被認(rèn)為是0

cout<<"方程有兩個(gè)相同實(shí)根:";

cout<<"x1=x2="<<-b/(2*a)<<endl;}elseif(delta>0){ delta=sqrt(delta); x1=(-b+delta)/(2*a); x2=(-b-delta)/(2*a);

cout<<"方程有兩個(gè)不同實(shí)根:";

cout<<"x1="<<x1<<'\t'<<"x2=“ <<x2<<endl;} else //delta<0

cout<<"方程無(wú)實(shí)根!"<<endl;}請(qǐng)?jiān)赩C++平臺(tái)上運(yùn)行,輸入不同的系數(shù),使程序所有分支都可以被執(zhí)行一次。3.1.2條件運(yùn)算符“?:”

if語(yǔ)句在某些情況下可以用條件運(yùn)算符“?:”來簡(jiǎn)化表達(dá)?!?:”是一個(gè)三元運(yùn)算符,其構(gòu)成的表達(dá)式格式為:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>執(zhí)行邏輯:先計(jì)算表達(dá)式1,若其值為真(或非0),則計(jì)算表達(dá)式2(不計(jì)算表達(dá)式3),并將該值作為整個(gè)表達(dá)式的值;反之,即表達(dá)式1的值為假或?yàn)?,則計(jì)算表達(dá)式3(不計(jì)算表達(dá)式2),并將該值作為整個(gè)表達(dá)式的值。例如:inta=6,b=7,min=a<b?a:b;//min=6 min=a<b?++a:++b;//min=7a=7b=7min=a<b?a++:b++;//min=6a=7b=7ok3.1.3switch語(yǔ)句用嵌套if語(yǔ)句可以實(shí)現(xiàn)多選一的情況。另外C++中還提供了一個(gè)switch語(yǔ)句,稱為開關(guān)語(yǔ)句,也可以用來實(shí)現(xiàn)多選一:switch(表達(dá)式){case常量表達(dá)式1:《語(yǔ)句序列1》《break;》……case常量表達(dá)式n:《語(yǔ)句序列n》《break;》《default:語(yǔ)句序列》}

switch語(yǔ)句格式(1)各個(gè)case(包括default)分支出現(xiàn)的次序可以任意,通常將default放在最后。(2)break語(yǔ)句可選,如果沒有break語(yǔ)句,每一個(gè)case分支都只作為開關(guān)語(yǔ)句的執(zhí)行入口,執(zhí)行完該分支后,還將接著執(zhí)行其后的所有分支。因此,為保證邏輯的正確實(shí)現(xiàn),通常每個(gè)case分支都與break語(yǔ)句聯(lián)用。(3)每個(gè)常量表達(dá)式的取值必須各不相同,否則將引起歧義。(4)允許多個(gè)常量表達(dá)式對(duì)應(yīng)同一個(gè)語(yǔ)句序列。例如:charscore;cin>>score;switch(score){case′A′:case′a′:cout<<″e(cuò)xcellent″; break;case′B′:case′b′:cout<<″good″;break;default:cout<<″fair″;}(5)從形式上看,switch語(yǔ)句的可讀性比嵌套if語(yǔ)句好,但不是所有多選一的問題都可由開關(guān)語(yǔ)句完成,這是因?yàn)殚_關(guān)語(yǔ)句中限定了條件表達(dá)式的取值類型。

ok

switch語(yǔ)句例子【例3.6】

運(yùn)輸公司對(duì)所運(yùn)貨物實(shí)行分段計(jì)費(fèi)。設(shè)運(yùn)輸里程為s,則運(yùn)費(fèi)打折情況如下:

s<250 不打折扣

250<=s<500 2%折扣

500<=s<1000 5%折扣

1000<=s<2000 8%折扣

2000<=s<3000 10%折扣

3000<=s 15%折扣設(shè)每公里每噸的基本運(yùn)費(fèi)為p,貨物重量為w,折扣為d,則總運(yùn)費(fèi)f為:f=p*w*s*(1-d)設(shè)計(jì)程序,當(dāng)輸入p、w和s后,計(jì)算運(yùn)費(fèi)f。算法1、輸入每噸運(yùn)費(fèi)p、貨物重量w、運(yùn)輸里程s;2、根據(jù)運(yùn)輸里程s計(jì)算折扣d;3、計(jì)算總運(yùn)費(fèi)f=p*w*s*(1-d);4、輸出計(jì)算結(jié)果;算法細(xì)化:2、根據(jù)運(yùn)輸里程s計(jì)算折扣d分析:如果用switch語(yǔ)句,必須使表達(dá)式符合語(yǔ)法要求,分析發(fā)現(xiàn),里程s的分段點(diǎn)均是250的倍數(shù),因此,將里程s除以250,取整數(shù)商,便得到若干整數(shù)值。okswitch(c=s/250){case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;default:d=0.15;}s<250 不打折扣250<=s<500 2%折扣500<=s<1000 5%折扣1000<=s<2000 8%折扣2000<=s<3000 10%折扣3000<=s15%折扣#include<iostream.h>#include<iomanip.h>voidmain(){intc,s;floatp,w,d,f; cout<<"輸入運(yùn)輸單價(jià)p,重量w和里程s:"<<endl; cin>>p>>w>>s;c=s/250;

switch(c){ case0:d=0;break; case1:d=0.02;break; case2:case3:d=0.05;break; case4:case5:case6:case7:d=0.08;break; case8:case9:case10:case11:d=0.1;break; default:d=0.15;} f=p*w*s*(1-d); cout<<"運(yùn)輸單價(jià)為"<<p<<'\t'<<"重量為"<<w<<'\t‘ <<"里程為"<<s<<endl; cout<<"折扣為"<<d<<endl; cout<<"運(yùn)費(fèi)為"<<f<<endl;}請(qǐng)?jiān)赩C++平臺(tái)上運(yùn)行,輸入不同的里程,使程序所有分支都可以被執(zhí)行一次。ok【例3.7】

設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)加、減、乘、除運(yùn)算。分析:讀入兩個(gè)操作數(shù)和運(yùn)算符,根據(jù)運(yùn)算符完成相應(yīng)運(yùn)算。#include<iostream.h>voidmain(){floatnum1,num2;charop;cout<<"輸入操作數(shù)1,運(yùn)算符,操作數(shù)2:"<<endl;cin>>num1>>op>>num2;

switch(op){case'+':cout<<num1<<op<<num2<<"="<<num1+num2<<endl;break;case'-':cout<<num1<<op<<num2<<"="<<num1-num2<<endl;break;case'*':cout<<num1<<op<<num2<<"="<<num1*num2<<endl;break;case'/':cout<<num1<<op<<num2<<"="<<num1/num2<<endl;break;default:cout<<op<<"是無(wú)效運(yùn)算符!";}}常量表達(dá)式采用字符型,上機(jī)運(yùn)行一下。循環(huán)控制語(yǔ)句是三種基本流程控制語(yǔ)句之一。C++提供以下三種循環(huán)語(yǔ)句:

while語(yǔ)句

do-while語(yǔ)句

for語(yǔ)句3.2循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.2.1while語(yǔ)句

3.2.4循環(huán)的嵌套

3.2.3for語(yǔ)句

3.2.2do-while語(yǔ)句

3.2.1while語(yǔ)句while語(yǔ)句也稱為當(dāng)循環(huán)。語(yǔ)句格式為:while(表達(dá)式)

循環(huán)體語(yǔ)句;

圖3.1while語(yǔ)句的執(zhí)行流程圖求表達(dá)式的值表達(dá)式值為真?是否執(zhí)行循環(huán)體語(yǔ)句

while語(yǔ)句【例3.8】求1+2+3+4的值。okN個(gè)連續(xù)整數(shù)相加算法1、設(shè)置變量i用來放被加數(shù),變量sum用來放和值,并初始化;2、從第一個(gè)數(shù)開始,依次將被加數(shù)賦給i,并進(jìn)行操作sumsum+i;3、輸出sum;細(xì)化算法2:

while(還有被加數(shù)) { i=當(dāng)前被加數(shù);

sum+=i;i準(zhǔn)備接受下一個(gè)被加數(shù);

}源程序如下:#include<iostream.h>voidmain(){

inti=1,sum=0;//循環(huán)初始條件

while(i<=4){ sum+=i; i++; //修改循環(huán)條件

}

cout<<"sum="<<sum<<endl;

}在VC++平臺(tái)上運(yùn)行,試一試是否正確okwhile語(yǔ)句注意:在有循環(huán)語(yǔ)句的程序中,通常循環(huán)開始前對(duì)循環(huán)條件進(jìn)行初始化;而在循環(huán)體語(yǔ)句中要包含修改循環(huán)條件的語(yǔ)句,否則循環(huán)將不能終止而陷入死循環(huán)。C++表達(dá)方式靈活,上例中的循環(huán)語(yǔ)句還可以寫成:while(i<=n)sum+=i++;或者while(sum+=i++,i<=n);//循環(huán)體為空語(yǔ)句修改程序后在VC++平臺(tái)上運(yùn)行,看是否正確3.2.2do-while語(yǔ)句

do-while語(yǔ)句稱為直到循環(huán),格式為:

do循環(huán)體語(yǔ)句

while(表達(dá)式)

否是表達(dá)式的值為真?執(zhí)行循環(huán)體語(yǔ)句求表達(dá)式的值圖3.2do-while語(yǔ)句的執(zhí)行流程圖do-while語(yǔ)句do/while語(yǔ)句和while語(yǔ)句的區(qū)別:多數(shù)情況下可以互相替代。區(qū)別是do/while語(yǔ)句至少執(zhí)行一次循環(huán)體后再判斷循環(huán)條件是否滿足;while語(yǔ)句先判斷條件是否滿足,然后才執(zhí)行循環(huán)體?!纠?.9】

用迭代法求a的平方根近似值。求平方根的迭代公式為:

要求前后兩個(gè)迭代根之差小于10-5。

do-while語(yǔ)句迭代法求解:a是已知正數(shù),x0是迭代初值,給x0一個(gè)值,假定x0=a/2;則用迭代公式依次計(jì)算:x1=(x0+a/x0)/2;x2=(x1+a/x1)/2;……xk+1=(xk+a/xk)/2;當(dāng)|xk+1–xk|<ε(ε是一個(gè)較小的正數(shù))時(shí),迭代終止,取xk+1的值為a的平方根近似值。ok1、輸入a(a>0)及較小正數(shù)delta(也可用常變量);2、x0=a/2;用迭代公式算

x1=(x0+a/x0)/2;3、while(|x1–x0|>=delta)

{ x0=x1

;//把最近的值給x0

;

x1=(x0+a/x0)/2;

}//求xk+1時(shí)只需要知道xk的值,所以只需2個(gè)變量;4、取x1的值為a的平方根近似值,輸出。2、3步驟很適合用do/while語(yǔ)句實(shí)現(xiàn):

x1=a/2;

do{ x0=x1; x1=(x0+a/x0)/2;

}while(|x1–x0|>=delta);和迭代法對(duì)應(yīng)的程序算法是

遞推算法:回到題目#include<iostream.h>#include<math.h>voidmain(){floatx0,x1,a;

cout<<"輸入一個(gè)正數(shù):"; cin>>a;

if(a<0)cout<<a<<"不能開平方!"<<endl;else{ //有實(shí)數(shù)解的情況

x1=a/2; //x1用于保存結(jié)果

do{ x0=x1; x1=(x0+a/x0)/2; }while(fabs(x1-x0)>=1e-5);

cout<<a<<"的平方根為:"<<x1<<endl;}}在VC++平臺(tái)上運(yùn)行,輸入2,3,4,5試一試是否正確回到題目【例3.10】

輸入一段文本,統(tǒng)計(jì)文本的行數(shù)、單詞數(shù)及字符數(shù)。假定單詞之間以空格或跳格或換行符間隔,且文本開始沒有空行。算法分析:1、逐個(gè)讀入文本中的字符,直到讀到一個(gè)輸入結(jié)束符EOF為止。2、如何算行數(shù)?行結(jié)束標(biāo)志為讀到字符′\n′;3、如何算單詞數(shù)?設(shè)一個(gè)變量isword,讀到字符時(shí)isword=1,讀到間隔符時(shí)isword=0;如果讀到一個(gè)間隔符而此時(shí)isword值為1,則說明剛讀完一個(gè)單詞;(如果讀到一個(gè)字符而此時(shí)isword值為0,則說明剛開始讀一個(gè)單詞;)4、如何算字符數(shù)?

do-while語(yǔ)句ok算法1、設(shè)置變量line、word、ch分別代表行數(shù)、單詞數(shù)、非分隔字符數(shù),并初始化;設(shè)置變量isword來輔助統(tǒng)計(jì)單詞數(shù);2、do{ 從鍵盤讀入一個(gè)字符c;

if(c==’\n’)line++; if(是單詞開頭)word++; if(c不是分隔符)ch++; }while(c!=EOF);3、輸出統(tǒng)計(jì)結(jié)果。將下面的程序在VC++平臺(tái)上運(yùn)行,試一試是否正確#include<iostream.h>voidmain(){charc;intline=0,word=0,ch=0;intisword=0;do{c=cin.get();if(ch==′\n′)line++;//遇換行符行數(shù)+1if(c!=′′&&c!=′\t′&&c!=′\n′){//讀到非間隔符

if(isword==0)word++;//在單詞的起始處給單詞數(shù)+1

ch++; //字符數(shù)加+1

isword=1;}elseisword=0; //讀到間隔符}while(c!=EOF);cout<<”行數(shù):”<<line<<endl;cout<<”單詞數(shù):”<<word<<endl;cout<<”字符數(shù):”<<char<<endl;}3.2.3for語(yǔ)句for循環(huán)語(yǔ)句的格式為:for(<表達(dá)式1>;<表達(dá)式2>;<表達(dá)式3>)<循環(huán)體語(yǔ)句>圖3.3for語(yǔ)句的執(zhí)行流程圖否是求表達(dá)式1的值求表達(dá)式2的值表達(dá)式2值為真?執(zhí)行循環(huán)體語(yǔ)句求表達(dá)式3的值okfor語(yǔ)句、while語(yǔ)句、do/while語(yǔ)句實(shí)現(xiàn)相同的功能:1+2+3+4inti=1,sum=0;

//循環(huán)初始條件while(i<=4)

{sum+=i;i++;

//修改循環(huán)條件

}inti=1,sum=0;//循環(huán)初始條件do{ sum+=i; i++;//修改循環(huán)條件

}while(i<=4);for(inti=1,sum=0;i<=4;i++){ sum+=i;}/*習(xí)慣上:表達(dá)式1:循環(huán)初始條件;表達(dá)式2:循環(huán)終止條件;表達(dá)式3:修改循環(huán)條件*/okfor語(yǔ)句的應(yīng)用for語(yǔ)句的幾點(diǎn)說明:1、是先判斷型的,同while語(yǔ)句;2、使用更為靈活:三個(gè)表達(dá)式可以是任意表達(dá)式,因此他們就可以實(shí)現(xiàn)循環(huán)初始化、計(jì)算、修改循環(huán)條件等任務(wù),而不一定非在循環(huán)體中進(jìn)行;

for語(yǔ)句的應(yīng)用【例3.11】設(shè)計(jì)程序輸出Fibonacii數(shù)列的前20項(xiàng),要求每行輸出5個(gè)數(shù)據(jù)。Fibonacii數(shù)列定義如下:算法分析:除了第0項(xiàng)和第1項(xiàng)外,每一項(xiàng)都是由類似方法產(chǎn)生,即前兩項(xiàng)之和;所以求當(dāng)前項(xiàng)時(shí),只需要記住前兩項(xiàng);程序不需要為每一項(xiàng)設(shè)置專用變量;屬遞推算法。算法:1、設(shè)置變量n表示第幾項(xiàng),變量f1和f2用來記住當(dāng)前項(xiàng)f3之前的兩項(xiàng);變量初始化n=0;2、while(當(dāng)前項(xiàng)不到第20項(xiàng))

{ if(當(dāng)前項(xiàng)是第0項(xiàng))f1=0; if(當(dāng)前項(xiàng)是第1項(xiàng))f2=1;if(當(dāng)前項(xiàng)是第2項(xiàng)或更高項(xiàng))f3=f1+f2;

按要求輸出f3;f1=f2;f2=f3;//記住最近兩項(xiàng) 當(dāng)前項(xiàng)后移一位;

}【例3.11】設(shè)計(jì)程序輸出Fibonacii數(shù)列的前20項(xiàng),要求每行輸出2個(gè)數(shù)據(jù)。Fibonacii數(shù)列定義如下:程序如下://文件名:Ex3_11.cpp#include<iostream.h>#include<iomanip.h>voidmain(){intfib0=0,fib1=1,fib2; cout<<setw(5)<<fib0<<setw(5)<<fib1<<endl; for(intn=3;n<=20;n++){ fib2=fib0+fib1; cout<<setw(5)<<fib2; if(n%5==0)cout<<endl;

//控制每行2個(gè)數(shù)據(jù)

fib0=fib1;fib1=fib2;}}for語(yǔ)句的應(yīng)用在VC++平臺(tái)上運(yùn)行運(yùn)行結(jié)果:0 1 1 2 3 5 8 13 21 3455 89 144 233377610 987 159725844181【例3.12】輸入一個(gè)不超過5位的整數(shù),將其反向后輸出。例如輸入247,變成742輸出。算法分析:1、將整數(shù)的各個(gè)數(shù)位逐個(gè)位分開,用一個(gè)數(shù)組保存各個(gè)位的值,然后反向組成新的整數(shù)。2、將整數(shù)各位數(shù)字分開的方法是,通過求余得到個(gè)位數(shù),然后將整數(shù)縮小十倍,再求余,并重復(fù)上述過程,分別得到十位、百位……,直到整數(shù)的值變成0為止。

for語(yǔ)句的應(yīng)用ok數(shù)據(jù):1、設(shè)置變量num表示輸入的整數(shù),整型數(shù)組digit[5]用來存放num的各個(gè)位;變量i用來表示數(shù)組的當(dāng)前下標(biāo);算法:1、輸入num;變量初始化:i=0;2、while(num!=0)

{ num對(duì)10取余,得num的當(dāng)前個(gè)位數(shù)digit[i];

num整除10,即去掉個(gè)位數(shù),十位變個(gè)位,百位變十位,……;

i++;數(shù)組digit準(zhǔn)備記錄下一位;}3、將數(shù)組元素按下標(biāo)從高到低的順序輸出;程序如下:#include<iostream.h>voidmain(){

intnum,subscript;

intdigit[5];

cout<<"輸入一個(gè)整數(shù):"<<endl;

cin>>num;

cout<<"原來整數(shù)為:"<<num<<endl; subscript=0; //數(shù)組下標(biāo)初值

do{digit[subscript]=num%10; num=num/10; subscript++; //修改下標(biāo)

}while(num>0);

for(inti=0;i<subscript;i++)//整數(shù)的反向組合

num=num*10+digit[i];

cout<<"反向后整數(shù)為:"<<num<<endl;}在VC++平臺(tái)上運(yùn)行,試一試是否正確3.2.4

循環(huán)的嵌套【例3.13】打印九九表。打印格式為:*123456789

112243369…991827364554637281當(dāng)循環(huán)語(yǔ)句中的循環(huán)體中又有循環(huán)語(yǔ)句時(shí),就構(gòu)成了嵌套循環(huán)。嵌套層次一般不超過3層,已保證可讀性。

循環(huán)的嵌套分析:1、計(jì)算機(jī)的輸出是按行進(jìn)行的,因此可以先用一個(gè)循環(huán)語(yǔ)句輸出第一行表頭。2、表中各行數(shù)據(jù)的輸出可以用下面的算法描述:for(i=1;i<10;i++){cout<<i; //輸出行號(hào)輸出第i行數(shù)據(jù); //A

cout<<endl;//準(zhǔn)備輸出下一行

}3、第A行需要進(jìn)一步細(xì)化。由于第i行數(shù)據(jù)是一組有規(guī)律的數(shù)列,每個(gè)數(shù)的值是其所在行與列的乘積,因此輸出第i行可以:

for(j=1;j<10;j++)cout<<setw(4)<<i*j;4、按上述算法輸出的每一行都將有九列,即打印出的是矩形表而不是下三角形表。進(jìn)一步分析發(fā)現(xiàn)每一行的列數(shù)與所在行數(shù)相關(guān),因此要輸出三角形表,上面的循環(huán)語(yǔ)句需稍作修改:

for(j=1;j<=i;j++)cout<<setw(4)<<i*j;將此語(yǔ)句放到頂層算法的A行即可。

循環(huán)的嵌套算法:1、輸出表頭,用一個(gè)循環(huán)語(yǔ)句即可;2、輸出表體:for(i=1;i<10;i++){cout<<i; //輸出行號(hào)輸出第i行數(shù)據(jù); //A

cout<<endl;//準(zhǔn)備輸出下一行

}3、A行細(xì)化:

for(j=1;j<=i;j++)cout<<setw(4)<<i*j;

循環(huán)的嵌套在VC++平臺(tái)上運(yùn)行下面的程序:#include<iostream.h>#include<iomanip.h>voidmain()cout<<setw(3)<<'*'<<setw(4)<<''; for(inti=1;i<10;i++) cout<<setw(4)<<i;//輸出表頭(乘數(shù)) cout<<endl<<endl; for(i=1;i<10;i++){ cout<<setw(3)<<i<<setw(4)<<'';

//輸出行號(hào)(被乘數(shù)) for(intj=1;j<=i;j++) cout<<setw(4)<<i*j; //輸出表中數(shù)據(jù)(乘積) cout<<endl;//準(zhǔn)備輸出下一行}}3.2.4

循環(huán)嵌套__打印九九表3.3

轉(zhuǎn)向語(yǔ)句3.3.1break語(yǔ)句

3.3.4return語(yǔ)句

3.3.3goto語(yǔ)句

3.3.2continue語(yǔ)句

3.3.1break語(yǔ)句

break語(yǔ)句只能用在switch語(yǔ)句和循環(huán)語(yǔ)句中,用來跳出switch語(yǔ)句或提前終止循環(huán),轉(zhuǎn)去執(zhí)行switch語(yǔ)句或循環(huán)語(yǔ)句之后的語(yǔ)句。在for循環(huán)中可以用break結(jié)束循環(huán):

for(;;){ … if(<表達(dá)式>)break; … }

break語(yǔ)句應(yīng)用【例3.14】給定正整數(shù)m,判定其是否為素?cái)?shù)。分析:如果m>2,m是素?cái)?shù)的條件是不能被2,3,…,(取整)整除。因此可以用2,3,…,(取整)逐個(gè)去除m,如果被其中某個(gè)數(shù)整除了,則m不是素?cái)?shù),否則是素?cái)?shù)。——算法屬于窮舉法。1、輸入被測(cè)數(shù)m(m>2);令整型變量k=sqrt(m)2、判斷m是否素?cái)?shù):設(shè)置輔助整型變量i,使i從2開始直到k依次測(cè)試m能否整除i,若能,則不是素?cái)?shù);for(i=2;i<=k;i++)if(m%i==0)break;

/*條件滿足,m不是素?cái)?shù),停止測(cè)試,結(jié)束for語(yǔ)句。*/3、根據(jù)i是否已達(dá)到k,輸出結(jié)果是否為素?cái)?shù)。#include<iostream.h>#include<math.h> voidmain(){

int

m,i,k;

cout<<"輸入整數(shù)m:"<<endl;

cin>>m;

if(m==2)cout<<m<<"是素?cái)?shù)"<<endl; else{ k=sqrt(m);

for(i=2;i<=k;i++)if(m%i==0)break; //只要有一個(gè)整除,就可停止

if(i>k)cout<<m<<"是素?cái)?shù)"<<endl; //循環(huán)提前終止表示是非素?cái)?shù)

elsecout<<m<<"不是素?cái)?shù)"<<endl; }}在VC++平臺(tái)上運(yùn)行,改一下,使程序自動(dòng)算出100以內(nèi)的素?cái)?shù)3.3.2continue語(yǔ)句

continue語(yǔ)句只能用在循環(huán)語(yǔ)句中,用來終止本次循環(huán)。當(dāng)程序執(zhí)行到continue語(yǔ)句時(shí),將跳過其后尚未執(zhí)行的循環(huán)體語(yǔ)句,開始下一次循環(huán)。下一次循環(huán)是否執(zhí)行仍然取決于循環(huán)條件的判斷。

continue語(yǔ)句與break語(yǔ)句的區(qū)別在于,continue語(yǔ)句結(jié)束的只是本次循環(huán),而break結(jié)束的是整個(gè)循環(huán)。

例:輸出1~100內(nèi)3的倍數(shù)。分析:設(shè)置整型變量I從1變化到100,依次測(cè)試I是否3的倍數(shù),算法屬于窮舉法。

for(I=1;I<=100;I++){if(I%3!=0)continue;

//I不是3的倍數(shù),不輸出,繼續(xù)下一個(gè)I;

輸出I的值;//I是3的倍數(shù)才輸出

}3.3.3goto語(yǔ)句

goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句一起使用,所謂標(biāo)號(hào)語(yǔ)句是用標(biāo)識(shí)符標(biāo)識(shí)的語(yǔ)句,它控制程序從goto語(yǔ)句所在的地方轉(zhuǎn)移到標(biāo)號(hào)語(yǔ)句處。goto語(yǔ)句會(huì)導(dǎo)致程序結(jié)構(gòu)混亂,可讀性降低,而且它所完成的功能完全可以用算法的三種基本結(jié)構(gòu)實(shí)現(xiàn),因此一般不提倡使用goto語(yǔ)句。但在某些特定場(chǎng)合下goto語(yǔ)句可能會(huì)顯出價(jià)值,比如在多層循環(huán)嵌套中,要從深層地方跳出所有循環(huán),如果用break語(yǔ)句,不僅要使用多次,而且可讀性較差,這時(shí)goto語(yǔ)句可以發(fā)揮作用。3.3.4return語(yǔ)句

return語(yǔ)句用于結(jié)束函數(shù)的執(zhí)行,返回調(diào)用者,如果是主函數(shù),則返回至操作系統(tǒng)。利用一個(gè)return語(yǔ)句可以將一個(gè)數(shù)據(jù)返回給調(diào)用者。通常,當(dāng)函數(shù)的返回類型為void時(shí),return語(yǔ)句可以省略,如果使用也僅作為函數(shù)或程序結(jié)束的標(biāo)志。3.4

常用算法的應(yīng)用實(shí)例【例3.15】用歐基里德算法(也稱輾轉(zhuǎn)法)求兩個(gè)整數(shù)的最大公約數(shù)。分析:假定兩個(gè)整數(shù)分別為num1和num2,最大公約數(shù)應(yīng)當(dāng)是不超過其中較小數(shù)的一個(gè)整數(shù)。輾轉(zhuǎn)法的思想是:用num1除以num2,求出余數(shù)resd,如果resd==0,則當(dāng)前num2就是最大公約數(shù),否則如果resd!=0,num1=num2,num2=resd,重復(fù)以上過程,直到resd==0為止?!纠?.15】【例3.16】【例3.17】【例3.18】1、設(shè)置兩個(gè)整型變量num1和num2代表兩個(gè)數(shù);輸入num1、num2;2、輾轉(zhuǎn)法:

2.1、使num1>num2;2.2.1、設(shè)置變量resd=num1%num2;

2.2.2、if(resd==0)當(dāng)前num2就是最大公 約數(shù);

Else{num1=num2,num2=resd;}

重復(fù)2.2.1和2.2.2,直到resd==0為止。

2.2、do{

resd=num1%num2;

if(resd==0)當(dāng)前num2就是最大公約數(shù);

else{num1=num2,num2=resd;} }while(resd!=0);3、輸出當(dāng)前的num2。程序如下:#include<iostream.h>voidmain(){

intnum1,num2;

cout<<"輸入兩個(gè)整數(shù):"<<endl; cin>>num1>>num2; cout<<num1<<"和"<<num2<<"的最大公約數(shù)為:"; for(;;){ intresd; resd=num1%num2; if(resd==0)break; num1=num2;num2=resd; } cout<<num2<<endl;}【例3.16】用篩選法求100之內(nèi)的所有素?cái)?shù),并將這些素?cái)?shù)輸出,每行輸出2個(gè)數(shù)據(jù)。分析算法一窮舉法:1、判斷一個(gè)數(shù)是否素?cái)?shù)?方法窮舉法;2、100之內(nèi)的所有素?cái)?shù)?方法:一個(gè)個(gè)試;綜上所述,得到一個(gè)循環(huán)嵌套的算法:

for(intm=2;m<=100;k++)//窮舉法

if(m是素?cái)?shù))按要求的格式輸出k;k=sqrt(m);for(i=2;i<=k;i++)//窮舉法

if(k%i==0)break;//k不是素?cái)?shù)if(i<=k)k不是素?cái)?shù);

//剛才的for是由break結(jié)束的分析算法二篩選法:1、一個(gè)數(shù)如果是其他數(shù)的倍數(shù),則這個(gè)數(shù)肯定不是素?cái)?shù);2、在由多個(gè)大于1的數(shù)組成的集合中,剔除所有的非素?cái)?shù),剩下的就都是素?cái)?shù)了;綜上所述,得到算法二(及所需的相應(yīng)數(shù)據(jù)):1、將100之內(nèi)的整數(shù)映射到一個(gè)集合??梢圆捎靡粋€(gè)數(shù)組a來表示,數(shù)組元素值為各個(gè)整數(shù);2、在數(shù)組a中,從素?cái)?shù)2開始剔除掉新找到的素?cái)?shù)的整數(shù)倍的元素值(置0,非素?cái)?shù));3、輸出數(shù)組a中數(shù)組元素值非0的元素,他們都是素?cái)?shù)。算法二第2步的細(xì)化(篩選法):for(i=0;i<=9;i++)//數(shù)組下標(biāo)0~9,元素值1~10{ 2.1、if(a[i]==0)continue;

//i已被定為非素?cái)?shù),已被篩掉

2.2、將數(shù)組中所有是a[i]倍數(shù)的元素置0;

for(intj=i+1;j<=99;j++)

if(a[j]%a[i]==0)a[j]=0; 2.3、判定a[i]是否素?cái)?shù);

if(a[i]不是素?cái)?shù))a[i]=0;//a[i]肯定是素?cái)?shù)

}

3.4常用算法的應(yīng)用實(shí)例#include<iostream.h>#include<iomanip.h>#include<math.h>constintn=100;voidmain(){int

a[n];int

i,j;for(i=0;i<n;i++)a[i]=1+i;//用數(shù)組保存整數(shù)1-100a[0]=0; //1不是素?cái)?shù),置0for(i=0;i<n;i++){

if(a[i]==0)continue;//該數(shù)已經(jīng)置0,判斷下一個(gè)

for(j=i+1;j<n;j++) if(a[j]%a[i]==0)a[j]=0;

//是a[i]倍數(shù)的元素置0;

}3.4

常用算法的應(yīng)用實(shí)例intcount=0;cout<<"1—"<<n<<"之間的素?cái)?shù):"<<endl;for(i=0;i<n;i++)//輸出所有素?cái)?shù)

if(a[i]!=0){

cout<<setw(6)<<a[i]; count++; if(count%10==0)cout<<endl;//每行10個(gè)

}

cout<<endl;}運(yùn)行結(jié)果:1—100之間的素?cái)?shù):23571113171923293137414347535961677173798389973.4

常用算法的應(yīng)用實(shí)例3.4

常用算法的應(yīng)用實(shí)例【例3.17】世界數(shù)學(xué)史上著名的“百雞問題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?分析:設(shè)雞翁、母、雛分別為i,j,k,根據(jù)題意可得:i*5+j*3+k/3*1=100;i+j+k=100;兩個(gè)方程無(wú)法解出三個(gè)變量,只能將各種可能的取值代入,其中能滿足兩個(gè)方程的就是所需的解,因此這是枚舉算法(也叫窮舉法)的應(yīng)用。

i、j、k可能的取值有哪些?分析可知,百錢最多可買雞翁20,雞母33,雞雛300。

算法:for(i=0;i<=20;i++) for(j=0;j<=33;j++) for(k=0;k<=300;k++) if((i+j+k==100)&&(5*i+3*j+k/3==100))

cout<<i<<j<<k;

這個(gè)算法使用三重循環(huán),執(zhí)行時(shí)間函數(shù)是立方階,循環(huán)體將執(zhí)行20*33*300=198000次。我們希望在算法上改進(jìn)一下,如能減少一重循環(huán),將大大縮短運(yùn)行時(shí)間。3.4常用算法的應(yīng)用實(shí)例實(shí)際上,當(dāng)i、j確定時(shí),k就可由題目要求確定為100-i-j,因此實(shí)際上只要用i、j去測(cè)試,用錢數(shù)檢測(cè)就可以了。循環(huán)體將執(zhí)行:20*33=660次。算法改進(jìn)為:for(i=0;i++<=20;)for(j=0;j++<=33;)if(5*i+3*j+(100-i-j)/3==100)

cout<<i<<j<<k;3.4

常用算法的應(yīng)用實(shí)例程序如下:#include<iostream.h>#include<iomanip.h>voidmain(){int

i,j,k;cout<<"公雞母雞小雞"<<endl;for(i=0;i<=20;i++)

for(j=0;j<=33;j++){

k=100-i-j; if((5*i+3*j+k/3==100)&&(k%3==0))

//注意(k%3==0)非常重要 ,想一想為什么

cout<<setw(6)<<i<<setw(10)<<j<<setw(10)<<k<<endl;

}}3.4常用算法的應(yīng)用實(shí)例程序運(yùn)行后將輸出:公雞 母雞 小雞

0 25 754 18 788 11 81124843.4常用算法的應(yīng)用實(shí)例3.4

常用算法的應(yīng)用實(shí)例【例3.18】輸入一個(gè)8位二進(jìn)制數(shù),將其轉(zhuǎn)換為十進(jìn)制數(shù)輸出。分析:二進(jìn)制轉(zhuǎn)換為十進(jìn)制只要將每位二進(jìn)制數(shù)乘以該位的權(quán)然后相加。實(shí)際上屬于多項(xiàng)式求和問題:

對(duì)于本例,x=2。多項(xiàng)式的系數(shù)ai即為二進(jìn)制數(shù)的各個(gè)位,可以用數(shù)組保存。如果直接求冪再求和,需要做(n*(n+1)/2)次乘法?,F(xiàn)將多項(xiàng)式作如下變形:就變成一個(gè)十分簡(jiǎn)單的計(jì)算,僅做了n次乘法。算法:1、數(shù)組bin[8]用來放各個(gè)二進(jìn)制位;2、整型變量dec=0

;x=2;//初始化2、for(i=7;i>=0;i--)//系數(shù)從an到a0依次投入運(yùn)算

dec=dec*x+(bin[i]-'0');

//(bin[i]-'0'):數(shù)字字符轉(zhuǎn)換為數(shù)字3.4常用算法的應(yīng)用實(shí)例程序如下:#include<iostream.h>constintn=8;voidmain(){charbin[n];

intx=2,a,dec,i;

cout<<"輸入二進(jìn)制序列:"<<endl;

for(i=n-1;i>=0;i--)cin>>bin[i];//先輸入的是高位

dec=0;

for(i=n-1;i>=0;i--){ a=bin[i]-'0'; //數(shù)字字符轉(zhuǎn)換為數(shù)字

dec=dec*x+a;}

cout<<"二進(jìn)制序列(";

for(i=n-1;i>=0;i--)cout<<bin[i];

cout<<")的值為:"<<dec<<endl;}3.5枚舉類型

3.5.1枚舉類型的定義

3.5.2枚舉變量的使用

枚舉類型(enumerate)是c++中的一種派生數(shù)據(jù)類型,它是用戶定義的若干枚舉常量的集合。枚舉類型的變量,只能取枚舉常量表中所列的值。定義枚舉類型的主要目的是增加程序的可讀性。3.5.1枚舉類型的定義

枚舉類型的定義格式為:enum<類型名>{<枚舉常量表>};關(guān)鍵字enum指明其后的標(biāo)識(shí)符是一個(gè)類型的名字,枚舉常量表中列出該類型的所有取值,各枚舉常量之間以“,”間隔。例:enmucolor_set1{RED,BLUE,WHITE,BLACK};enumweek{Sun,Mon,Tue,Wed,Thu,Fri,Sat};枚舉常量(或稱枚舉成員)是以標(biāo)識(shí)符形式表示的整型量,例如下面的定義是非法的:enum

letter_set{‘a(chǎn)’,‘d’,‘F’,’s’,‘T’}; //枚舉常量只能是標(biāo)識(shí)符enumyear_set{2000,2001,2002,2003,2004,2005};//改為y2000等則正確3.5.1枚舉類型的定義

各個(gè)枚舉常量代表該枚舉類型的變量可能取的值,編譯系統(tǒng)為每個(gè)枚舉常量指定一個(gè)整數(shù)值,缺省狀態(tài)下,這個(gè)整數(shù)就是所列舉元素的序號(hào),序號(hào)從0開始。如上例中RED、BLUE、WHITE、BLACK的值分別為0、1、2、3。用戶也可以在類型定義時(shí)為部分或全部枚舉常量指定整數(shù)值,在第一個(gè)指定值之前的枚舉常量仍按缺省方式取值,而指定值之后的枚舉常量按依次加1的原則取值。各枚舉常量的值可以重復(fù),但各枚舉常量標(biāo)識(shí)符必須不同。例如,enum

fruit_set{apple,orange,banana=1,peach,grape}enumweek{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};枚舉常量apple、orange、banana、peach、grape的值分別為0、1、1、2、3。枚舉常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分別為7、1、2、3、4、5、6。3.5.2枚舉類型的變量的使用

1、定義枚舉類型之后,就可以定義枚舉類型的變量;亦可類型與變量同時(shí)定義(甚至類型名可?。篶olor_set1color1,color2;enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat}weekday1,weekday2;2、枚舉變量的取值范圍就是整型數(shù)的一個(gè)子集。枚舉變量占用內(nèi)存的大小與整型數(shù)相同。3、枚舉變量允許的操作只有賦值和關(guān)系運(yùn)算;例如:

if(color3==color4)cout<<”相等”;

cout<<color3<WHITE; 4、枚舉變量不能直接輸入,可以直接輸出,但輸出的是變量的整數(shù)值。例如:

cin>>color1 //非法

cout<<color3 //合法,輸出的是2

從程序的合法性和可讀性出發(fā),枚舉變量的輸入輸出一般都采用switch語(yǔ)句將其轉(zhuǎn)換為字符或字符串。同時(shí),枚舉類型數(shù)據(jù)的其他處理也往往應(yīng)用switch語(yǔ)句。3.5.2枚舉類型的變量的使用

【例3.19】口袋中有紅、黃、藍(lán)、白、黑五種顏色的球若干個(gè),每次從口袋中取三個(gè)不同顏色的球,統(tǒng)計(jì)并輸出所有的取法。分析:每個(gè)球的顏色都是這五種顏色之一,因此可以使用枚舉類型來定義球的顏色。假設(shè)所取三個(gè)球的顏色分別為i,j,k,每個(gè)量都有5種取值,其中i≠j≠k就是滿足要求的取法,因此用枚舉算法(窮舉法)可以解決。3.5.2枚舉類型的變量的使用

算法:1、定義枚舉類型及相應(yīng)變量;

enumcolor{red,yellow,blue,white,black};colori,j,k,col;2、for(i=red;i<=black;i++)

for(j=red;j<=black;j++)

if(i!=j)//前兩個(gè)球顏色不同

for(k=red;k<=black;k++)

if(k!=i&&k!=j)//第三個(gè)球不同于前兩個(gè),滿足要求;找到一種取法3、輸出該取法:注意枚舉量的輸出方法。3.5.2枚舉類型的變量的使用

程序如下:#include<iostream.h>#include<iomanip.h>void

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論