第3章譚浩強(qiáng)《C++程序設(shè)計(jì)》課件_第1頁
第3章譚浩強(qiáng)《C++程序設(shè)計(jì)》課件_第2頁
第3章譚浩強(qiáng)《C++程序設(shè)計(jì)》課件_第3頁
第3章譚浩強(qiáng)《C++程序設(shè)計(jì)》課件_第4頁
第3章譚浩強(qiáng)《C++程序設(shè)計(jì)》課件_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章程序設(shè)計(jì)初步第4章函數(shù)與預(yù)處理第5章數(shù)組第6章指針第7章自定義數(shù)據(jù)類型第2篇

面向過程的程序設(shè)計(jì)第3章程序設(shè)計(jì)初步3.1面向過程的程序設(shè)計(jì)和算法3.2C++程序和語句3.3賦值語句3.4C++的輸入與輸出3.5編寫順序結(jié)構(gòu)的程序3.6關(guān)系運(yùn)算和邏輯運(yùn)算3.7選擇結(jié)構(gòu)和if語句3.8條件運(yùn)算符和條件表達(dá)式3.9多分支選擇結(jié)構(gòu)和switch語句3.10編寫選擇結(jié)構(gòu)的程序3.11循環(huán)結(jié)構(gòu)和循環(huán)語句3.12循環(huán)的嵌套3.13break語句和continue語句3.14編寫循環(huán)結(jié)構(gòu)的程序一個面向過程的程序應(yīng)包括以下兩方面內(nèi)容:(1)對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(datastructure)。(2)對操作的描述。即操作步驟,也就是算法(algorithm)。對于面向過程的程序,可以用下面的公式表示:程序=算法+數(shù)據(jù)結(jié)構(gòu)3.1.1算法的概念3.1面向過程的程序設(shè)計(jì)和算法1.自然語言用中文或英文等自然語言描述算法。2.流程圖

可以用傳統(tǒng)的流程圖或結(jié)構(gòu)化流程圖。3.偽代碼(pseudocode)

偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法。4.用計(jì)算機(jī)語言表示算法用一種計(jì)算機(jī)語言去描述算法,這就是計(jì)算機(jī)程序。3.1.2算法的表示由第1章已知,一個程序包含一個或多個程序單位(每個程序單位構(gòu)成一個程序文件)。每一個程序單位由以下幾個部分組成:(1)預(yù)處理命令。如#include命令和#define命令。(2)聲明部分。例如對數(shù)據(jù)類型和函數(shù)的聲明,以及對變量的定義。(3)函數(shù)。包括函數(shù)首部和函數(shù)體,在函數(shù)體中可以包含若干聲明語句和執(zhí)行語句。3.2C++程序和語句C++語句可以分為以下4種:1.聲明語句如inta,b;2.執(zhí)行語句(1)控制語句,C++有9種控制語句,即

①if()~else~(條件語句)②for()~(循環(huán)語句)③while()~(循環(huán)語句)④do~while()(循環(huán)語句)⑤continue(結(jié)束本次循環(huán)語句)⑥break(中止執(zhí)行switch或循環(huán)語句)⑦switch(多分支選擇語句)⑧goto(轉(zhuǎn)向語句)⑨return(從函數(shù)返回語句)(2)函數(shù)和流對象調(diào)用語句。sort(x,y,z);//假設(shè)已定義了sort函數(shù),它有3個參數(shù)cout<<x<<endl;//流對象調(diào)用語句(3)表達(dá)式語句。由一個表達(dá)式加一個分號構(gòu)成一個語句。最典型的是:由賦值表達(dá)式構(gòu)成一個賦值語句。i=i+1//是一個賦值表達(dá)式i=i+1;//是一個賦值語句3.空語句;即只有一個分號的語句,它什么也不做。4.復(fù)合語句可以用{}把一些語句括起來成為復(fù)合語句。{z=x+y;if(z>100)z=z-100;cout<<z;}賦值語句是由賦值表達(dá)式加上一個分號構(gòu)成。(1)C++的賦值語句具有其他高級語言的賦值語句的功能。但不同的是:C++中的賦值號“=”是一個運(yùn)算符,可以寫成a=b=c=d;(2)賦值表達(dá)式可以包括在其他表達(dá)式之中,例如if((a=b)>0)cout<<″a>0″<<endl;3.3賦值語句C++的輸出和輸入是用“流”(stream)的方式實(shí)現(xiàn)的。有關(guān)流對象cin、cout和流運(yùn)算符的定義等信息是存放在C++的輸入輸出流庫中的,因此如果在程序中使用cin、cout和流運(yùn)算符,就必須使用預(yù)處理命令把頭文件stream包含到本文件中:#include<iostream>3.4C++的輸入與輸出cout語句的一般格式為

cout<<表達(dá)式1<<表達(dá)式2<<……<<表達(dá)式n;cin語句的一般格式為cin>>變量1>>變量2>>……>>變量n;在定義流對象時,系統(tǒng)會在內(nèi)存中開辟一段緩沖區(qū),用來暫存輸入輸出流的數(shù)據(jù)。在執(zhí)行cout語句時,先把插入的數(shù)據(jù)順序存放在輸出緩沖區(qū)中,直到輸出緩沖區(qū)滿或遇到cout語句中的endl(或′\n′,ends,flush)為止,此時將緩沖區(qū)中已有的數(shù)據(jù)一起輸出,并清空緩沖區(qū)。*3.4.1輸入流與輸出流的基本操作cout<<″ThisisasimpleC++program.″<<endl;也可寫成多個cout語句,即cout<<″Thisis″;//語句末尾有分號cout<<″aC++″;cout<<″program.″;cout<<endl;注意不能用一個插入運(yùn)算符“<<”插入多個輸出項(xiàng):cout<<a,b,c;//錯誤,不能一次插入多項(xiàng)cout<<a+b+c;//正確,這是一個表達(dá)式,作為一項(xiàng)在用cout輸出時,用戶不必通知計(jì)算機(jī)按何種類型輸出,系統(tǒng)會自動判別輸出數(shù)據(jù)的類型,使輸出的數(shù)據(jù)按相應(yīng)的類型輸出。inta=4;floatb=345.789;charc=‘a(chǎn)’;cout<<a<<′′<<b<<′′<<c<<endl;cin>>a>>b>>c>>d;也可以寫成cin>>a;cin>>b;cin>>c;cin>>d;在用cin輸入時,系統(tǒng)也會根據(jù)變量的類型從輸入流中提取相應(yīng)長度的字節(jié)。如有charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;如果輸入123456.78↙如果使用了控制符,在程序單位的開頭要加iomanip頭文件。dec設(shè)置整數(shù)的基數(shù)為10hex設(shè)置整數(shù)的基數(shù)為16oct設(shè)置整數(shù)的基數(shù)為8setfill(c)設(shè)置填充字符c,c可以是字符常量或字符變量setprecision(n)設(shè)置實(shí)數(shù)的精度為n位。在以一般十進(jìn)制小數(shù)形式輸出時,n代表有效數(shù)字。在以fixed(固定小數(shù)位數(shù))形式和scientific(指數(shù))形式輸出時,n為小數(shù)位數(shù)。*3.4.2在輸入流與輸出流中使用控制符setw(n)設(shè)置字段寬度為n位。setiosflags(ios::fixed)設(shè)置浮點(diǎn)數(shù)以固定的小數(shù)位數(shù)顯示。setiosflags(ios::scientific)設(shè)置浮點(diǎn)數(shù)以科學(xué)計(jì)數(shù)法(即指數(shù)形式)顯示。setiosflags(ios::left)輸出數(shù)據(jù)左對齊。setiosflags(ios::right)輸出數(shù)據(jù)右對齊。setiosflags(ios::shipws)忽略前導(dǎo)的空格。setiosflags(ios::uppercase)在以科學(xué)計(jì)數(shù)法輸出E和十六進(jìn)制輸出字母X時,以大寫表示。setiosflags(ios::showpos)輸出正數(shù)時,給出“+”號。doublea=123.456789012345;對a賦初值(1)cout<<a;輸出:123.456(2)cout<<setprecision(9)<<a;輸出:123.456789(3)cout<<setprecision(6);恢復(fù)默認(rèn)格式(精度為6)(4)cout<<setiosflags(ios∷fixed);輸出:123.456789(5)cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;輸出:123.45678901(6)cout<<setiosflags(ios∷scientific)<<a;輸出:1.234568e+02(7)cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;輸出:1.2346e02下面是整數(shù)輸出的例子:intb=123456;對b賦初值(1)cout<<b;輸出:123456(2)cout<<hex<<b;輸出:1e240(3)cout<<setiosflags(ios∷uppercase)<<b;輸出:1E240(4)cout<<setw(10)<<b<<′,′<<b;輸出:123456,123456(5)cout<<setfill(′*′)<<setw(10)<<b;輸出:****123456(6)cout<<setiosflags(ios∷showpos)<<b;輸出:+123456如果在多個cout語句中使用相同的setw(n),并使用setiosflags(ios∷right),可以實(shí)現(xiàn)各行數(shù)據(jù)右對齊,如果指定相同的精度,可以實(shí)現(xiàn)上下小數(shù)點(diǎn)對齊。例3.1各行小數(shù)點(diǎn)對齊。#include<iostream>#include<iomanip>usingnamespacestd;intmain(){doublea=123.456,b=3.14159,c=-3214.67;cout<<setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision(2);cout<<setw(10)<<a<<endl;cout<<setw(10)<<b<<endl;cout<<setw(10)<<c<<endl;return0;}輸出如下:123.46(字段寬度為10,右對齊,取兩位小數(shù))3.14-3214.67先統(tǒng)一設(shè)置定點(diǎn)形式輸出、取兩位小數(shù)、右對齊。這些設(shè)置對其后的輸出均有效(除非重新設(shè)置),而setw只對其后一個輸出項(xiàng)有效,因此必須在輸出a,b,c之前都要寫setw(10)。C++還保留了C語言中用于輸入和輸出單個字符的函數(shù),使用很方便。其中最常用的有g(shù)etchar函數(shù)和putchar函數(shù)。1.putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個字符。例如putchar(c);它輸出字符變量c的值。3.4.3用getchar和putchar函數(shù)進(jìn)行字符的輸入和輸出例3.2輸出單個字符。#include<iostream>//或者包含頭文件stdio.h:#include<stdio.h>usingnamespacestd;intmain(){chara,b,c;a=′B′;b=′O′;c=′Y′;putchar(a);putchar(b);putchar(c);putchar(′\n′);putchar(66);putchar(79);putchar(89);putchar(10);return0;}運(yùn)行結(jié)果為BOYBOY2.getchar函數(shù)(字符輸入函數(shù))此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個字符。例3.3輸入單個字符。#include<iostream>usingnamespacestd;intmain(){charc;c=getchar();putchar(c+32);putchar(′\n′);return0;}在運(yùn)行時,如果從鍵盤輸入大寫字母′A′并按回車鍵,就會在屏幕上輸出小寫字母′a′。在C語言中是用printf函數(shù)進(jìn)行輸出,用scanf函數(shù)進(jìn)行輸入的。scanf函數(shù)一般格式是scanf(格式控制,輸入變量地址表列)printf函數(shù)的一般格式是printf(格式控制,輸出表列)3.4.4用scanf和printf函數(shù)進(jìn)行輸入和輸出例3.4用scanf和printf函數(shù)進(jìn)行輸入和輸出。#include<iostream>usingnamespacestd;intmain(){inta;floatb;charc;scanf(″%d%c%f″,&a,&c,&b);

printf(″a=%d,b=%f,c=%c\n″,a,b,c);return0;}運(yùn)行情況如下:12A67.98↙a=12,b=67.980003,c=A例3.5求一元二次方程式ax2+bx+c=0的根。a,b,c的值在運(yùn)行時由鍵盤輸入,它們的值滿足b2-4ac≥0。根據(jù)求x1,x2的算法。它可以編寫出以下C++程序:#include<iostream>#include<cmath>//由于用到數(shù)學(xué)函數(shù)sqrt,故應(yīng)包含頭文件cmathusingnamespacestd;intmain(){floata,b,c,x1,x2;cin>>a>>b>>c;x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);cout<<″x1=″<<x1<<endl;cout<<″x2=″<<x2<<endl;return0;}3.5編寫順序結(jié)構(gòu)的程序C++的關(guān)系運(yùn)算符有:①< (小于)②<= (小于或等于) 優(yōu)先級相同(高)③> (大于)④>= (大于或等于) ⑤== (等于)⑥!= (不等于) 優(yōu)先級相同(低)3.6關(guān)系運(yùn)算和關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個表達(dá)式連接起來的式子,稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式的一般形式可以表示為表達(dá)式關(guān)系運(yùn)算符表達(dá)式a>b,a+b>b+c,(a==3)>(b==5),′a′<′b′,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個邏輯值,即“真”或“假”。用數(shù)值1代表“真”,用0代表“假”。inta=3,b=2,c=5;d=a>b則d得到的值為1f=a>b>cf得到的值為0邏輯型,也叫布爾型,常量只有兩個,即false(假)和true(真)。邏輯型變量要用bool來定義,值只能是true或falseboolfound,flag=false;found=true;在編譯系統(tǒng)處理邏輯型數(shù)據(jù)時,將false處理為0,將true處理為1。因此,邏輯型數(shù)據(jù)可以與數(shù)值型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。如果將一個非零的整數(shù)賦給邏輯型變量,則按“真”處理,如flag=123;//賦值后flag的值為truecout<<flag;輸出為數(shù)值1。3.6.2邏輯常量和邏輯變量C++提供3種邏輯運(yùn)算符:(1)&&邏輯與(2)||邏輯或(3)!邏輯非邏輯運(yùn)算舉例如下:a&&b若a,b為真,則a&&b為真。a||b若a,b之一為真,則a||b為真。!a若a為真,則!a為假。3.6.3邏輯運(yùn)算和邏輯表達(dá)式在一個邏輯表達(dá)式中如果包含多個邏輯運(yùn)算符,按以下的優(yōu)先次序:(1)!(非)→&&(與)→||(或),即“!”為三者中最高的。(2)邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。例如:(a>b)&&(x>y)可寫成a>b&&x>y(a==b)||(x==y)可寫成a==b||x==y(!a)||(a>b)可寫成!a||a>b將兩個關(guān)系表達(dá)式用邏輯運(yùn)算符連接起來就成為一個邏輯表達(dá)式,上面幾個式子就是邏輯表達(dá)式。邏輯表達(dá)式的一般形式可以表示為:表達(dá)式邏輯運(yùn)算符表達(dá)式邏輯表達(dá)式的值是一個邏輯量“真”或“假”。在給出邏輯運(yùn)算結(jié)果時,以數(shù)值1代表“真”,以0代表“假”,但在判斷一個邏輯量是否為“真”時,采取的標(biāo)準(zhǔn)是:如果其值是0就認(rèn)為是“假”,如果其值是非0就認(rèn)為是“真”。例如:若a=4,則!a。若a=4,b=5,則a&&b′c′&&′d′

(4)a=4,b=5,!a||b(5)4&&0||2例如,要判別某一年(year)是否為閏年。閏年的條件是符合下面兩者之一:①能被4整除,但不能被100整除。②能被100整除,又能被400整除??梢杂靡粋€邏輯表達(dá)式來表示:(year%4==0&&year%100!=0)||year%400==0

可以加一個“!”用來判別非閏年:!((year%4==0&&year%100!=0)||year%400==0)if(表達(dá)式)

語句2.if(表達(dá)式)

語句1

else語句2if語句的3種形式3.7選擇結(jié)構(gòu)和if語句3.if(表達(dá)式1)

語句1elseif(表達(dá)式2)

語句2elseif(表達(dá)式3)

語句3

… elseif(表達(dá)式m)

語句m說明:(1)3種形式的if語句都是由一個入口進(jìn)來,經(jīng)過對“表達(dá)式”的判斷,分別執(zhí)行相應(yīng)的語句,最后歸到一個共同的出口。這種形式的程序結(jié)構(gòu)稱為選擇結(jié)構(gòu)。(2)3種形式的if語句中在if后面都有一個用括號括起來的表達(dá)式,它是程序編寫者要求程序判斷的“條件”,一般是邏輯表達(dá)式或關(guān)系表達(dá)式。(3)第2、第3種形式的if語句中,在每個else前面有一分號,整個語句結(jié)束處有一分號。(4)在if和else后面可以只含一個內(nèi)嵌的操作語句,也可以有多個操作語句,此時用花括號“{}”將幾個語句括起來成為一個復(fù)合語句。例3.6求三角形的面積。#include<iostream>#include<cmath>//使用數(shù)學(xué)函數(shù)時要包含頭文件cmath#include<iomanip>//使用I/O流控制符要包含頭文件iomanipusingnamespacestd;intmain(){doublea,b,c;cout<<″pleaseentera,b,c:″;cin>>a>>b>>c;if(a+b>c&&b+c>a&&c+a>b){//復(fù)合語句開始

doubles,area;//在復(fù)合語句內(nèi)定義變量

s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<setiosflags(ios∷fixed)<<setprecision(4);//指定輸出的數(shù)包含4位小數(shù)

cout<<″area=″<<area<<endl;//在復(fù)合語句內(nèi)輸出局部變量的值}//復(fù)合語句結(jié)束elsecout<<″itisnotatrilateral!″<<endl;return0;}條件運(yùn)算符(?:)條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2∶表達(dá)式3 max=(a>b)?a:b;條件運(yùn)算符的執(zhí)行順序是:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時表達(dá)式2的值就作為整個條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個條件表達(dá)式的值。3.8條件運(yùn)算符和條件表達(dá)式條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3的類型不同。如x?′a′∶′b′如果已定義x為整型變量,若x=0,則條件表達(dá)式的值為字符′b′的ASCII碼。表達(dá)式2和表達(dá)式3的類型也可以不同,此時條件表達(dá)式的值的類型為二者中較高的類型。如x>y?1:1.5,如果x≤y,則條件表達(dá)式的值為1.5,若x>y,值應(yīng)為1,由于C++把1.5按雙精度數(shù)處理,雙精度的類型比整型高,因此,將1轉(zhuǎn)換成雙精度數(shù),以此作為表達(dá)式的值。例3.7輸入一個字符,判別它是否為大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。#include<iostream>usingnamespacestd;intmain(){charch;cin>>ch;ch=(ch>=′A′&&ch<=′Z′)?(ch+32):ch;

cout<<ch<<endl;return0;}一般形式如下:switch(表達(dá)式){case常量表達(dá)式1:語句1

case常量表達(dá)式2:語句2...

case常量表達(dá)式n:語句ndefault:語句n+1}3.9多分支選擇結(jié)構(gòu)和switch語句例如,要求按照考試成績的等級打印出百分制分?jǐn)?shù)段,可以用switch語句實(shí)現(xiàn):switch(grade){case′A′:cout<<″85~100\n″;case′B′:cout<<″70~84\n″;case′C′:cout<<″60~69\n″;case′D′:cout<<″<60\n″;default:cout<<″error\n″;}說明:(1)switch后面括號內(nèi)的“表達(dá)式”,可為任何類型。(2)當(dāng)switch表達(dá)式的值與某一個case子句中的常量表達(dá)式的值相匹配時,就執(zhí)行此case子句中的內(nèi)嵌語句,若所有的case子句中的常量表達(dá)式的值都不能與switch表達(dá)式的值匹配,就執(zhí)行default子句的內(nèi)嵌語句。(3)每一個case表達(dá)式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象。(4)各個case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。(5)執(zhí)行完一個case子句后,流程控制轉(zhuǎn)移到下一個case子句繼續(xù)執(zhí)行。應(yīng)該在執(zhí)行一個case子句后,可以用一個break語句終止switch語句的執(zhí)行。(6)多個case可以共用一組執(zhí)行語句,如...

case′A′:case′B′:case′C′:cout<<″>60\n″;break;...。例3.8編寫程序,判斷某一年是否為閏年。#include<iostream>usingnamespacestd;intmain(){intyear;boolleap;cout<<″pleaseenteryear:″;//輸出提示

cin>>year;//輸入年份

if(year%4==0)//年份能被4整除{if(year%100==0)//年份能被4整除又能被100整除{if(year%400==0)//年份能被4整除又能被400整除

leap=true;//閏年,令leap=true(真)

elseleap=false;}//非閏年,令leap=false(假)

else//年份能被4整除但不能被100整除肯定是閏年

leap=true;}//是閏年,令leap=true3.10編寫選擇結(jié)構(gòu)的程序else//年份不能被4整除肯定不是閏年

leap=false;//若為非閏年,令leap=falseif(leap)cout<<year<<″is″;//若leap為真,就輸出年份和“是”

elsecout<<year<<″isnot″;//若leap為真,就輸出年份和“不是”

cout<<″aleapyear.″<<endl;//輸出“閏年”

return0;}運(yùn)行情況如下:①2005↙2005isnotaleapyear.②1900↙1900isnptaleapyear.也可以用一個邏輯表達(dá)式包含所有的閏年條件,將上述if語句用下面的if語句代替:if((year%4==0&&year%100!=0)||(year%400==0))leap=true;elseleap=false;例3.9運(yùn)輸公司對用戶計(jì)算運(yùn)費(fèi)。路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:

s<250km沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p(price的縮寫),貨物重為w(wright的縮寫),距離為s,折扣為d(discount的縮寫),則總運(yùn)費(fèi)f(freight的縮寫)的計(jì)算公式為f=p*w*s*(1-d)據(jù)此寫出程序如下:#include<iostream>usingnamespacestd;intmain(){intc,s;floatp,w,d,f;cout<<″pleaseenterp,w,s:″;cin>>p>>w>>s;if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100.0);cout<<″freight=″<<f<<endl;return0;}while語句的一般形式如下:while(表達(dá)式)語句其作用是:當(dāng)指定的條件為真(表達(dá)式為非0)時,執(zhí)行while語句中的內(nèi)嵌語句。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語句。while循環(huán)稱為當(dāng)型循環(huán)。3.11循環(huán)結(jié)構(gòu)和循環(huán)語句例3.10求1+2+3+…+100。根據(jù)流程圖寫出程序:#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}cout<<″sum=″<<sum<<endl;}運(yùn)行結(jié)果為sum=5050需要注意:循環(huán)體如果包含一個以上的語句,應(yīng)該用花括號括起來,以復(fù)合語句形式出現(xiàn)。如果不加花括號,則while語句的范圍只到while后面第一個分號處。(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。do-while語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式為do

語句

while(表達(dá)式);它是這樣執(zhí)行的:先執(zhí)行一次指定的語句(即循環(huán)體),然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”)時,返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達(dá)式的值等于0為止,此時循環(huán)結(jié)束。用do-while語句構(gòu)成循環(huán)例3.11用do-while語句求1+2+3+…+100??删帉懗鱿旅娴某绦颍?include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);cout<<″sum=″<<sum<<endl;return0;}C++中的for語句使用最為廣泛和靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。for語句的一般格式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句用for語句構(gòu)成循環(huán)for語句最簡單的形式也是最容易理解的格式如下:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句例如for(i=1;i<=100;i++) sum=sum+i;說明:(1)for語句的一般格式中的“表達(dá)式1”可以省略,此時應(yīng)在for語句之前給循環(huán)變量賦初值。(2)如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進(jìn)行下去。也就是認(rèn)為表達(dá)式2始終為真。(3)表達(dá)式3也可以省略,但此時程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。(4)可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件。(5)3個表達(dá)式都可省略。(6)表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無關(guān)的其他表達(dá)式。(7)表達(dá)式一般是關(guān)系表達(dá)式(如i<=100)或邏輯表達(dá)式(如a<b&&x<y),但也可以是數(shù)值表達(dá)式或字符表達(dá)式,只要其值為非零,就執(zhí)行循環(huán)體。(1)3種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。(2)while和do-while循環(huán),是在while后面指定循環(huán)條件的,在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語句。for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。(3)用while和do-while循環(huán)時,循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成。而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。3.11.4幾種循環(huán)的比較一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。3種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。3.12循環(huán)的嵌套break語句的一般格式為break;其作用為使流程從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)體下面的語句。break語句只能用于循環(huán)語句和switch語句內(nèi),不能單獨(dú)使用或用于其他語句中。3.13break語句和continue語句continue語句的一般格式為continue;其作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。continue語句和break語句的區(qū)別是:continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。而break語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。如果有以下兩個循環(huán)結(jié)構(gòu):用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一項(xiàng)的絕對值小于10-7為止。#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;intmain(){ints=1;doublen=1,t=1,pi=0;while((fabs(t))>1e-7){pi=pi+t;n=n+2;3.14編寫循環(huán)結(jié)構(gòu)的程序s=-s;t=s/n;}pi=pi*4;cout<<″pi=″<<setiosflags(ios∷fixed)<<setprecision(6)<<pi<<endl;return0;}運(yùn)行結(jié)果為pi=3.141592注意:不要把n定義為整型變量,否則在執(zhí)行“t=s/n;”時,得到t的值為0(原因是兩個整數(shù)相除)。例3.13求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下特點(diǎn):第1、2個數(shù)為1、1。從第3個數(shù)開始,每個數(shù)是其前面兩個數(shù)之和。即F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)這是一個有趣的古典數(shù)學(xué)問題:有一對兔子,從出生后第3個月起每個月都生一對兔子。小兔子長到第3個月后每個月又生一對兔子。假設(shè)所有兔子都不死,問每個月的兔子總數(shù)為多少?可以從書中表3.4看出兔子數(shù)的規(guī)律。根據(jù)給出的每月兔子總數(shù)的關(guān)系,可編寫程序如下:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){longf1,f2;inti;f1=f2=1;for(i=1;i<=20;i++){cout<<setw(12)<<f1<<setw(12)<<f2;if(i%2==0)cout<<endl;

溫馨提示

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

評論

0/150

提交評論