版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章程序設計初步3.1面向過程的程序設計和算法3.2C++程序和語句3.3
C++的輸入與輸出3.4編寫順序結構的程序3.5
選擇結構和if語句3.6多分支選擇結構和switch語句3.7
編寫選擇結構的程序3.8
循環(huán)結構和循環(huán)語句3.9
循環(huán)的嵌套3.10break語句和continue語句3.11
編寫循環(huán)結構的程序3.1.1算法的概念一個面向過程的程序應該包括兩部分內(nèi)容:⑴對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結構。⑵對操作的描述。即操作步驟,也就是算法。對于面向過程的程序可以用下面的公式表示:3.1面向過程的程序設計和算法程序=算法+數(shù)據(jù)結構
算法是處理問題的一系列步驟,它必須具體指出在執(zhí)行時每一步應當怎樣做。程序中的操作語句就是算法的具體體現(xiàn)。3.1.2算法的表示⑴自然語言。用中文或英文等自然語言描述算法。⑵流程圖。例函數(shù)
其流程圖為⑶偽代碼。介于自然語言和計算機語言之間的文字和符號來描述算法。⑷計算機語言。用計算機語言描述算法,就是計算機程序。
流程圖是目前全球軟件開發(fā)領域使用最廣泛的算法表示工具,它通過一些嚴格定義圖形的組合來表示算法的步驟以及數(shù)據(jù)變化的走向。用圖形表示算法,直觀形象,易于理解。
流程圖符號:起止框輸入輸出框處理框連接點流程線判斷框注釋框例:求的值。解:定義變量:M—累乘積
N—代表一項的分母算法描述:自然語言+偽代碼算法:⑴M←1,N←1⑵M←M×⑶N←N+1⑷如果N≤100,轉⑵否則,轉⑸⑸輸出M的值⑹結束1N循環(huán)開始結束M←1N←1M←M×N←N+11N輸出M的值N≤100TF處理框流程線判斷框用流程圖描述3.2C++程序和語句#include<iostream>usingnamespacestd;inta=3;intmain(){floatb;b=4.5;cout<<a<<b;return0;}一個完整的C++程序:
程序應該包括數(shù)據(jù)描述(由聲明語句來實現(xiàn))和數(shù)據(jù)操作(由執(zhí)行語句來實現(xiàn))。數(shù)據(jù)描述主要包括數(shù)據(jù)類型的聲明、函數(shù)和變量的定義、變量的定義和初始化等。數(shù)據(jù)操作的任務是對已提供的數(shù)據(jù)進行處理。C++程序中最小的獨立單元是語句。語句可分為以下4種:⑴聲名語句例如:inta,b;⑵執(zhí)行語句①控制語句,完成一定的控制功能。C++有9種控制語句,即
if()~else~for()~while()~do~while()switchcontinuebreakgotoreturn②函數(shù)和流對象調(diào)用語句。例如:max(a,b);cout<<x<<endl;③表達式語句。在一個表達式的后面加上一個分號構成的語句。例如:i=i+1;
一個語句必須在最后出現(xiàn)分號,分號是語句不可缺少的一部分。⑶空語句只有一個分號的語句,它什么也不做。例如:;⑷復合語句用{}括起來的一些語句為復合語句。例如:
{z=x+y;if(z>100)z=z-100;cout<<z;}注意:復合語句中最后一個語句的分號不能省略。
輸入和輸出并不是C++語言中的正式組成成分。C和C++本身都沒有為輸入和輸出提供的專門的語句結構。在C語言中,輸入和輸出是通過調(diào)用scanf函數(shù)和printf函數(shù)來實現(xiàn)的;在C++語言中是通過調(diào)用輸入輸出流庫中的流對象cin和cout來實現(xiàn)。也就是說輸入輸出不是由C++本身定義的,而是在編譯系統(tǒng)提供的I/O庫中定義的。3.3C++的輸入與輸出
C++的輸出和輸入是用“流”的方式實現(xiàn)的?!傲鳌笔侵竵碜栽O備或傳給設備的一個數(shù)據(jù)流。數(shù)據(jù)流是由一系列字節(jié)組成,這些字節(jié)是按進入“流”的順序排列的。cout是輸出流對象名,cin是輸入流對象名,“<<”是流插入運算符,作用是將需要輸出的內(nèi)容插入到輸出流中,默認的輸出設備是顯示器;“>>”是流提取運算符,作用是從默認輸入設備(一般為鍵盤)的輸入流中提取若干字節(jié)送到計算機內(nèi)存中指定的變量。
有關流對象cout、cin和流運算符的定義等信息都存放在C++的輸入輸出流文件中,因此要在程序使用cout、cin和流運算符,就必須使用預處理命令把頭文件iostream包含到本文件中,即
#include<iostream>
雖然cout和cin不是C++本身提供的語句,不過為了敘述方便,常將cin和“>>”實現(xiàn)輸入的語句稱為輸入語句或cin語句,將cout和“<<”實現(xiàn)輸出的語句稱為輸出語句或cout語句。3.3.1輸入流與輸出流的基本操作cout語句的一般格式:
一個cout語句可以分寫成若干行,如
cout<<“ThisisaC++program.”<<endl;也可寫成多個cout語句,即cout<<“Thisis”;cout<<“aC++”;cout<<“program.”;cout<<endl;可寫成
cout<<“Thisis”<<“aC++”<<“program.”<<endl;cout<<表達式1<<表達式2<<……<<表達式n;
注意:不能用一個插入運算符“<<”插入多個輸出項,如下面寫法是錯誤的:
cout<<a,b,c;
用cout輸出時,用戶不必通知計算機按何種類型輸出,系統(tǒng)會自動判別輸出數(shù)據(jù)的類型,使輸出的數(shù)據(jù)按相應的類型輸出。cin語句的一般格式:
與cout語句類似,一個cin語句可以分寫成若干行。如
cin>>a>>b>>c>>d;
cin>>表達式1>>表達式2>>……>>表達式n;可寫成
cin>>a>>b>>c>>d;也可寫成多個cin語句,即cin>>a;cin>>b;cin>>c;cin>>d;以上情況均可從鍵盤輸入:1234↙也可分多行輸入數(shù)據(jù):1↙
23↙
4↙
在用cin輸入時,系統(tǒng)會根據(jù)變量的類型從輸入流中提取相應長度的字節(jié)。如
charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;如果輸入:123456.78↙相當于:c1=‘1’,c2=‘2’,a=34,b=56.78
系統(tǒng)把空格作為數(shù)據(jù)間的分隔符,不予提取。因此,不能用cin語句把空格字符和回車換行符(或任何其他鍵盤上的字符)輸入給字符變量。也可按下面格式輸入:123456.78↙注意:在輸入數(shù)據(jù)時,要按相應的格式輸入,否則容易出錯。3.3.2在輸入流與輸出流中使用控制符控制符
作用dec數(shù)值數(shù)據(jù)采用十進制hex數(shù)值數(shù)據(jù)采用十六進制oct數(shù)值數(shù)據(jù)采用八進制setfill(c)填充字符c,c可以是字符常量或變量setprecision(n)設置浮點數(shù)的精度setw(n)設置字段寬度為n位setiosflags(ios::fixed)設置浮點數(shù)以固定的小數(shù)位數(shù)顯示setiosflags(ios::scientific)設置浮點數(shù)以科學記數(shù)法顯示setiosflags(ios::left)輸出數(shù)據(jù)左對齊setiosflags(ios::right)輸出數(shù)據(jù)右對齊setiosflags(ios::skipws)忽略前導的空格setiosflags(ios::uppercase)數(shù)據(jù)以16進制形式輸出時字母以大寫表示setiosflags(ios::lowercase)數(shù)據(jù)以16進制形式輸出時字母以小寫表示setiosflags(ios::showpos)輸出正號時給出“+”號setiosflags(ios::showpoint)顯示小數(shù)點注意:如果使用控制符,在程序單元開頭除了要加iostream頭文件外,還要加iomanip頭文件。
十六進制、八進制和十進制這三個控制符都是在iostream定義的,所以無需加入頭文件iomanip。例:輸出雙精度數(shù)。
doublea=123.456789012345;cout<<a;cout<<setprecision(9)<<a;cout<<setprecision(6);cout<<setiosflags(ios::fixed)<<a;cout<<setprecision(8)<<a;⑥cout<<setiosflags(ios::scientific)<<a;⑦cout<<setprecision(4)<<a;123.457123.456789恢復默認精度6123.456789123.456789011.23456789e+0021.2346e+002例:輸出整數(shù)。
intb=123456;cout<<b;cout<<hex<<b;cout<<setiosflags(ios::uppercase)<<b;cout<<setw(10)<<b<<‘,’<<b;cout<<setfill(‘*’)<<setw(10)<<b;⑥cout<<dec<<setiosflags(ios::showpos)<<b;1234561e240-----1E240,1E240*****1E240+1234561E240例各行小數(shù)點對齊
#include<iostream>#include<iomanip>usingnamespacestd;intmain(){doublea=123.456,b=3.14159,c=-3214.67;cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setfill(‘*’)<<setprecision(2);cout<<setw(10)<<a<<endl;cout<<setw(10)<<b<<endl;cout<<setw(10)<<c<<endl;return0;}輸出如下:****123.46******3.14**-3214.67
在使用setw(n)時要注意:①如果一個輸出量需要比setw(n)確定的字符數(shù)更多的字符,則該輸出量將使用它所需要的寬度。例如:
floatamount=3.14159;cout<<setw(4)<<amount<<endl;
其運行結果為3.14159。它并不按4位寬度,而是按實際寬度輸出。②setw(n)僅僅影響下一個數(shù)值輸出,換句話說,使用setw設置的間隔方式并不保留其效力。例如:
cout<<setw(8)<<10<<20<<endl;
運行結果為
------1020
運行結果中的下劃線表示空格整數(shù)20并沒有按寬度8輸出。setw()的默認寬度為0,意思是按輸出數(shù)值表示的寬度輸出,所以20就緊挨10了。3.3.3用getchar和putchar函數(shù)進行字符的輸入和輸出
除了用cin和cout語句輸入和輸出字符外,C++還保留了C語言中用于輸入和輸出單個字符的函數(shù),常用的有getchar和putchar函數(shù)。1.putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個字符。putchar(c);例如
例輸出單個字符。
#include<iostream>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;}輸出如下:BOYBOY可以看出,putchar不但可以輸出普通字符,還可以輸出轉義字符。2.getchar函數(shù)(字符輸入函數(shù))getchar函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設備)輸入一個字符。getchar函數(shù)沒有參數(shù),其一般形式為getchar()例輸出單個字符。
#include<iostream>usingnamespacestd;intmain(){charc;c=getchar();putchar(c+32);putchar(‘\n’);return0;}輸入:A↙輸出:a
注意:getchar函數(shù)只能接收一個字符。getchar函數(shù)所得到的字符可以賦給一個字符變量或整型變量,也可以不賦給任何變量,作為表達式的一部分。例如putchar(getchar()+32);也可用cout輸出getchar函數(shù)得到字符的ASCII的值:cout<<getchar();輸出結果為97,因為getchar()讀入的是字符的ASCII碼。cout<<(c=getchar());它的輸出結果為字母’a’,因為輸出的是字符變量c的值。輸入:a↙3.3.4用scanf和printf函數(shù)進行輸入和輸出
在C語言中用scanf函數(shù)進行輸入,用printf函數(shù)進行輸出。C++保留了這一用法。scanf函數(shù)一般格式為printf函數(shù)一般格式為scanf(格式控制,輸入列表)printf(格式控制,輸出列表)例用scanf和printf函數(shù)進行輸入和輸出。#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;}運行情況如下:12A67.98↙a=12,b=67.980003,c=A3.4編寫順序結構的程序
程序的基本控制結構有三種:順序結構、選擇結構和循環(huán)結構。其中順序結構的程序是最簡單的。這種結構的程序是從上到下順序執(zhí)行各語句。即先執(zhí)行A語句,再執(zhí)行B語句。AB
例求一元二次方程式的根。a,b,c的值在運行時由鍵盤輸入。它們的值滿足。眾所周知:這就是求x1,x2的算法。根據(jù)求解算法可以編寫C++程序如下:#include<iostream>#include<cmath>usingnamespacestd;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;}運行情況如下:4.58.82.4↙x1=-0.327612x2=-1.177943.5選擇結構和if語句if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結果(真或假)決定執(zhí)行給出的兩種操作之一。3.5.1
if語句的3種形式1.if(表達式)語句例:if(x>y)cout<<x;if(表達式)語句1else語句2例:if(x>y)cout<<x;elsecout<<y;3.if(表達式1)語句1
elseif(表達式2)語句2
elseif(表達式3)語句3
…
else
語句n例:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;說明:
⑴3種形式的if語句都是由一個入口進來,經(jīng)過對“表達式”的判斷,分別執(zhí)行相應的語句,最后歸到一個共同的出口。這種形式的程序結構稱為選擇結構。
⑵3種形式的if語句中在if后面都有一個用括號括起來的表達式,它是程序編寫者要求程序判斷的“條件”,一般是邏輯表達式或關系表達式。
⑶
在if語句中,每個內(nèi)嵌語句都要有一個分號。else是if語句中的子句,不能作為獨立的語句單獨使用,必須與if配對使用。
⑷
在if和else后面可以只含一個內(nèi)嵌的語句,也可以有多個語句,此時用花括號“{}”將幾個語句括起來成為一個復合語句。3.5.2
if語句的嵌套
在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式如下:
注意if與else的配對關系。else總是與它上面最近的、且未配對的if配對。例如
如果if與else的數(shù)目不一樣,為了實現(xiàn)程序設計者的企圖,可以加花括號來確定配對關系。例如關系清楚,不會出錯。if與else的實際配對關系與程序設計者的意圖不符,容易出現(xiàn)錯誤。3.6多分支選擇結構和switch語句
實際問題中常常需要用到多分支的選擇。例如,學生成績的分類(90分以上為‘A’等,80~89為‘B’等,70~79為‘C’等…);還有工資統(tǒng)計分類;銀行存款分類等。用嵌套的if語句可以處理,但如果分支較多,則嵌套的if語句層數(shù)多,程序就會冗長且可讀性降低。C++提供switch語句即多分支選擇語句,用來實現(xiàn)多分支選擇結構。它的一般形式如下:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2┆case常量表達式n:語句ndefault:語句n+1}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”;}例如,按考試成績的等級打印出百分制分數(shù)段。說明:
⑴switch后面括號內(nèi)的“表達式”的值只能是整型、字符型、枚舉型。例如下面寫法是錯誤的。
⑵
當switch表達式的值與某一個case子句中的常量表達式的值相匹配時,就執(zhí)行此case子句中的內(nèi)嵌語句,若所有的case子句中的常量表達式的值都不能與switch表達式的值匹配,就執(zhí)行defaulf子句的內(nèi)嵌語句。floatf=4.0switch(f) //error{//...}
⑶
每一個case表達式的值必須互不相同,否則就會出現(xiàn)互相矛盾的現(xiàn)象。例如
⑷
各個case和default的出現(xiàn)次序不影響執(zhí)行結果。case'A':cout<<''thisisA\n'';csae65:cout<<''thisis65\n''; //error:'A'等值于65……
因此,應該在執(zhí)行一個case子句后,使流程跳出switch結構,即終止switch語句的執(zhí)行。可以用一個break語句達到此目的。將上面的switch結構改寫如下:switch(grade){case‘A’:cout<<“85~100\n”;break;case‘B’:cout<<“70~84\n”;break;case‘C’:cout<<“60~69\n”;break;case‘D’:cout<<“<60\n”;break;default:cout<<“error\n”;}最后一個子句(default)可以不加break語句。
⑸
執(zhí)行完一個case子句后,流程控制轉移到下一個case子句繼續(xù)執(zhí)行?!癱ase常量表達式”只是起語句標號作用,并不是在該處進行判斷。加break語句后的執(zhí)行流程圖如下。⑹
每個case分支可以有多條語句,但不必用{}。
⑺
多個case可以共用一組執(zhí)行語句。例如
case‘A’:
case‘B’:
case‘C’:cout<<“60~69\n”;break;
……3.7編寫選擇結構的程序【例】輸入一個年份,判斷是否閏年。
分析:閏年的年份可以被4整除而不能被100整除,或者能被400整除。
用邏輯變量leap表示被測試的年份是否為閏年。若是閏年,令leap=true(真);若不是閏年,則令leap=false(假)。最后根據(jù)leap的結果,決定輸出的信息。
源程序:
#include<iostream>usingnamespacestd;intmain(){intyear; boolleap; cout<<“pleaseenteryear:"; cin>>year; if((year%4==0&&year%100!=0)||(year%400==0))leap=true;elseleap=false;if(leap)cout<<year<<"isaleapyear."<<endl; elsecout<<year<<"isnotaleapyear"<<endl;return0;}
程序運行結果為
pleaseenteryear:20002000isaleapyearif(year%4==0){if(year%100==0){if(year%400==0)leap=true;elseleap=false;}elseleap=true;}elseleap=false;上面程序中的判斷語句可改寫成下面的if語句:if(year%4!=0)leap=false;elseif(year%100!=0)leap=true;elseif(year%400!=0)leap=false;elseleap=true;還可改寫成下面的if語句:【例】運輸公司對用戶計算運費。路程(s)越遠,每公里運費越低。標準如下:
S<250㎞沒有折扣
250≤S<5002%折扣
500≤S<10005%折扣
1000≤S<20008%折扣
2000≤S<300010%折扣
3000≤S15%折扣
設每公里每噸貨物的基本運費為p,貨物重為w,距離為s,折扣為d,則總運費的計算公式為
f=p*w*s*(1-d)分析:#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;}運行情況如下:pleaseenterp,w,s:10020300freight=588000【例】輸入一個1~3的整數(shù),來計算相應圖形的面積(1-圓形,2-長方形,3-正方形)。分析:本題需要根據(jù)輸入的數(shù)字決定相應面積的計算,由于數(shù)字1~3分別對應圓形、長方形和正方形,因此需要運用多重分支結構。但是每次判斷的都是輸入的整數(shù),所以選用switch語句最為適宜。
#include<iostream>usingnamespacestd;constdoublePI=3.1416;intmain(){intiType; doubleradius,a,b,area; cout<<"圖形的類型為?(1-圓形,2-長方形,3-正方形):"; cin>>iType; switch(iType) { case1: cout<<"圓的半徑為:"; cin>>radius; area=PI*radius*radius; cout<<"面積為:"<<area<<endl; break;case2: cout<<"矩形的長為:"; cin>>a; cout<<"矩形的寬為:"; cin>>b; area=a*b; cout<<"面積為:"<<area<<endl; break;case3: cout<<"正方形的邊長為:"; cin>>a; area=a*a; cout<<"面積為:"<<area<<endl; break; default: cout<<"不是合法的輸入值!"<<endl; }return0;}程序運行結果為圖形的類型為?(1-圓形,2-長方形,3-正方形):1圓的半徑為?:2面積為12.56643.8.1用while語句構成循環(huán)
while語句的一般形式如下:
while(表達式)語句
while語句的執(zhí)行流程圖如右圖所示。3.8循環(huán)結構和循環(huán)語句
【例】求,即1+2+3+…+100。分析算法:#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}cout<<“sum=”<<sum<<endl;return0;}運行結果為sum=5050⑴循環(huán)體如果包含一個以上的語句,應該用花括號括起來,以復合語句形式出現(xiàn)。⑵應用while語句時,一般來說在循環(huán)體中,應該包含有使循環(huán)趨向于結束的語句,否則便會造成死循環(huán)。
注意:3.8.2用do-while語句構成循環(huán)dowhile語句的特點是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。do-while語句的一般形式為do
語句while(表達式);do-while語句的執(zhí)行流程圖如右圖所示?!纠坑胐o-while語句編程,求。分析算法:#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);cout<<“sum=”<<sum<<endl;return0;}do-while與while語句都是實現(xiàn)循環(huán)結構的,兩者的區(qū)別如下:
while語句先判斷表達式的值,當值為true時,再執(zhí)行循環(huán)體;而do-while語句是先執(zhí)行循環(huán)體,再判斷表達式的值。在大多數(shù)情況下,如果循環(huán)控制條件和循環(huán)體中的語句都相同,while循環(huán)和do-while循環(huán)的結果是相同的。但是如果一開始循環(huán)控制條件就為假,這兩種循環(huán)的執(zhí)行結果就不同了,do-while循環(huán)至少執(zhí)行一次循環(huán)體,while循環(huán)卻一次都不執(zhí)行。請同學們分析下面兩個程序在輸入的i值大于10和不大于10的情況下的運行結果。程序l:#include<iostream>usingnamespacestd;intmain(){inti,sum=0;cin>>i;while(i<=10){sum+=i;i++;}cout<<"sum="<<sum<<endl;return0;}
程序2:#include<iostream>usingnamespacestd;intmain(){inti,sum=0;cin>>i;do{sum+=i;i++;}while(i<=10);cout<<"sum="<<sum<<endl;return0;}3.8.3用for語句構成循環(huán)C++中for語句的使用最為廣泛和靈活,它既可以用于循環(huán)次數(shù)已經(jīng)確定的情況,也可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結束條件的情況,它完全可以代替while語句。for語句的一般形式為for(表達式1;表達式2;表達式3)語句for語句的執(zhí)行流程圖如右圖所示。for語句最簡單的形式也是最容易理解的形式如下:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句例如for(i=1;i<=100;i++)sum=sum+i;相當于以下語句:i=1;while(i<=100){sum=sum+i;i++;}顯然,用for語句簡單、方便。關于for語句的說明:
⑴for語句的一般格式中的“表達式1”可以省略,此時應在for語句之前給循環(huán)變量賦初值。注意:省略表達式1時,其后的分號不能省略。例如:
⑵
如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認為表達式2始終為真。注意:省略表達式2時,其后的分號不能省略。例如:相當于
⑷
可以省略表達式1和表達式3,只有表達式2,即只給循環(huán)條件。例如:
⑶
表達式3也可以省略,但此時程序設計者應另外設法保證循環(huán)能正常結束。例如:相當于
⑹
表達式1可以是設置循環(huán)變量初值的賦值表達式,也可以是與循環(huán)變量無關的其他表達式。例如:⑸3個表達式都可省略。例如:相當于表達式3也可以是與循環(huán)控制無關的任意表達式。
表達式1和表達式3可以是一個簡單的表達式,也可以是逗號表達式。例如:
⑺
表達式一般是關系表達式(如i<=100)或邏輯表達式(如a<b&&x<y),但也可以是數(shù)值表達式或字符表達式,只要其值為非零,就執(zhí)行循環(huán)體。例如:執(zhí)行情況如右圖所示。
其作用是每讀入一個字符后立即輸出該字符,直到輸入一個“換行”為止。
該for語句的循環(huán)體為空語句,把本來要在循環(huán)體內(nèi)執(zhí)行的內(nèi)容放在表達式3中。建議:不要把與循環(huán)控制無關的內(nèi)容放到for語句中。3.8.4幾種循環(huán)的比較⑴3種循環(huán)都可以用來處理同一問題,一般情況下可以互相代替。⑵while和do-while循環(huán)是在while后面指定循環(huán)條件的,在循環(huán)體中應包含使循環(huán)趨于結束的語句。⑶用while和do-while循環(huán)時,循環(huán)變量初始化的操作應在while和do-while語句之前完成。而for語句可以在表達式1中實現(xiàn)循環(huán)變量的初始化。for循環(huán)可以在表達式3中包含使循環(huán)趨于結束的條件,甚至可以將循環(huán)體中的操作全部放到表達式3中。3.9循環(huán)的嵌套
一個循環(huán)體內(nèi)可以包含另一個完整的循環(huán)結構,稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以再嵌套循環(huán),構成多層循環(huán)。while、do-while、和for三種循環(huán)語句可以互相嵌套。例如:3.10break語句和continue語句break語句的作用是使流程從循環(huán)體內(nèi)跳出循環(huán)體,即提前結束循環(huán),接著執(zhí)行循環(huán)體下面的語句。
在switch結構中,break語句使流程跳出switch結構,繼續(xù)執(zhí)行switch語句下面的語句。break語句還可用于循環(huán)體內(nèi)。break語句的一般形式為break;
注意:break語句只能用于循環(huán)語句和switch語句內(nèi),不能單獨使用或用于其他語句中。3.10.1break語句continue語句的一般形式為continue;continue語句的作用是結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。continue語句和break語句的區(qū)別是:continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。而break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。例如:3.10.2continue語句
此程序的執(zhí)行流程圖如右圖所示。
此程序的執(zhí)行流程圖如右圖所示?!纠繌逆I盤輸入多個字符,統(tǒng)計小寫字符的個數(shù),直到遇到“$”字符結束。#include<iostream>usingnamespacestd;intmain(){charch;intsum=0;
分析:程序中字符的輸入及統(tǒng)計語句肯定應在循環(huán)體中,順序也應當是先輸入后判斷。若輸入的字符為“$”字符,則應用break語句結束循環(huán),否則,一直循環(huán)下去。運行結果為輸入:edrftgu$輸出:sum=7while(true){cin>>ch;if(ch=='$')break;if(ch>='a'&&ch<='z')sum++;}cout<<"sum="<<sum<<endl;return0;}
【例】找出10~100之間不能被2和3整除的數(shù)。
分析:該問題是固定范圍的求解,所以用for循環(huán)最好。在循環(huán)體中判斷是否為要找的數(shù),如果是則輸出,如果不是則應用continue語句結束本次循環(huán),進行下一個數(shù)的循環(huán)判斷。#include<iostream>usingnamespacestd;intmain(){intm;intsum=0;
for(m=10;m<=100;m++){if(m%3==0||m%2==0)continue;cout<<m<<'\t';sum++;if(sum%10==0)cout<<endl;}return0;}運行結果為1113 171923 25 293135 374143 474953 55 596165 677173 777983 85 899195 973.10.3goto語句goto語句的作用是使程序的執(zhí)行流程跳轉到語句標號所指定的語句。goto語句的一般形式為goto<語句標號>
其中“語句標號”是用來表示語句的標識符,放在語句的最前面,并用冒號(:)與語句分開。
注意:goto語句的使用會破壞程序的結構,應該少用或不用。3.10編寫循環(huán)結構的程序【例】用下面公式求的近似值。直到最后一項的絕對值小于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;s=-s;t=s/n;}pi=pi*4;cout<<“pi=”<<setiosflag(ios::fixed)<<setprecision(6)<<pi<<endl;return0;}運行結果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 政府采購合同協(xié)議的解除條件和程序
- 多功能粘合劑購銷合同
- 門票預售合同補充協(xié)議
- 正規(guī)借款合同模板范文
- 借條協(xié)議書示例
- 中移合作合同解讀
- 中小學開學第一課352
- 高中生化學元素周期表故事征文
- 二手房房屋買賣合同協(xié)議
- 部編版《道德與法治》六年級下冊第3課《學會反思》精美課件
- 從業(yè)務骨干到管理者
- 新概念力學教案
- GB/T 13023-2008瓦楞芯(原)紙
- Unit 3 Healthy eating Reading and thinking說課課件【知識精講+拓展訓練】高中英語人教版選擇性必修第二冊
- 2023年江蘇省高等教育自學考試旅游資源規(guī)劃與開發(fā)試卷共八套都會通過是沒問題的不信試試看
- SV300呼吸機介紹及基本操作課件
- 清洗消毒及滅菌效果監(jiān)測標準-課件
- 2021國開電大操作系統(tǒng)形考任務 實驗報告-進程管理實驗
- DLT50722023年火力發(fā)電廠保溫油漆設計規(guī)程
- 后勤管理人員試題及答案
- 山東省日照市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
評論
0/150
提交評論