




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章控制結(jié)構(gòu)程序設(shè)計(jì)學(xué)習(xí)目的:掌握3種控制結(jié)構(gòu)的書寫規(guī)范和使用特點(diǎn),學(xué)會(huì)綜合利用這些語句實(shí)現(xiàn)算法及掌握實(shí)現(xiàn)技巧。重點(diǎn):掌握使用選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)設(shè)計(jì)累加、累乘、統(tǒng)計(jì)等算法的基本方法。難點(diǎn):理解嵌套的條件結(jié)構(gòu)、嵌套的循環(huán)結(jié)構(gòu)的流程過程,以及break語句和continue語句的作用及區(qū)別。順序結(jié)構(gòu)程序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)4.1順序結(jié)構(gòu)程序設(shè)計(jì)
語句1、語句2:聲明語句、表達(dá)式語句、復(fù)合語句、輸出語句、輸入語句和空語句等。語句1語句2例4-1寫出程序的運(yùn)行結(jié)果。#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; } 運(yùn)行結(jié)果:3456
d=2.82843求開方根求平方根函數(shù)體4.2選擇結(jié)構(gòu)程序設(shè)計(jì)若程序按照給定的條件選擇執(zhí)行某些語句,這種程序的結(jié)構(gòu)稱為選擇結(jié)構(gòu)。例如,挑選兩個(gè)兔子中最大的一個(gè);
高速公路上按公里數(shù)和車型收取費(fèi)用。1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式
關(guān)系運(yùn)算符:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。關(guān)系表達(dá)式格式:操作數(shù)1關(guān)系運(yùn)算符操作數(shù)2如,表達(dá)式5>3的結(jié)果是1。表達(dá)式1<=0<6的結(jié)果是注意:字符型數(shù)據(jù)按ASCII值的大小進(jìn)行比較。如,
表達(dá)式a<B的值是97660011例,某學(xué)校4位同學(xué)中的一位做了好事不留名。表揚(yáng)信來了之后,校長(zhǎng)問這4位是誰做的好事,這4位同學(xué)所說的話為:A說:不是我。B說:是C。C說:是D。D說:他胡說。請(qǐng)用關(guān)系表達(dá)式表示這4位同學(xué)說的話。設(shè)用變量man表示要尋找的做了好事的人,則可以利用關(guān)系表達(dá)式表達(dá)這4個(gè)人所說的話:man!=‘A’man==‘C’man==‘D’man!=‘D’2.邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符:&&(邏輯與)、||(邏輯或)、!(邏輯非)。(1)邏輯與邏輯與表達(dá)式的格式:操作數(shù)1&&操作數(shù)2功能:若操作數(shù)1和操作數(shù)2都為1,則運(yùn)算結(jié)果為1,否則運(yùn)算結(jié)果為0。如,表達(dá)式3>=3&&2<4的結(jié)果為11111&&1例,寫出命題x[0,4]的C++表達(dá)式。數(shù)學(xué)表達(dá)式:0x4C++表達(dá)式:0<=x&&x<=4但C++表達(dá)式不能寫為:0<=x<=4表達(dá)式1&&表達(dá)式2“&&”的“短路特性”:先求解表達(dá)式1若表達(dá)式1的值為false(0),則最終結(jié)果為false(0),不再求解表達(dá)式2。若表達(dá)式1的結(jié)果為true(1),則要求解表達(dá)式2。如,設(shè)a=0,b=6,c=7,a++&&b++&&c++的值為表達(dá)式運(yùn)算后,a=1,b=6,c=7。0a&&b++a=a+100&&c++0(2)邏輯或邏輯或運(yùn)算表達(dá)式的格式:操作數(shù)1||操作數(shù)2功能:若操作數(shù)1和操作數(shù)2有一個(gè)為1,則運(yùn)算結(jié)果為1,否則運(yùn)算結(jié)果為0。如,表達(dá)式2>=3||3<4的結(jié)果為01110||1例,寫出命題x[0,4]的C++表達(dá)式。數(shù)學(xué)表達(dá)式:x<0或x>4C++表達(dá)式:x<0||x>4表達(dá)式1||表達(dá)式2“||”的“短路特性”:先求解表達(dá)式1若表達(dá)式1的值為true(1),則最終結(jié)果為true(1),不再求解表達(dá)式2若表達(dá)式1的結(jié)果為false(0),則求解表達(dá)式2,以表達(dá)式2的結(jié)果作為最終結(jié)果如,設(shè)a=0,b=6,c=7,a++||b++||c++的值為運(yùn)算后,a=1,b=7,c=7。1a||ba=a+1b=b+11||c++06非零值的邏輯值為10||11(3)邏輯非邏輯非運(yùn)算表達(dá)式的格式:!操作數(shù)功能:若操作數(shù)為0,則運(yùn)算結(jié)果為1,否則運(yùn)算結(jié)果為0。如:
表達(dá)式!a>b的結(jié)果為0098a的ASCII的值是非零值97,其邏輯值為1。例,某地刑偵大隊(duì)對(duì)涉及6個(gè)嫌疑人的一樁疑案進(jìn)行以下分析,試將以下分析用邏輯表達(dá)式表示。(1)A,B至少有1人作案;(2)A,E,F(xiàn)3人中至少有2人參與作案;(3)A,D不可能是同案犯;(4)B,C或同時(shí)作案,或與本案無關(guān);(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(表達(dá)式)語句S;布爾值任何語句0語句s1表達(dá)式例4-3寫出程序的運(yùn)行結(jié)果。#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;} 運(yùn)行結(jié)果:x=5,y=8xym85858x>y為真if語句結(jié)構(gòu)復(fù)合語句F9在當(dāng)前光標(biāo)所在的行下斷點(diǎn),如果當(dāng)前行已經(jīng)有斷點(diǎn),則取消斷點(diǎn);F5調(diào)試狀態(tài)運(yùn)行程序,程序執(zhí)行到有斷點(diǎn)的地方會(huì)停下來。F10單步執(zhí)行程序。CTRL+F10運(yùn)行到光標(biāo)所在行。Shift+F5:停止調(diào)試。
調(diào)試程序的方法:(1)在工程文件夾中建立程序文件;(2)在程序的結(jié)尾處按F9,設(shè)計(jì)斷點(diǎn);(3)按F10,在調(diào)試窗口中輸入要觀測(cè)值的變量;(4)連續(xù)按F10,觀察程序運(yùn)行過程和變量的值;(5)當(dāng)程序運(yùn)行到斷點(diǎn)處時(shí),按Shift+F5結(jié)束調(diào)試。例4-4求兩個(gè)數(shù)中的最大數(shù)。分析:設(shè)輸入的兩個(gè)數(shù)分別存儲(chǔ)在變量x、y中,用max存放最大數(shù)。數(shù)學(xué)模型:兩個(gè)數(shù)可以分別是兩個(gè)人的高度。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(表達(dá)式)語句1;else語句2;語句20語句11表達(dá)式布爾值任何語句例4-5當(dāng)x=3,-4時(shí),分別寫出程序的運(yùn)行結(jié)果。#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的值不能構(gòu)成三角形。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<<"的值不能構(gòu)成三角形"<<endl;
作為一個(gè)復(fù)合語句完成#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<<"的值不能構(gòu)成三角形"<<endl;
}3.多分支if語句如果if或else后面的語句本身又是一個(gè)if語句,則稱這種形式為多分支if結(jié)構(gòu)。例如以下格式:if(表達(dá)式1)if(表達(dá)式2)語句1;else語句2;elseif(表達(dá)式3)語句3;else語句4;注意:語句1、2、3、4可以是復(fù)合語句,每層的if與else配對(duì),或用{}來確定層次關(guān)系。例4-7寫出程序的運(yùn)行結(jié)果。#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; } 運(yùn)行結(jié)果:36條件a!=b為真條件a==b為假b=3例4-8程序結(jié)束輸入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ù)表達(dá)式為非實(shí)數(shù)的值switch語句格式:switch(表達(dá)式){case常量表達(dá)式1:語句序列1;[break;]case常量表達(dá)式2:語句序列2;[break;]┆case常量表達(dá)式n:語句序列n;[break;]default:語句序列n+1;}每個(gè)常量的值不能相同,次序不影響執(zhí)行結(jié)果。執(zhí)行過程:找到與表達(dá)式值相同的常量表達(dá)式的值為入口(若找不到以default為入口
)標(biāo)號(hào),由此開始順序執(zhí)行,直到遇到break語句或“}”。break語句格式:break;功能:跳出包含該break語句的最內(nèi)層的switch語句,而執(zhí)行該switch語句的后繼語句,即終止該switch語句的執(zhí)行。語句序列可以是多個(gè)語句,但不必用{}。break語句不一定存在??梢允钦?、字符型、枚舉型例4-9寫出程序的運(yùn)行結(jié)果。#include<iostream.h>voidmain() { chara='3'; switch(a)
{
case'3':cout<<'3'; case'2':cout<<'2';break; default:cout<<'1';
}
} 運(yùn)行結(jié)果:32說明:(4)常量表達(dá)式的值必須是常量,該常量的類型必須與表達(dá)式的值類型相同。如,例4-9中case3不能改寫為case3。(5)case中常量表達(dá)式的值類型與swith后面括號(hào)內(nèi)的“表達(dá)式”的值類型要相同。如,例4-9中的swith語句不能改為以下程序段switch(a) { case"3":cout<<"3";case"2":cout<<"2";break;default:cout<<"1";}
原因:a是字符變量,"
2","
3"都是字符串。程序結(jié)束例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)結(jié)構(gòu)程序設(shè)計(jì)若程序按照給定的條件重復(fù)執(zhí)行多條語句的,這種程序的結(jié)構(gòu)稱為循環(huán)結(jié)構(gòu)。
例如:購(gòu)物付款時(shí),付款的總額是各種物品單價(jià)的和;(統(tǒng)計(jì)數(shù)據(jù))
蟲蟲什么時(shí)候才吃完蘋果。例4-11計(jì)算。其中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
; }如何有效地完成重復(fù)工作4.3.1while語句格式:while(表達(dá)式)循環(huán)體;
循環(huán)體1假0表達(dá)式布爾值必須含有改變條件表達(dá)式值的語句。執(zhí)行順序:先判斷表達(dá)式的值,若為true(1)時(shí),執(zhí)行循環(huán)體。例4-12寫出程序運(yùn)行的結(jié)果。#include<iostream.h> voidmain() {ints=0,i=1; while(i<6) { s=s+i; i=i+1; } cout<<"s="<<s<<endl; } 運(yùn)行的結(jié)果:s=15i i<6的值循環(huán)次數(shù)s01121345601111510631第1次第2次第3次第4次第5次循環(huán)結(jié)構(gòu)例4-13求1~99的奇數(shù)和。即:s=1+3+5+7+…+99數(shù)學(xué)模型:其中:即i=1,3,…,99。初始時(shí),令s=0,i=1,循環(huán)體:s=s+i,i=i+2。循環(huán)條件:i99sss1s2s3令s0=0例4-13求1~99的奇數(shù)和。初始時(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)結(jié)構(gòu)改變循環(huán)變量i的值對(duì)i進(jìn)行累加,和存放在s中.1假0i≤99s=s+ii=i+2輸出si=1,s=0例4-14輸入一串字符,以‘?’結(jié)束,輸出其中字母?jìng)€(gè)數(shù)與數(shù)字個(gè)數(shù)。設(shè)讀入的字符保存在字符變量ch中,字母字符ch=數(shù)字字符其他字符初始值:令num1=0,num2=0,讀入一個(gè)字符賦給ch,循環(huán)體:統(tǒng)計(jì)字母與數(shù)字個(gè)數(shù)讀入下一個(gè)字符賦給ch。循環(huán)條件:ch‘?’統(tǒng)計(jì)字母字符個(gè)數(shù)num1統(tǒng)計(jì)數(shù)字字符個(gè)數(shù)num2如,輸入a5$B?如果ch是字母,則num1=num1+1,如果ch是數(shù)字,則num2=num2+1,初始值:令num1=0,num2=0,讀入一個(gè)字符賦給ch,循環(huán)體:統(tǒng)計(jì)字母與數(shù)字個(gè)數(shù);讀入下一個(gè)字符賦給ch。循環(huán)條件ch‘?’成立。1假0ch’?’①統(tǒng)計(jì)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)計(jì)num1,num2②讀入ch輸出num1,num2num1=num2=0,讀入chwhile(ch!='?'){統(tǒng)計(jì)num1,num2ch=getchar();}循環(huán)結(jié)構(gòu)從鍵盤中讀入一個(gè)字符賦給字符變量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<<"字母?jìng)€(gè)數(shù):"<<num1<<endl;cout<<"數(shù)字個(gè)數(shù):"<<num2<<endl;}輸入輸出庫存函數(shù)的頭文件ch為循環(huán)變量例,猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過隱,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了。求第一天共摘了多少個(gè)。設(shè)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設(shè)n代表天數(shù),桃子個(gè)數(shù)為x。初始時(shí),n=10,x=1循環(huán)條件:n>1循環(huán)體:x=(x+1)*2,n=n-1n為循環(huán)變量設(shè)n代表天數(shù),桃子個(gè)數(shù)為x。初始時(shí),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(表達(dá)式);執(zhí)行順序先執(zhí)行循環(huán)體語句,后判斷條件。
表達(dá)式為true(1)時(shí),繼續(xù)執(zhí)行循環(huán)體
表達(dá)式01循環(huán)體必須含有改變條件表達(dá)式值的語句。例4-15寫出程序運(yùn)行的結(jié)果。#include<iostream.h>voidmain(){ints=0,i=1;do{s=s+i;i=i+1;}while(i<6);cout<<"s="<<s<<endl;}運(yùn)行的結(jié)果:s=15i i<6的值循環(huán)次數(shù)s0121345601111510631第1次第2次第3次第4次第5次循環(huán)結(jié)構(gòu)i為循環(huán)變量例4-16用輾轉(zhuǎn)相除法求兩自然數(shù)的最大公約數(shù)。數(shù)學(xué)模型:
rbabarb若r0,重復(fù)做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轉(zhuǎn)(3),否則轉(zhuǎn)(7)。(7)輸出a的值。1假a<b0交換a,b的值r=amodb,a=b,b=r輸出a讀入a,br001循環(huán)結(jié)構(gòu)#include<iostream.h>voidmain() {inta,b,r;cout<<"請(qǐng)輸入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計(jì)算直到最后一項(xiàng)的絕對(duì)值小于10-7時(shí)停止計(jì)算。建立數(shù)學(xué)模型:
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)設(shè)s=x,t=x,n=2(3)(4)(5)n=n+1(6)如果成立,轉(zhuǎn)(3),否則轉(zhuǎn)(7)。(7)輸出結(jié)果。初值:s=x,t=x,n=2循環(huán)體:s=s+tn=n+1循環(huán)條件:|t|10-7算法:(1)輸入x(2)設(shè)s=x,t=x,n=2(3)(4)(5)n=n+1(6)如果成立,轉(zhuǎn)(3),否則轉(zhuǎn)(7)。(7)輸出結(jié)果。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(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體
1假0表達(dá)式2表達(dá)式1循環(huán)體表達(dá)式3先計(jì)算必須能改變表達(dá)式2的值。執(zhí)行過程:當(dāng)表達(dá)式2為true時(shí),執(zhí)行循環(huán)體??梢允菑?fù)合語句。循環(huán)條件例4-18寫出程序運(yùn)行的結(jié)果。#include<iostream.h>voidmain(){inti,s(0);for(i=1;i<6;i++) s=s+i;cout<<"s="<<s<<endl;}運(yùn)行的結(jié)果:s=15i i<6的值循環(huán)次數(shù)s01121345601111510631第1次第2次第3次第4次第5次循環(huán)結(jié)構(gòu)i為循環(huán)變量例4-19計(jì)算。其中x=1,2,…,10。算法:(1)x=1(2)如果x10,則轉(zhuǎn)(3),否則程序結(jié)束。(3)輸出ex的值。(4)輸出lnx的值。(5)x=x+1(6)轉(zhuǎn)(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個(gè)數(shù)(不包括第10個(gè)數(shù))。112358131,1,2,3,5,8,13,21,34,56從第3個(gè)數(shù)起,第i個(gè)數(shù)是前兩個(gè)數(shù)的和。數(shù)學(xué)模型:
如果用整型變量i表示斐波那契數(shù)的個(gè)數(shù),則i=1,2,…,9。初始時(shí):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個(gè)表達(dá)式都可以省略,但分號(hào)不能省。如,計(jì)算1+3+…+99的值。①i=1;s=0;for(;i<100;i=i+2)s=s+i;對(duì)循環(huán)變量i賦初值的表達(dá)式放在for語句之前。②s=0;for(i=1;i<100;){s=s+i;i=i+2;}對(duì)改變循環(huán)變量i值的表達(dá)式放在for語句的循環(huán)體中。③s=0;for(i=1;;i=i+2){if(i>=100)break;s=s+i;}
for語句中的表達(dá)式2省略時(shí),循環(huán)體一定要通過if語句和break語句實(shí)現(xiàn)退出循環(huán)的情況。④i=1;s=0;for(;i<100;){s=s+i;i=i+2;}
(2)表達(dá)式1和表達(dá)式3可以是逗號(hào)表達(dá)式。如,for(i=1,s=0;i<100;s=s+i,i=i+2);(3)對(duì)循環(huán)體中的語句可以放在for語句的表達(dá)式3中。例,某學(xué)校4位同學(xué)中的一位做了好事不留名。表揚(yáng)信來了之后,校長(zhǎng)問這4位是誰做的好事。A說:不是我。B說:是C。C說:是D。D說:他胡說。已知3個(gè)人說的是真話,一個(gè)人說的是假話?,F(xiàn)在要根據(jù)這些信息,找出做了好事的人。設(shè)用變量man表示要尋找的做了好事的人,利用關(guān)系表達(dá)式將4個(gè)人所說的話表示成表達(dá)式,則有man!=‘A’,man==‘C’,man==‘D’,man!=‘D’由題目可知,這三個(gè)條件的和sum為3。man的值:’A’,’B’,’C’,’D’初值:man=‘A’循環(huán)體:求sum的值,若sum=3,則輸出man的值。循環(huán)條件:man<‘E’改變man值的表達(dá)式: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;}}課堂練習(xí)第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)語句小結(jié)①while語句和for語句都是先判斷后循環(huán),do-while語句是先循環(huán)后判斷;②do-while語句中的循環(huán)體至少執(zhí)行一次,while語句和for語句中的循環(huán)體可能一次也沒有執(zhí)行;③for語句有三個(gè)表達(dá)式,可以分別用于循環(huán)變量初始化、循環(huán)結(jié)束條件和循環(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;}運(yùn)行的結(jié)果:i=7②#include<iostream.h>voidmain(){ints=0,i=6;while(i<6){s=s+i;i=i+1;}cout<<"s="<<s<<endl;}運(yùn)行的結(jié)果:s=0③#include<iostream.h>voidmain(){ints=0;for(inti=6;i<6;i++)s=s+i;cout<<"s="<<s<<endl;}運(yùn)行的結(jié)果:s=04.4多重循環(huán)程序設(shè)計(jì)在循環(huán)語句中的循環(huán)體又嵌套另一個(gè)循環(huán)語句時(shí),這種循環(huán)語句稱為多重循環(huán)。多重循環(huán)的嵌套次數(shù)是任意的。按照嵌套層次數(shù),分別叫二重循環(huán)、三重循環(huán)等。處于內(nèi)部的循環(huán)語句叫做內(nèi)循環(huán).處于外部的循環(huán)語句叫做外循環(huán)。例4-21寫出下列程序的運(yùn)行結(jié)果。#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; } }運(yùn)行結(jié)果:外循環(huán)內(nèi)循環(huán)k=1789k=2789k為外循環(huán)的循環(huán)變量p為內(nèi)循環(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個(gè)“*”。初值:i=1循環(huán)條件:i5循環(huán)體:(1)輸出第i行的i個(gè)“*”;(2)換行。for(i=1;i<=5;i++){輸出第i行的i個(gè)“*”;
cout<<endl;}***************i是循環(huán)變量輸出第i行的i個(gè)“*”:用j表示第j個(gè)“*”,則1ji。初值:j=1循環(huán)條件:ji循環(huán)體:輸出第j個(gè)”*”for(i=1;i<=5;i++){
輸出第i行的i個(gè)“*”;cout<<endl;}***************for(j=1;j<=i;j++)cout<<’*’;j是內(nèi)循環(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,計(jì)算1!+2!+…+n!計(jì)算sn=1!+2!+…+n!的數(shù)學(xué)模型:
ss初值:s=0,k=1循環(huán)體:計(jì)算k!的值t,s=s+t,對(duì)t進(jìn)行累加k=k+1循環(huán)條件:k≤n1假0k<=ns=0,k=1計(jì)算k!的值t,s=s+tk=k+1計(jì)算k!的值:k!=1*2*3*…*(k-1)*kt=t*i,其中,i=1,2,…,k初值:t=1,i=1循環(huán)體:t=t*i,對(duì)i進(jìn)行累乘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①計(jì)算k!的值t1假0i<=kt=1,i=1t=t*ii=i+1①②k是循環(huán)變量for(k=1;k<=n;k++){
計(jì)算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++){
計(jì)算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)內(nèi)循環(huán)k是外循環(huán)循環(huán)變量i是內(nèi)循環(huán)循環(huán)變量例,某地刑偵大隊(duì)對(duì)涉及6個(gè)嫌疑人的一樁疑案進(jìn)行以下分析,試將作案人找出來。(1)A,B至少有1人作案;(2)A,E,F(xiàn)3人中至少有2人參與作案;(3)A,D不可能是同案犯;(4)B,C或同時(shí)作案,或與本案無關(guān);(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個(gè)表達(dá)式的和sum為6時(shí),此時(shí)A、B、C、D、E、F的值為1時(shí)就是作案人。A,B,C,D,E,F的值:0,1循環(huán)體:求這6個(gè)表達(dá)式的和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常用轉(zhuǎn)移語句4.5.1break語句格式:break;語句序列1表達(dá)式1真假break語句序列2表達(dá)式2假真后繼語句循環(huán)體語句序列1if(表達(dá)式2)break;語句序列2功能:終止循環(huán)。該語句出現(xiàn)在循環(huán)體時(shí)的形式如下例:該例的功能圖例4-24寫出程序的運(yùn)行結(jié)果。#include<iostream.h> voidmain() { for(intm=20;m>16;m--) { if(m%6==0)break; cout<<m<<""; } } 運(yùn)行結(jié)果:m2019201918循環(huán)3次,但只輸出2個(gè)結(jié)果。4.5.2continue語句格式:continue;循環(huán)體while(表達(dá)式1){語句序列1if(表達(dá)式2)cont
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型養(yǎng)老服務(wù)機(jī)構(gòu)代繳社保服務(wù)協(xié)議范本
- 2025年新能源發(fā)電設(shè)備定期檢查與維護(hù)合同
- 2025年度智能車庫租賃及車位租賃與停車資源共享協(xié)議
- 2025年度土地承包經(jīng)營(yíng)權(quán)流轉(zhuǎn)糾紛調(diào)解合同模板
- 2025年茶葉種植基地生態(tài)保護(hù)與修復(fù)承包協(xié)議
- 2025年度離婚協(xié)議書格式規(guī)范與編制要求
- 秘書工作計(jì)劃對(duì)企業(yè)目標(biāo)的支持
- 班級(jí)跨學(xué)科活動(dòng)的實(shí)施路徑計(jì)劃
- 社團(tuán)活動(dòng)資源共享方案計(jì)劃
- 醫(yī)院文化建設(shè)增效方案計(jì)劃
- 交管12123學(xué)法減分題庫(含答案)
- 北京市海淀區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 《幼兒教育政策與法規(guī)》教案-單元5 幼兒的權(quán)利與保護(hù)
- 《煤礦頂板管理》課件
- 2024年重慶市公務(wù)員錄用考試《行測(cè)》真題及答案解析
- “德能勤績(jī)廉”考核測(cè)評(píng)表
- 三年級(jí)下冊(cè)口算天天100題(A4打印版)
- 土的野外鑒別及描述
- FUJI可編程序控制器MICREX-F系列(PPT課件)
- 九年級(jí)數(shù)學(xué)上冊(cè)黃金分割PPT課件
評(píng)論
0/150
提交評(píng)論