第4章 控制結構程序設計=12級_第1頁
第4章 控制結構程序設計=12級_第2頁
第4章 控制結構程序設計=12級_第3頁
第4章 控制結構程序設計=12級_第4頁
第4章 控制結構程序設計=12級_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章控制結構程序設計學習目的:掌握3種控制結構的書寫規(guī)范和使用特點,學會綜合利用這些語句實現(xiàn)算法及掌握實現(xiàn)技巧。重點:掌握使用選擇結構和循環(huán)結構設計累加、累乘、統(tǒng)計等算法的基本方法。難點:理解嵌套的條件結構、嵌套的循環(huán)結構的流程過程,以及break語句和continue語句的作用及區(qū)別。順序結構程序結構選擇結構循環(huán)結構4.1順序結構程序設計

語句1、語句2:聲明語句、表達式語句、復合語句、輸出語句、輸入語句和空語句等。語句1語句2例4-1寫出程序的運行結果。#include<iostream.h> #include<math.h> voidmain() { floatx1,x2,y1,y2;

cin>>x1>>y1>>x2>>y2;

floatd;

d=sqrt(pow(x1-x2,2)+pow(y1-y2,2));

cout<<"d="<<d<<endl; } 運行結果:3456

d=2.82843求開方根求平方根函數(shù)體4.2選擇結構程序設計若程序按照給定的條件選擇執(zhí)行某些語句,這種程序的結構稱為選擇結構。例如,挑選兩個兔子中最大的一個;

高速公路上按公里數(shù)和車型收取費用。1.關系運算符和關系表達式

關系運算符:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。關系表達式格式:操作數(shù)1關系運算符操作數(shù)2如,表達式5>3的結果是1。表達式1<=0<6的結果是注意:字符型數(shù)據(jù)按ASCII值的大小進行比較。如,

表達式a<B的值是97660011例,某學校4位同學中的一位做了好事不留名。表揚信來了之后,校長問這4位是誰做的好事,這4位同學所說的話為:A說:不是我。B說:是C。C說:是D。D說:他胡說。請用關系表達式表示這4位同學說的話。設用變量man表示要尋找的做了好事的人,則可以利用關系表達式表達這4個人所說的話:man!=‘A’man==‘C’man==‘D’man!=‘D’2.邏輯運算符和邏輯表達式邏輯運算符:&&(邏輯與)、||(邏輯或)、!(邏輯非)。(1)邏輯與邏輯與表達式的格式:操作數(shù)1&&操作數(shù)2功能:若操作數(shù)1和操作數(shù)2都為1,則運算結果為1,否則運算結果為0。如,表達式3>=3&&2<4的結果為11111&&1例,寫出命題x[0,4]的C++表達式。數(shù)學表達式:0x4C++表達式:0<=x&&x<=4但C++表達式不能寫為:0<=x<=4表達式1&&表達式2“&&”的“短路特性”:先求解表達式1若表達式1的值為false(0),則最終結果為false(0),不再求解表達式2。若表達式1的結果為true(1),則要求解表達式2。如,設a=0,b=6,c=7,a++&&b++&&c++的值為表達式運算后,a=1,b=6,c=7。0a&&b++a=a+100&&c++0(2)邏輯或邏輯或運算表達式的格式:操作數(shù)1||操作數(shù)2功能:若操作數(shù)1和操作數(shù)2有一個為1,則運算結果為1,否則運算結果為0。如,表達式2>=3||3<4的結果為01110||1例,寫出命題x[0,4]的C++表達式。數(shù)學表達式:x<0或x>4C++表達式:x<0||x>4表達式1||表達式2“||”的“短路特性”:先求解表達式1若表達式1的值為true(1),則最終結果為true(1),不再求解表達式2若表達式1的結果為false(0),則求解表達式2,以表達式2的結果作為最終結果如,設a=0,b=6,c=7,a++||b++||c++的值為運算后,a=1,b=7,c=7。1a||ba=a+1b=b+11||c++06非零值的邏輯值為10||11(3)邏輯非邏輯非運算表達式的格式:!操作數(shù)功能:若操作數(shù)為0,則運算結果為1,否則運算結果為0。如:

表達式!a>b的結果為0098a的ASCII的值是非零值97,其邏輯值為1。例,某地刑偵大隊對涉及6個嫌疑人的一樁疑案進行以下分析,試將以下分析用邏輯表達式表示。(1)A,B至少有1人作案;(2)A,E,F(xiàn)3人中至少有2人參與作案;(3)A,D不可能是同案犯;(4)B,C或同時作案,或與本案無關;(5)C,D中有且僅有1人作案;(6)如果D沒有參與作案,則E也不可能參與作案。A||BA&&E,A&&F,E&&F!(A&&D)B&&C!B&&!C(C&&!D)||(!C&&D)D||(!D&&!E)(A&&E)||(A&&F)||(E&&F)(B&&C)||(!B&&!C)4.2.1if語句1.單分支if語句格式:

if(表達式)語句S;布爾值任何語句0語句s1表達式例4-3寫出程序的運行結果。#include<iostream.h>voidmain() { floatx,y,m;x=8;y=5; if(x>y)

{ m=x;

x=y;

y=m;

} cout<<"x="<<x<<",y="<<y<<endl;} 運行結果:x=5,y=8xym85858x>y為真if語句結構復合語句F9在當前光標所在的行下斷點,如果當前行已經有斷點,則取消斷點;F5調試狀態(tài)運行程序,程序執(zhí)行到有斷點的地方會停下來。F10單步執(zhí)行程序。CTRL+F10運行到光標所在行。Shift+F5:停止調試。

調試程序的方法:(1)在工程文件夾中建立程序文件;(2)在程序的結尾處按F9,設計斷點;(3)按F10,在調試窗口中輸入要觀測值的變量;(4)連續(xù)按F10,觀察程序運行過程和變量的值;(5)當程序運行到斷點處時,按Shift+F5結束調試。例4-4求兩個數(shù)中的最大數(shù)。分析:設輸入的兩個數(shù)分別存儲在變量x、y中,用max存放最大數(shù)。數(shù)學模型:兩個數(shù)可以分別是兩個人的高度。01max<y輸入x,ymax=ymax=x輸出max程序:#include<iostream.h>voidmain(){floatx,y,max;cin>>x>>y;max=x;

if(max<y)max=y;cout<<"最大值是"<<max<<endl;}01max<y輸入x,ymax=ymax=x輸出max2.雙分支if語句格式:if(表達式)語句1;else語句2;語句20語句11表達式布爾值任何語句例4-5當x=3,-4時,分別寫出程序的運行結果。#include<iostream.h>voidmain() { floatx,y; cin>>x; if(x<0)

y=-x; else y=x;

cout<<"x="<<x<<"y="<<y<<endl;} 3x=3y=3-4x=-4y=4xyx<0為假33

-44x<0為真例4-6輸入三角形的三條邊,求三角形的面積。求三角形面積的公式:abc算法:(1)輸入a,b,c的值。(2)若a+b>c且a+c>b且b+c>a

則t=(a+b+c)/2,s=[t(t-a)(t-b)(t-c)]1/2,輸出s的值,否則輸出信息:a,b,c的值不能構成三角形。if(a+b>c&&a+c>b&&b+c>a)

{t=(a+b+c)/2;

s=sqrt(t*(t-a)*(t-b)*(t-c)); cout<<"三角形的面積"

<<s<<endl;} else

cout<<a<<','<<b<<','<<c<<"的值不能構成三角形"<<endl;

作為一個復合語句完成#include<iostream.h>#include"math.h"voidmain(){ doubles,a,b,c,t;

cout<<"輸入三角形的三條邊:"<<endl;

cin>>a>>b>>c;

if(a+b>c&&a+c>b&&b+c>a)

{t=(a+b+c)/2;

s=sqrt(t*(t-a)*(t-b)*(t-c));

cout<<"三角形的面積"

<<s<<endl;

} else

cout<<a<<','<<b<<','<<c<<"的值不能構成三角形"<<endl;

}3.多分支if語句如果if或else后面的語句本身又是一個if語句,則稱這種形式為多分支if結構。例如以下格式:if(表達式1)if(表達式2)語句1;else語句2;elseif(表達式3)語句3;else語句4;注意:語句1、2、3、4可以是復合語句,每層的if與else配對,或用{}來確定層次關系。例4-7寫出程序的運行結果。#include<iostream.h>voidmain() {floata=3,b=5; if(a!=b)

if(a==b)

{a+=3; cout<<a<<endl; }

else{b-=2; cout<<b<<endl; }

cout<<a+b<<endl; } 運行結果:36條件a!=b為真條件a==b為假b=3例4-8程序結束輸入score90>score8080>score7070>score60score90輸出“優(yōu)”是輸出“良”是輸出“中”是輸出“及格”是輸出“不及格”否否否否cin>>score;if(score>=90)cout<<"優(yōu)";else……if(score>=80)cout<<"良";else……if(score>=70) cout<<"中"; else……if(score>=60)cout<<"及格"; elsecout<<"不及格";#include<iostream.h>voidmain(){floatscore;cin>>score;if(score>=90)cout<<"優(yōu)"; elseif(score>=80)cout<<"良";

else

if(score>=70)

cout<<"中";

else

if(score>=60)

cout<<"及格";

elsecout<<"不及格";}77.5中#include<iostream.h>voidmain(){floatscore;cin>>score;if(score>=90)cout<<"優(yōu)"; elseif(score>=80)cout<<"良";

else

if(score>=70) cout<<"中";

else

if(score>=60)cout<<"及格";

elsecout<<"不及格";cout<<endl;}4.2.2switch語句整數(shù)表達式為非實數(shù)的值switch語句格式:switch(表達式){case常量表達式1:語句序列1;[break;]case常量表達式2:語句序列2;[break;]┆case常量表達式n:語句序列n;[break;]default:語句序列n+1;}每個常量的值不能相同,次序不影響執(zhí)行結果。執(zhí)行過程:找到與表達式值相同的常量表達式的值為入口(若找不到以default為入口

)標號,由此開始順序執(zhí)行,直到遇到break語句或“}”。break語句格式:break;功能:跳出包含該break語句的最內層的switch語句,而執(zhí)行該switch語句的后繼語句,即終止該switch語句的執(zhí)行。語句序列可以是多個語句,但不必用{}。break語句不一定存在。可以是整型、字符型、枚舉型例4-9寫出程序的運行結果。#include<iostream.h>voidmain() { chara='3'; switch(a)

{

case'3':cout<<'3'; case'2':cout<<'2';break; default:cout<<'1';

}

} 運行結果:32說明:(4)常量表達式的值必須是常量,該常量的類型必須與表達式的值類型相同。如,例4-9中case3不能改寫為case3。(5)case中常量表達式的值類型與swith后面括號內的“表達式”的值類型要相同。如,例4-9中的swith語句不能改為以下程序段switch(a) { case"3":cout<<"3";case"2":cout<<"2";break;default:cout<<"1";}

原因:a是字符變量,"

2","

3"都是字符串。程序結束例4-10輸入score輸出“優(yōu)”9,10輸出“良”8輸出“中”7cin>>score;case10:case9:cout<<"優(yōu)";

break;case8:cout<<"良";

break;default:cout<<"不及格";score/10輸出“及格”6輸出“不及格”<6switch((int)score/10)例4-10#include<iostream.h>voidmain(){ floatscore; cin>>score; switch((int)score/10){ case10:case9:cout<<"優(yōu)"; break; case8:cout<<"良";break; case7:cout<<"中";break; case6:cout<<"及格";break;

default:cout<<"不及格";

}

cout<<endl;}輸入:80.8輸出:良輸入:100輸出:優(yōu)輸入:49輸出:不及格4.3循環(huán)結構程序設計若程序按照給定的條件重復執(zhí)行多條語句的,這種程序的結構稱為循環(huán)結構。

例如:購物付款時,付款的總額是各種物品單價的和;(統(tǒng)計數(shù)據(jù))

蟲蟲什么時候才吃完蘋果。例4-11計算。其中x=1,2,…,10。#include<iostream.h>#include<math.h> voidmain()

{ doublex,y,z; x=1;y=exp(x);z=log(x);cout<<x=<<x<<,y=<<y<<,z=<<z<<endl

;x=x+1;y=exp(x);z=log(x);cout<<x=<<x<<,y=<<y<<,z=<<z<<endl

;

...…x=x+1;y=exp(x);z=log(x);cout<<x=<<x<<,y=<<y<<,z=<<z<<endl

; }如何有效地完成重復工作4.3.1while語句格式:while(表達式)循環(huán)體;

循環(huán)體1假0表達式布爾值必須含有改變條件表達式值的語句。執(zhí)行順序:先判斷表達式的值,若為true(1)時,執(zhí)行循環(huán)體。例4-12寫出程序運行的結果。#include<iostream.h> voidmain() {ints=0,i=1; while(i<6) { s=s+i; i=i+1; } cout<<"s="<<s<<endl; } 運行的結果:s=15i i<6的值循環(huán)次數(shù)s01121345601111510631第1次第2次第3次第4次第5次循環(huán)結構例4-13求1~99的奇數(shù)和。即:s=1+3+5+7+…+99數(shù)學模型:其中:即i=1,3,…,99。初始時,令s=0,i=1,循環(huán)體:s=s+i,i=i+2。循環(huán)條件:i99sss1s2s3令s0=0例4-13求1~99的奇數(shù)和。初始時,令s=0,i=1,循環(huán)體:s=s+i,i=i+2。循環(huán)條件:i991假0i≤99s=s+ii=i+2輸出si=1,s=0#include<iostream.h>voidmain(){inti(1),s(0);

while(i<=99){s=s+i;i=i+2;}cout<<s<<endl;}循環(huán)結構改變循環(huán)變量i的值對i進行累加,和存放在s中.1假0i≤99s=s+ii=i+2輸出si=1,s=0例4-14輸入一串字符,以‘?’結束,輸出其中字母個數(shù)與數(shù)字個數(shù)。設讀入的字符保存在字符變量ch中,字母字符ch=數(shù)字字符其他字符初始值:令num1=0,num2=0,讀入一個字符賦給ch,循環(huán)體:統(tǒng)計字母與數(shù)字個數(shù)讀入下一個字符賦給ch。循環(huán)條件:ch‘?’統(tǒng)計字母字符個數(shù)num1統(tǒng)計數(shù)字字符個數(shù)num2如,輸入a5$B?如果ch是字母,則num1=num1+1,如果ch是數(shù)字,則num2=num2+1,初始值:令num1=0,num2=0,讀入一個字符賦給ch,循環(huán)體:統(tǒng)計字母與數(shù)字個數(shù);讀入下一個字符賦給ch。循環(huán)條件ch‘?’成立。1假0ch’?’①統(tǒng)計num1,num2②讀入ch輸出num1,num2num1=num2=0,讀入ch1若ch是字母num1=num1+1若ch是數(shù)字num2=num2+1100如果ch是字母,則num1=num1+1,如果ch是數(shù)字,則num2=num2+1,①②1假0ch’?’①統(tǒng)計num1,num2②讀入ch輸出num1,num2num1=num2=0,讀入chwhile(ch!='?'){統(tǒng)計num1,num2ch=getchar();}循環(huán)結構從鍵盤中讀入一個字符賦給字符變量ch1若ch是字母num1=num1+1若ch是數(shù)字num2=num2+1100①②if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')num1++;if(ch>='0'&&ch<='9')num2++;#include<iostream.h>#include<stdio.h>voidmain(){ charch;intnum1=0,num2=0;

ch=getchar();while(ch!='?'){

if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')num1++;if(ch>='0'&&ch<='9')num2++;

ch=getchar();

}cout<<"字母個數(shù):"<<num1<<endl;cout<<"數(shù)字個數(shù):"<<num2<<endl;}輸入輸出庫存函數(shù)的頭文件ch為循環(huán)變量例,猴子第一天摘下若干個桃子,當即吃了一半,還不過隱,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少個。設xn表示第n天的桃子數(shù)。x10=1x9=(x10+1)*2x8=(x9+1)*2x7=(x8+1)*2x6=(x7+1)*2x5=(x6+1)*2x4=(x5+1)*2x3=(x4+1)*2x2=(x3+1)*2x1=(x2+1)*2Xn-1=(xn+1)*2n=10,9,8,…,2初值x10=1設n代表天數(shù),桃子個數(shù)為x。初始時,n=10,x=1循環(huán)條件:n>1循環(huán)體:x=(x+1)*2,n=n-1n為循環(huán)變量設n代表天數(shù),桃子個數(shù)為x。初始時,n=10,x=1循環(huán)條件:n>1循環(huán)體:x=(x+1)*2,n=n-1程序段:

intn=10,x=1;while(n>1){x=(x+1)*2;n=n-1;}cout<<x<<endl;4.3.2do-while語句格式:do循環(huán)體while(表達式);執(zhí)行順序先執(zhí)行循環(huán)體語句,后判斷條件。

表達式為true(1)時,繼續(xù)執(zhí)行循環(huán)體

表達式01循環(huán)體必須含有改變條件表達式值的語句。例4-15寫出程序運行的結果。#include<iostream.h>voidmain(){ints=0,i=1;do{s=s+i;i=i+1;}while(i<6);cout<<"s="<<s<<endl;}運行的結果:s=15i i<6的值循環(huán)次數(shù)s0121345601111510631第1次第2次第3次第4次第5次循環(huán)結構i為循環(huán)變量例4-16用輾轉相除法求兩自然數(shù)的最大公約數(shù)。數(shù)學模型:

rbabarb若r0,重復做r=amodb,a=b,b=r。初值:讀入a,b的值.循環(huán)體:r=amodb,a=b,b=r循環(huán)條件:

r0初值:讀入a,b的值.循環(huán)體:r=amodb,a=b,b=r循環(huán)條件:r0算法:(1)輸入a,b的值。(2)若a<b,則交換a與b的值。(3)r=amodb(4)a=b(5)b=r(6)若r0轉(3),否則轉(7)。(7)輸出a的值。1假a<b0交換a,b的值r=amodb,a=b,b=r輸出a讀入a,br001循環(huán)結構#include<iostream.h>voidmain() {inta,b,r;cout<<"請輸入a,b的值"<<endl;cin>>a>>b;if(a<b){intt;t=a;a=b;b=t;}

do{ r=a%b;a=b;b=r;}while(r!=0);cout<<"最大公約數(shù)為:";cout<<a<<endl;

}1假a<b0交換a,b的值r=amodb,a=b,b=r輸出a讀入a,br001r為循環(huán)變量例4-17計算直到最后一項的絕對值小于10-7時停止計算。建立數(shù)學模型:

sts初值:s=x,t=x,n=2循環(huán)體:s=s+tn=n+1循環(huán)條件:|t|10-7直到|tn|<10-7。算法:(1)輸入x(2)設s=x,t=x,n=2(3)(4)(5)n=n+1(6)如果成立,轉(3),否則轉(7)。(7)輸出結果。初值:s=x,t=x,n=2循環(huán)體:s=s+tn=n+1循環(huán)條件:|t|10-7算法:(1)輸入x(2)設s=x,t=x,n=2(3)(4)(5)n=n+1(6)如果成立,轉(3),否則轉(7)。(7)輸出結果。do{t=-t*x*x/(2*n-1)/(2*n-2);s=s+t; n=n+1;}while(fabs(t)>=1e-7);t為循環(huán)變量#include<iostream.h>#include<math.h>voidmain(){floats,t,x;intn;cin>>x;s=x,t=x,n=2;do{t=-t*x*x/(2*n-1)/(2*n-2);s=s+t; n=n+1;}while(fabs(t)>=1e-7);cout<<s<<endl;}4.3.3for語句格式:for(表達式1;表達式2;表達式3)循環(huán)體

1假0表達式2表達式1循環(huán)體表達式3先計算必須能改變表達式2的值。執(zhí)行過程:當表達式2為true時,執(zhí)行循環(huán)體??梢允菑秃险Z句。循環(huán)條件例4-18寫出程序運行的結果。#include<iostream.h>voidmain(){inti,s(0);for(i=1;i<6;i++) s=s+i;cout<<"s="<<s<<endl;}運行的結果:s=15i i<6的值循環(huán)次數(shù)s01121345601111510631第1次第2次第3次第4次第5次循環(huán)結構i為循環(huán)變量例4-19計算。其中x=1,2,…,10。算法:(1)x=1(2)如果x10,則轉(3),否則程序結束。(3)輸出ex的值。(4)輸出lnx的值。(5)x=x+1(6)轉(2){ cout<<x<<'\t'<<exp(x)<<'\t';cout<<log(x)<<endl;}循環(huán)體for(x=1;x<=10;x++)x為循環(huán)變量#include<iostream.h>#include<math.h>voidmain(){intx;cout<<"x\t"<<"exp(x)\t"<<"ln(x)"<<endl;for(x=1;x<=10;x++){ cout<<x<<'\t'<<exp(x)<<'\t'; cout<<log(x)<<endl;}}1假0x<=10x=1輸出x++例4-20求斐波那契數(shù)列(Fibonacci)前10個數(shù)(不包括第10個數(shù))。112358131,1,2,3,5,8,13,21,34,56從第3個數(shù)起,第i個數(shù)是前兩個數(shù)的和。數(shù)學模型:

如果用整型變量i表示斐波那契數(shù)的個數(shù),則i=1,2,…,9。初始時:f1=1,f2=1,并輸出f1和f2,i=3。循環(huán)體:f=f1+f2,輸出f,f1=f2,f2=f。循環(huán)條件:i<10。ff2f1i為循環(huán)變量for(i=3;i<10;i++)

{

f=f1+f2; cout<<f<<''; f1=f2;f2=f;

}#include<iostream.h>voidmain(){inti,f1,f2,f;

f1=1;f2=1;cout<<f1<<''<<f2<<''

;for(i=3;i<10;i++)

{

f=f1+f2; cout<<f<<''; f1=f2;f2=f;

}}

說明:(1)for中的3個表達式都可以省略,但分號不能省。如,計算1+3+…+99的值。①i=1;s=0;for(;i<100;i=i+2)s=s+i;對循環(huán)變量i賦初值的表達式放在for語句之前。②s=0;for(i=1;i<100;){s=s+i;i=i+2;}對改變循環(huán)變量i值的表達式放在for語句的循環(huán)體中。③s=0;for(i=1;;i=i+2){if(i>=100)break;s=s+i;}

for語句中的表達式2省略時,循環(huán)體一定要通過if語句和break語句實現(xiàn)退出循環(huán)的情況。④i=1;s=0;for(;i<100;){s=s+i;i=i+2;}

(2)表達式1和表達式3可以是逗號表達式。如,for(i=1,s=0;i<100;s=s+i,i=i+2);(3)對循環(huán)體中的語句可以放在for語句的表達式3中。例,某學校4位同學中的一位做了好事不留名。表揚信來了之后,校長問這4位是誰做的好事。A說:不是我。B說:是C。C說:是D。D說:他胡說。已知3個人說的是真話,一個人說的是假話?,F(xiàn)在要根據(jù)這些信息,找出做了好事的人。設用變量man表示要尋找的做了好事的人,利用關系表達式將4個人所說的話表示成表達式,則有man!=‘A’,man==‘C’,man==‘D’,man!=‘D’由題目可知,這三個條件的和sum為3。man的值:’A’,’B’,’C’,’D’初值:man=‘A’循環(huán)體:求sum的值,若sum=3,則輸出man的值。循環(huán)條件:man<‘E’改變man值的表達式:man=man+1for(man='A';man<'E';man++){sum=(man!='A')+(man=='C')+(man=='D')+(man!='D'); if(sum==3)cout<<man<<endl;}man為循環(huán)變量#include"iostream.h"voidmain(){charman;intsum;for(man='A';man<'E';man++){sum=(man!='A')+(man=='C')+(man=='D')+(man!='D'); if(sum==3)cout<<man<<endl;}}課堂練習第70頁3.#include<iostream.h>voidmain(){ intk,x=10; for(k=9;k>=0;k--) { switch(k){case1:case4:case7:x++;break;

case2:case5:case8:break;case3:case6:case9:x+=2;}}cout<<x<<endl;}4.3.4循環(huán)語句小結①while語句和for語句都是先判斷后循環(huán),do-while語句是先循環(huán)后判斷;②do-while語句中的循環(huán)體至少執(zhí)行一次,while語句和for語句中的循環(huán)體可能一次也沒有執(zhí)行;③for語句有三個表達式,可以分別用于循環(huán)變量初始化、循環(huán)結束條件和循環(huán)變量的更新,格式清晰、使用靈活,因此用得比較多,其次是while語句,而do-while語句比較少用。①#include<iostream.h>voidmain(){ints=0,i=6;do{s=s+i;i=i+1;}while(i<6);cout<<"i="<<i<<endl;}運行的結果:i=7②#include<iostream.h>voidmain(){ints=0,i=6;while(i<6){s=s+i;i=i+1;}cout<<"s="<<s<<endl;}運行的結果:s=0③#include<iostream.h>voidmain(){ints=0;for(inti=6;i<6;i++)s=s+i;cout<<"s="<<s<<endl;}運行的結果:s=04.4多重循環(huán)程序設計在循環(huán)語句中的循環(huán)體又嵌套另一個循環(huán)語句時,這種循環(huán)語句稱為多重循環(huán)。多重循環(huán)的嵌套次數(shù)是任意的。按照嵌套層次數(shù),分別叫二重循環(huán)、三重循環(huán)等。處于內部的循環(huán)語句叫做內循環(huán).處于外部的循環(huán)語句叫做外循環(huán)。例4-21寫出下列程序的運行結果。#include<iostream.h>voidmain(){intk,p; for(k=1;k<3;k++){ cout<<"k="<<k<<endl;

for(p=7;p<=9;p++) cout<<p;

cout<<endl; } }運行結果:外循環(huán)內循環(huán)k=1789k=2789k為外循環(huán)的循環(huán)變量p為內循環(huán)的循環(huán)變量例4-22用二重循環(huán)輸出下列圖形。***************#include<iostream.h>voidmain(){cout<<"*"<<endl;cout<<"**"<<endl;cout<<"***"<<endl;cout<<"****"<<endl;cout<<"******"<<endl;}用i表示行數(shù),1i5,每行有i個“*”。初值:i=1循環(huán)條件:i5循環(huán)體:(1)輸出第i行的i個“*”;(2)換行。for(i=1;i<=5;i++){輸出第i行的i個“*”;

cout<<endl;}***************i是循環(huán)變量輸出第i行的i個“*”:用j表示第j個“*”,則1ji。初值:j=1循環(huán)條件:ji循環(huán)體:輸出第j個”*”for(i=1;i<=5;i++){

輸出第i行的i個“*”;cout<<endl;}***************for(j=1;j<=i;j++)cout<<’*’;j是內循環(huán)的循環(huán)變量#include<iostream.h>voidmain(){inti,j;

for(i=1;i<=5;i++){for(j=1;j<=i;j++)cout<<’*’;cout<<endl;}}***************例4-23,計算1!+2!+…+n!計算sn=1!+2!+…+n!的數(shù)學模型:

ss初值:s=0,k=1循環(huán)體:計算k!的值t,s=s+t,對t進行累加k=k+1循環(huán)條件:k≤n1假0k<=ns=0,k=1計算k!的值t,s=s+tk=k+1計算k!的值:k!=1*2*3*…*(k-1)*kt=t*i,其中,i=1,2,…,k初值:t=1,i=1循環(huán)體:t=t*i,對i進行累乘i=i+1循環(huán)條件:i≤ki是循環(huán)變量1假0i<=kt=1,i=1t=t*ii=i+11假0k<=ns=0,k=1②s=s+tk=k+1①計算k!的值t1假0i<=kt=1,i=1t=t*ii=i+1①②k是循環(huán)變量for(k=1;k<=n;k++){

計算k!的值s=s+t;}t=1;i=1;while(i<=k){t=t*i;i++;}#include<iostream.h>voidmain(){ints,n,i,k,t;cin>>n;s=0;

for(k=1;k<=n;k++){

計算k!的值s=s+t;}cout<<s;}t=1;i=1;while(i<=k){t=t*i;i++;}#include<iostream.h>voidmain(){ints,n,i,k,t;cin>>n;s=0;for(k=1;k<=n;k++){t=1;i=1;

while(i<=k){t=t*i;i++;}s=s+t;}cout<<s;}外循環(huán)內循環(huán)k是外循環(huán)循環(huán)變量i是內循環(huán)循環(huán)變量例,某地刑偵大隊對涉及6個嫌疑人的一樁疑案進行以下分析,試將作案人找出來。(1)A,B至少有1人作案;(2)A,E,F(xiàn)3人中至少有2人參與作案;(3)A,D不可能是同案犯;(4)B,C或同時作案,或與本案無關;(5)C,D中有且僅有1人作案;(6)如果D沒有參與作案,則E也不可能參與作案。A||B(A&&E)||(A&&F)||(E&&F)!(A&&D)(B&&C)||(!B&&!C)(C&&!D)||(!C&&D)D||(!D&&!E)由題目可知,這6個表達式的和sum為6時,此時A、B、C、D、E、F的值為1時就是作案人。A,B,C,D,E,F的值:0,1循環(huán)體:求這6個表達式的和sum,若sum=6,則輸出A,B,C,D,E,F是否是罪犯。#include"iostream.h"voidmain(){intA,B,C,D,E,F,c1,c2,c3,c4,c5,c6;for(A=0;A<=1;A++)for(B=0;B<=1;B++)for(C=0;C<=1;C++)for(D=0;D<=1;D++)for(E=0;E<=1;E++)for(F=0;F<=1;F++)

{c1=A||B; c2=!(A&&D);c3=(A&&E)||(A&&F)||(E&&F);c4=(B&&C)||(!B&&!C);c5=(C&&!D)||(D&&!C);c6=D||(!D&&!E);

if(c1+c2+c3+c4+c5+c6==6){ cout<<"A:"<<(A==0?"不是":"是")<<"罪犯"<<endl; cout<<"B:"<<(B==0?"不是":"是")<<"罪犯"<<endl; cout<<"C:"<<(C==0?"不是":"是")<<"罪犯"<<endl; cout<<"D:"<<(D==0?"不是":"是")<<"罪犯"<<endl; cout<<"E:"<<(E==0?"不是":"是")<<"罪犯"<<endl; cout<<"F:"<<(F==0?"不是":"是")<<"罪犯"<<endl;}}}窮舉法4.5常用轉移語句4.5.1break語句格式:break;語句序列1表達式1真假break語句序列2表達式2假真后繼語句循環(huán)體語句序列1if(表達式2)break;語句序列2功能:終止循環(huán)。該語句出現(xiàn)在循環(huán)體時的形式如下例:該例的功能圖例4-24寫出程序的運行結果。#include<iostream.h> voidmain() { for(intm=20;m>16;m--) { if(m%6==0)break; cout<<m<<""; } } 運行結果:m2019201918循環(huán)3次,但只輸出2個結果。4.5.2continue語句格式:continue;循環(huán)體while(表達式1){語句序列1if(表達式2)cont

溫馨提示

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

評論

0/150

提交評論