




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C++程序設(shè)計教程(第二版)第二章
基本編程語句
Chapter2
BasicProgrammingStatements計算機與信息工程學(xué)院
徐素錦4/18/20231第二章基本編程語句說明語句(DeclarativeStatements)條件語句(ConditionStatements)循環(huán)語句(LoopStatements)循環(huán)設(shè)計(LoopDesigns)輸入輸出語句(Input/OutputStatements)轉(zhuǎn)移語句(MoveStatements)再做循環(huán)設(shè)計(MoreLoopDesigns)4/18/202322.1說明語句(DeclarativeStatements)編程是要完成計算的,要計算就會有數(shù)據(jù)(整數(shù)、小數(shù)、字符串或更復(fù)雜的數(shù)據(jù))的進出,這個過程中需要把數(shù)據(jù)保存到某個存儲空間中,因此要對存儲空間進行說明。C++用名稱來代表存儲空間。兩類名稱:變量/常量:由C++內(nèi)部數(shù)據(jù)類型定義;對象/常對象:由外部(自定義)數(shù)據(jù)類型定義。4/18/20233要使用名稱來存放數(shù)據(jù),必須先說明名稱說明語句分為定義語句和聲明語句:定義語句:在說明名稱的同時,還給名稱分配了存儲空間聲明語句:只是說明了名稱,并沒有給名稱分配存儲空間,還必須通過定義語句分配空間。(在復(fù)雜的程序結(jié)構(gòu)中為了說明一個名稱可以在各處共享,而又要避免多處定義造成的空間沖突)4/18/20234定義變量的目的:創(chuàng)建一個所需大小的實體空間給變量名;說明變量的表示范圍;說明變量可以進行的運算等。變量定義
4/18/20235變量定義
變量由變量名、數(shù)據(jù)類型和值三部分組成,是可尋址的,也就是說,能夠通過內(nèi)存地址讀寫變量的數(shù)值。因此,對于每個變量來說,都有兩個值與其相關(guān)聯(lián):(1)變量的數(shù)值;(2)變量的地址?!?243078124307912430801243081124308212430831243084124308512430861243087124308812430891243090內(nèi)存空間內(nèi)存地址存儲單元(1Byte)例:inta=12;12變量a的地址變量a的數(shù)值4/18/20236變量定義格式:例如:
inta;doubled=3.5;staticinta2=12;注意:變量必須先定義后使用!變量的定義會引起內(nèi)存的分配,因此每個變量只能被定義一次,多次定義將導(dǎo)致編譯錯誤。[<存儲類型>]<數(shù)據(jù)類型><變量名>[=<初始值>];4/18/20237變量名的命名規(guī)則
①由數(shù)字、字母和下劃線組成;②必須以字母或下劃線開頭;③對字母大小寫敏感(即區(qū)分大小寫字母);④C++的關(guān)鍵字不能用作變量名;⑤在同一作用域內(nèi)是唯一的。例如,下面的變量定義將導(dǎo)致編譯錯誤:char89_name;//變量名不能以數(shù)字開頭boolis-loan;//中劃線不能出現(xiàn)在變量名中,
//字符間的連接應(yīng)該采用下劃線intclass;//class是關(guān)鍵字,不能用做變量名4/18/20238變量的初始化
C++支持下面4種形式的變量初始化:(1)顯式賦值,在定義變量時,通過賦值運算符“=”為變量提供初始值。例如:
intbuffer=1024;//變量buffer被初始化為1024(2)隱式賦值,在定義變量時,通過括號“(
)”提供初始值。例如:
intbuffer(1024);//變量buffer被初始化為1024(3)每一種內(nèi)嵌的數(shù)據(jù)類型都支持一個構(gòu)造函數(shù),能夠?qū)⒆兞砍跏蓟癁?。例如:
intbuffer=int();//變量buffer被初始化為0(4)類對象是通過構(gòu)造函數(shù)來提供初始化的。4/18/20239格式:
變量=表達式;
說明:
①”=”是賦值運算符;
②賦值運算符左邊只能是變量,不能為常量或函數(shù)調(diào)用;
③賦值運算符右邊的表達式可以是常量、變量、函數(shù)調(diào)用或者它們的組合。
例:f_Val=3;
x=x+1;
k=i*j;
a2=a1+area(35.6)+2.1;
變量的賦值4/18/202310例:求球體表面積-
f0201.cpp,#include<iostream>usingnamespacestd;intmain(){
doubleradius;//變量定義,沒有初始化
cout<<“Pleaseinputradius:“;
cin>>radius;
doubleresult=radius*radius*3.14*4;
cout<<“Theresultis“<<result<<“\n“;}4/18/202311函數(shù)(過程)說明:函數(shù):把相關(guān)的程序語句放在一起,完成特定的功能,并給這些語句起一個名字。求解中需要通過函數(shù)調(diào)用來實施求解時,便要對函數(shù)的性質(zhì)進行說明,說明其返回類型,參數(shù)類型,參數(shù)個數(shù)。4/18/202312
函數(shù)說明分函數(shù)聲明和函數(shù)定義兩種:
函數(shù)聲明是說明函數(shù)的名字,函數(shù)的返回類型,以及函數(shù)的參數(shù)和參數(shù)個數(shù).
格式:
<返回類型><函數(shù)名>(<參數(shù)表>);
例如:
doublearea(doublera);
intadd(inta,intb);
stringcatch(string,char);4/18/202313
函數(shù)定義是在函數(shù)聲明的基礎(chǔ)上,對整個實現(xiàn)過程進行詳細(xì)定義.
格式:
<返回類型><函數(shù)名>(<參數(shù)表>)
{
<若干條語句>
return函數(shù)的返回值;
}
例如:
doublearea(double
ra){
doubles=ra*ra*3.14;
returns;
}4/18/202314函數(shù)調(diào)用:就是使用函數(shù)名字;以便完成相應(yīng)的功能。使用名字前必須清楚名字的性質(zhì),所以必須先對函數(shù)進行聲明,后調(diào)用!運行程序時,會涉及到被調(diào)用函數(shù)的執(zhí)行,所以凡是被調(diào)用的函數(shù)都必須有函數(shù)定義,不管該定義在程序的什么位置.4/18/202315例如:
#include<iostream>
usingnamespacestd;
doublesphere();//聲明
intmain(){
doubleresult=sphere();//調(diào)用
cout<<“area:“<<result<<“\n”;
}
doublesphere(){//定義
cout<<“Pleaseinputradius:“;
doubler;cin>>r;
returnr*r*3.14;
}4/18/2023162.2
條件語句(ConditionStatements
)一、if語句的兩種形態(tài):
①
if(條件表達式)
語句;例:
if(a>b)
cout<<a<<endl;條件語句否是4/18/202317②
if(條件表達式)
語句1;
else
語句2;例:if(a>=b)
cout<<a<<endl;else
cout<<b<<endl;條件語句1否是語句24/18/202318說明:1.括號必須要。2.If條件后面的語句若不止一條,要用花括號包成語句塊。3.一個變量,一個定義語句或賦值語句都可以作為if語句的條件4.當(dāng)條件表達式的值為0時表示假,非0時表示真例如:if(s)cout<<“hello”;if(inta=b)
cout<<a<<endl;a=a+6;//error4/18/202319若分支“語句”之一是if語句,就是if語句嵌套。例如,輸入兩個整數(shù),比較兩個數(shù)的大小。
#include<iostream>usingnamespacestd;
intmain(){
int
x,y;
cout<<"Enterxandy:";
cin>>x>>y; if(x!=y) if(x>y)
cout<<"x>y"<<endl; else
cout<<"x<y"<<endl; else
cout<<"x=y"<<endl; }二.if語句的嵌套4/18/202320注意:if嵌套中的二義性問題例:intx=-20;if(x>=0) if(x<50)
cout<<“ok\n”;else
cout<<“notok\n”;
解釋一:intx=-20;if(x>=0){ if(x<50)
cout<<“ok\n”;else
cout<<“notok\n”;}解釋二:intx=-20;if(x>=0){ if(x<50)
cout<<“ok\n”;}else
cout<<“notok\n”;4/18/202321if…else語句成對的規(guī)則是:“就近原則”;C++規(guī)定:else總是和離它最近的還沒有配對的可見的if匹配。
4/18/202322例:
if(條件1)
if(條件2)
{ if(條件3) 語句1;
}
else
語句2;
注:else會和第2個if匹配,第3個if對else不可見。4/18/202323條件運算符:
?:
條件表達式:
表達式1?表達式2:表達式3
運算規(guī)則:如果表達式1為“真”,整個表達式的值取表達式2的值,否則取表達式3的值。相當(dāng)于:三.條件表達式if(表達式1)
表達式2;else
表達式3;4/18/202324例:①if(x>0&&x<50)cout<<“ok\n”;elsecout<<“notok\n”;可以表示為:(x>0&&x<50)?cout<<“OK\n”:cout<<“NotOk\n”;或者:cout<<(x>0&&x<50?“ok\n”:“notok\n”);cout<<(x>0&&x<50?“”:“not”)<<“ok\n”;
//必須有括號!4/18/202325②對于
if(x) a=327981; else b=327981;
可表示為:
x?a=327981:b=327981;
如果a和b為同類型,則還可以:
(x?a:b)=327981;//作左值,括號不能省
y=(x?a:b);//此處的圓括號可以去掉
y=x?a:b;4/18/202326intx,a,b;x=a=b=1;x?a:b=2;cout<<“a=”<<a<<endl<<“b=”<<b<<endl;③下面兩個程序塊分別輸出什么結(jié)果?intx,a,b;x=a=b=1;(x?a:b)=2;cout<<“a=”<<a<<endl<<“b=”<<b<<endl;if(x)a;elseb=2;if(x)a=2;elseb=2;結(jié)果:a=1b=1結(jié)果:a=2b=14/18/202327一般形式:
switch(表達式){case常量表達式1:語句1;break;case常量表達式2:語句2;break;//… case常量表達式n:語句n;break; default:語句n+1;
}四、switch語句(多分支選擇語句)4/18/202328例如:根據(jù)成績等級輸出百分制分?jǐn)?shù)段。char
grade;cin>>grade;switch(grade)
{case’A’:cout<<“90~100\n”;break;
case’B’:cout<<“80~89\n”;break;
case’C’:cout<<“70~79\n”;break;
case’D’:cout<<“60~69\n";break;
case’E’:cout<<“0~60\n”;break;
default:cout<<“error!\n”;
}4/18/202329說明:1.switch括號中的表達式只能是整型、字符型或枚舉型;且case后面的常量表達式的類型必須與其匹配eg:floatf=1.6;
switch(f){……}
//error:f是浮點型2.case值是語句標(biāo)號,每個case常量表達式的值必須互不相同3.break的作用是跳出switch語句,4.在每個分支都帶有break的情況下,case的次序不影響執(zhí)行結(jié)果4/18/2023305.多個case可以共用一組執(zhí)行語句例如:
case’A’:case’B’:case’C’:case’D’:cout<<“>60\n";break;
但是不能將值用逗號隔開,即
case‘A’,’B’,’C’,’D’:cout<<“>60\n”;break;6.default語句是可選的7.switch語句可以嵌套使用,“就近原則”4/18/202331
switch(整數(shù)表達式){casevalue1:
語句1;break;casevalue2:
語句2;break;…default:
語句n;}等價于:
if(整數(shù)表達式==value1)
語句1;elseif(整數(shù)表達式==value2)
語句2;…else
語句n;}switch語句和if語句相互彌補:注意:若測試一個整形變量取幾個不同的值,用switch語句比較好;如果是范圍測試或是實型數(shù)的比較判斷,用if語句比較好4/18/202332一、for循環(huán)語句一般形式:
for(表達式1;表達式2;表達式3){若干語句;}
可理解為:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量修正)
{
若干語句;
}循環(huán)前先求解每次執(zhí)行完循環(huán)體后求解非0時執(zhí)行循環(huán)體2.3循環(huán)語句(LoopStatements
)4/18/202333條件判斷循環(huán)體語句假真狀態(tài)修正循環(huán)初始狀態(tài)結(jié)束開始例1:for(inti=1;i<=10;i++)
cout<<”hello.\n”;循環(huán)初始狀態(tài)條件判斷狀態(tài)修正循環(huán)體語句4/18/202334i<=10Cout<<“hello.\n”假真i++;i=1;結(jié)束開始例1:for(inti=1;i<=10;i++)
cout<<”hello.\n”;循環(huán)初始狀態(tài)條件判斷狀態(tài)修正循環(huán)體語句4/18/202335例1:for(inti=1;i<=10;i++)
cout<<”hello.\n”;循環(huán)初始狀態(tài)條件判斷狀態(tài)修正循環(huán)體語句例2:
intsum=0;
for(inti=1;i<=100;i++){sum=sum+i;}
cout<<sum<<endl;i<=10Cout<<“hello.\n”假真i++;i=1;結(jié)束開始4/18/202336例1:for(inti=1;i<=10;i++)
cout<<”hello.\n”;循環(huán)初始狀態(tài)條件判斷狀態(tài)修正循環(huán)體語句例2:
intsum=0;
for(inti=1;i<=100;i++){sum=sum+i;}
cout<<sum<<endl;i<=100sum+=i;假真i++;i=1;sum=0;cout<<sum<<endl;4/18/202337對于for(表達式1;表達式2;表達式3)語句
說明:(1)表達式1可以省略。此時應(yīng)在for語句之前給循環(huán)變量賦初值。若省略表達式1,其后的分號不能省略。例如,求和運算:
intsum=0,i=1; for(;
i<101;i++)//分號不能省略
sum+=i;
//賦值縮寫4/18/202338(2)表達式2可以省略。這時候,需要在循環(huán)體中有跳出循環(huán)的控制語句。 例如,求和運算:
for(i=1;;i++){//分號不能省略
sum+=i; if(i>=100)break; }
等價于:
for(i=1;1;i++){ sum+=i; if(i>=100)break;
}//此處break表示退出循環(huán)。4/18/202339(3)表達式3可以省略。但此時程序員應(yīng)另外讓循環(huán)變量遞進變化,以保證循環(huán)能正常結(jié)束。
例如,求和運算:
intsum=0,i; for(i=1;i<101;){//分號不能省略
sum+=i;
i++; }sum+=i++;4/18/202340(4)表達式1和表達式3都可以省略。
例如,求和運算:
intsum=0,i=1; for(;i<=100;)//分號不能省略
sum+=i++;(5)三個表達式都可以省略。
例如,求和運算:
intsum=0,i=1; for(;;
){//分號不能省略
sum+=i++; if(i>=100)break; }4/18/202341(6)在表達式1中定義的循環(huán)變量只在for語句中有效;循環(huán)體可以為空。例如,求和運算:for(inti=1,sum=0;i<101;sum+=i++);//i在for語句之后就不能再使用//循環(huán)體是空語句,分號不能省略4/18/202342二、while循環(huán)語句因為并不是所有循環(huán)都有明顯的循環(huán)初始狀態(tài)和狀態(tài)修正的,所以,while循環(huán)是for循環(huán)的一種簡潔形式.
如,同樣的求和:intsum=0,i=1;while(i<=100)sum+=i++;cout<<sum<<endl;intsum=0,i=1;for(;i<=100;) sum+=i++;
cout<<sum<<endl;4/18/202343一般形式:while(表達式){循環(huán)體語句}
說明:
①先判斷條件再執(zhí)行;
②while后面的圓括號和圓括號中的表達式都必須有。表達式也可以是常量或常量表達式。 例:while(5){…//中間需要有跳出循環(huán)的控制語句
}
③循環(huán)體語句可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。4/18/202344表達式循環(huán)體語句(包含狀態(tài)修正)假真初始狀態(tài)結(jié)束開始while(
表達式
){
循環(huán)體語句;//包含狀態(tài)修正}注意:循環(huán)體被執(zhí)行0次或n次4/18/202345例:求1加到100的和。#include<iotream.h>usingnamespacestd;voidmain(){
inti=1;//循環(huán)變量初始化
intsum=0
;while(i<=100
)//循環(huán)繼續(xù)條件
{//循環(huán)體
sum=sum+i; ++i;//改變循環(huán)變量
}
cout<<"sum="<<sum<<endl;}4/18/202346一般形式:do{
循環(huán)體}while(條件表達式);其中必須含有改變條件表達式值的語句。執(zhí)行順序①先執(zhí)行循環(huán)體語句;
②后判斷條件,表達式為
true
時,繼續(xù)執(zhí)行循環(huán)體。注意:該語句后面的分號必須要有!三、do…while語句4/18/202347do{
循環(huán)體語句;//包含狀態(tài)修正}while(
表達式
);表達式循環(huán)體語句(包含狀態(tài)修正)假真初始狀態(tài)結(jié)束開始注意:循環(huán)體被執(zhí)行1次或n次4/18/202348while語句:先判斷再執(zhí)行表達式循環(huán)體語句(包含狀態(tài)修正)假真初始狀態(tài)結(jié)束開始表達式循環(huán)體語句(包含狀態(tài)修正)假真初始狀態(tài)結(jié)束開始dowhile語句:先執(zhí)行再判斷4/18/202349while語句條件判斷循環(huán)體語句(包含狀態(tài)修正)假真初始狀態(tài)結(jié)束開始條件判斷循環(huán)體語句(包含狀態(tài)修正)假真初始狀態(tài)結(jié)束開始dowhile語句條件判斷循環(huán)體假真狀態(tài)修正循環(huán)初始狀態(tài)結(jié)束開始for語句4/18/2023502.4循環(huán)設(shè)計
(LoopDesigns
)(1)簡單字符圖形的雙重循環(huán)
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM4/18/202351分析方法:(1)該圖形一共10行,每一行增加一個字符,所以,應(yīng)循環(huán)10次,每次輸出一行,其循環(huán)模式為:
for(inti=1;i<=10;++i){
輸出第i行
換行
}(2)行數(shù)、M的個數(shù)和循環(huán)變量i的關(guān)系行iM個數(shù)
111輸出第i行:
222for(intj=1;j<=i;j++)333cout<<“M”;444...1010
104/18/202352//f0204.cpp#include<iostream>usingnamespacestd;intmain(){
for(inti=1;i<=10;++i){
for(intj=1;j<=i;++j)cout<<"M";cout<<endl;
}}4/18/202353小節(jié):
通過雙循環(huán)輸出簡單字符圖形的模式外循環(huán):控制輸出的行數(shù)
for(inti=1;i<=N;i++){
輸出第i行;換行;
}內(nèi)循環(huán):控制每一行里具體字符的輸出
for(intj=1;j<=第i行的長度;j++){
…//逐字符輸出
}4/18/202354ASCII碼表碼值字符碼值字符碼值字符碼值字符0~32控制字符或通訊專用字符(不可見)34“46.92\0NUL(空值)35#47/93]1SOH(文頭)36$48~57‘0’~’9’94^4EOT(文尾)37%58:95_6ACK(確認(rèn))38&59;96`7BEL(響鈴)39‘60<97~122‘a(chǎn)’~’z’8BS(退格)40(61=123{10LF(換行)41)62>124|12FF(換頁)42*63?125}13CR(回車)43+64@126~32SP(空格)44,65~90‘A’~’Z’127DEL33!45-91[4/18/202355(2)
素數(shù)判定素數(shù)(也叫質(zhì)數(shù))定義1:除了1和它本身外沒有其他因子的自然數(shù)。定義2:只能被1和它本身整除的自然數(shù)。#include<iostream>usingnamespacestd;intmain(){cout<<"pleaseinputanumber:\n";intm;cin>>m;for(inti=2;i<m;++i)if(m%i==0){cout<<m<<"isn'taprime.\n";return1;}cout<<m<<"isaprime.\n";}4/18/202356(利用數(shù)學(xué)定律進行優(yōu)化)假設(shè)m不是素數(shù),則必有m=i×j
假定i≤j,則i2≤i×j=m≤j2
即i2≤m≤j2
即i≤√m≤j所以,m必定有一個不大于m平方根的因子,故判斷m是否為素數(shù),只要測試到m的平方根就可以了!
4/18/202357#include<iostream>#include<cmath>
//包含sqrt()usingnamespacestd;intmain(){
cout<<"pleaseinputanumber:\n";
intm;
cin>>m;doublesqrtm=sqrt(m*1.0);
//求平方根
for(inti=2;i<=sqrtm;++i)
if(m%i==0){
cout<<m<<"isn'taprime.\n";return1;}
cout<<m<<"isaprime.\n";}4/18/202358可以定義一個判斷m是否為素數(shù)的函數(shù):bool
isPrime(int
m){doublesqm=sqrt(m*1.0);
for(inti=2;i<=sqm;++i)
if(m%i==0)returnfalse;returntrue;}4/18/202359一、標(biāo)準(zhǔn)I/O流I/O控制流:輸入或輸出的字節(jié)序列(字符序列),在頭文件iostream.h中定義。操作符:<<
向輸出流“cout”中插入字符
cout:C++預(yù)定義的標(biāo)準(zhǔn)輸出設(shè)備
>>
從輸入流"cin"中抽取字符
cin
:C++預(yù)定義的標(biāo)準(zhǔn)輸入設(shè)備
作用:<<:用操作符"<<"右邊的內(nèi)容輸出到標(biāo)準(zhǔn)輸出設(shè)備上
>>
:用從標(biāo)準(zhǔn)輸入設(shè)備上所接收到的數(shù)據(jù)去更新操作符">>"右邊的對象2.5輸入輸出語句
(Input/OutputStatements
)
4/18/202360cout<<"HernameisJone\n";cout<<"theidis";cout<<2;cout<<endl;cout<<"HernameisJone\n"<<"theidis"<<2<<endl;inti;floatf;longL;cin>>i>>f>>L;1
2.168
314159例:4/18/202361二、流狀態(tài)通過流狀態(tài)控制輸出格式cout<<showpos<<12;//+12cout<<hex<<18<<”“<<showbase<<18;
//120x12cout<<hex<<255<<”“<<uppercase<<255;
//ffFFcout<<123.0<<”“<<showpoint<<123.0;
//123123.000cout<<(2>3)<<”“<<boolalpha<<(2>3);
//0falsecout<<fixed<<12345.678;//12345.678000cout<<scientific<<123456.678;
//1.234567e+054/18/202362取消流狀態(tài)的操作為:
noshowpos,noshowbase,nouppercase,
noshowpoint,noboolalphafixed,scientific,和一般顯示方式三者相互獨立,取消的方法是:
cout.unsetf(ios::fixed);cout.unsetf(ios::scientific);dec,oct,hex相互獨立;left,right相互獨立;4/18/202363帶參數(shù)的流狀態(tài):cout.width(int);//設(shè)置顯示寬度cout.fill(char);//設(shè)置填充字符cout.precision(int);//設(shè)置有效位數(shù)或精度注意:width(n)為一次性操作,即第二次顯示時將不再有效。默認(rèn)width(0),表示僅顯示數(shù)值。例如:cout.width(5);cout.fill(‘S’);cout<<23<<23;//輸出:SSS23234/18/202364在頭文件iomanip.h中定義了許多用于控制I/O流格式的控制符(對象)??梢灾苯訉⒖刂品迦肓髦?。即:在頭文件iomanip.h的支持下,還可以直接由<<操作。例:#include<iomanip>cout<<setw(6)<<setfill(‘$’)<<27<<27<<endl;//輸出:$$$$27274/18/202365
I/O流的常用控制符
控制符
描述
dec
設(shè)基數(shù)為10hex設(shè)基數(shù)為16
oct
設(shè)基數(shù)為8
setfill(c)設(shè)填充字符為c
setprecision(n)設(shè)顯示小數(shù)精度為n位
setw(n)設(shè)域?qū)挒閚個字符
setiosflags(ios::fixed)固定的浮點顯示
setiosflags(ios::scientific)指數(shù)表示
setiosflags(ios::left)左對齊
setiosflags(ios::right)右對齊
setiosflags(ios::skipws)忽略前導(dǎo)空白
setiosflags(ios::uppercase)16進制數(shù)大寫輸出4/18/202366例如;倒三角形字符圖形(P41)的輸出:方法1:#include<iostream.h>#include<iomanip.h>voidmain(){
for(intn=1;n<=10;n++)cout<<setfill('')<<setw(n)<<''<<setfill('M')<<setw(21-2*n)<<'M'<<endl;
}方法2:#include<iostream.h>voidmain(){for(intn=1;n<=10;n++)
cout<<string(n,‘’)+string(21-2*n,‘M’)+”\n”;}4/18/202367三、文件流的操作
文件流的輸入/出操作與標(biāo)準(zhǔn)輸入/出基本相同,只是需要以一定方式打開和關(guān)閉。文件打開的格式:
ifstreamfin(filename1,openmode=ios::in);
ofstream
fout(filename2,openmode=ios::out);注意:ifstream和ofstream是輸入/輸出文件流類,在fstream頭文件中聲明,使用時加#include<fstream>fin和fout是自定義的文件流名稱,分別對應(yīng)文件filename1和filename2
4/18/202368例f0211:#include<fstream>usingnamespacestd;intmain(){
ifstreammyin("a.txt");ofstreammyout("b.txt");for(stringstr;getline(myin,str);)myout<<str<<endl;}注意:當(dāng)省略文件路徑時,數(shù)據(jù)文件和程序應(yīng)該保存在同一個目錄下!4/18/202369輸入/輸出語句能返回操作狀態(tài)(true/false)
,所以判斷狀態(tài)就可以確定文件是否正常讀入,如getline(myIn,str)當(dāng)讀到文件尾或文件狀態(tài)異常時,便返回false,以使循環(huán)結(jié)束。if(cin>>a)
cout<<a;cin>>a;if(cin)
cout<<a;cin>>acout<<a;否是cincout<<a;否是cin>>a;4/18/202370if(getline(myIn,str))
cout<<str;Flag=getline(myIn,str);if(Flag)
cout<<str;getline(myIn,str)cout<<str;否是Flagcout<<str;否是Flag=getline(myIn,str);4/18/202371for(stringstr
;
getline(myIn,str)
;)myOut<<str<<endl;getline(myIn,str)myOut<<str<<endl;假真(空)stringstr;結(jié)束開始條件判斷循環(huán)體假真狀態(tài)修正循環(huán)初始狀態(tài)結(jié)束開始FlagmyOut<<str<<endl;假真stringstr;結(jié)束開始Flag=getline(myIn,str);4/18/202372例如:#include<iostream>usingnamespacestd;intmain(){for(inta;cin>>a;){cout<<a<<"";}}注意:在循環(huán)讀入數(shù)據(jù)時,常常將讀入操作放在循環(huán)的條件判斷上!4/18/202373#include<fstream>intmain(){ifstreammyIn("a.txt");ofstreammyOut("b.txt");for(stringstr;getline(myIn,str);)myOut<<str<<endl;ifstreammyIn2("c.mp3",ios::in|ios::binary);ofstreammyOut2("d.mp3",ios::out|ios::binary);for(stringstr;getline(myIn2,str);)myOut2<<str<<endl;ifstreammyIn3("d:\\doc\\e.wmv",ios::binary);ofstreammyOut3("d:\\doc\\f.wmv",ios::binary);for(stringstr;getline(myIn3,str);)myOut3<<str<<endl;}4/18/202374例f0212:用篩法判斷素數(shù)#include<iostream.h>#include<vector.h>#include<fstream.h>intmain(){vector<int>prime(10000,1);
for(inti=2;i<100;i++)
if(prime[i])
for(intj=i;i*j<10000;j++)
prime[i*j]=0;
ifstream
in(“a.txt”);
for(inta;in>>a&&a>1&&a<10000;)
cout<<a<<“is“<<(prime[a]?””:”not”)<<“aprime.\n”;}把1~10000之間2~99的所有倍數(shù)全部篩掉in&&a>1
&&a<10000cout<<…;假真inta;in>>a;4/18/2023751.break語句 只用于switch、for、while、do-while等語句中。作用: ①中止switch語句的執(zhí)行,并跳出switch語句 ②從最近的封閉循環(huán)體中跳出,結(jié)束當(dāng)前循環(huán)。轉(zhuǎn)而執(zhí)行該循環(huán)之后的語句 2.6轉(zhuǎn)移語句(MoveStatements
)
4/18/202376i<5假真i++;i=1;結(jié)束開始j<5cout<<…;假真++j;j=1;i*j>=5break;假真cout<<endl;#include<iostream.h>intmain(){
inti,j;
for(i=1;i<5;i++){
for(j=1;j<5;++j){
if(i*j>=5) break;
cout<<i<<“*”<<j<<“”;
}
cout<<endl;//break跳到此處
}}例:輸出相乘之積小于5的兩個正整數(shù)的所有組合。1*11*21*31*42*12*23*14*14/18/2023772.continue語句用于循環(huán)語句中,結(jié)束本次循環(huán),(即跳過循環(huán)體中尚未執(zhí)行的語句),接著進行下一次是否執(zhí)行循環(huán)的判定;注意:并不從循環(huán)體中跳出,除非已處于循環(huán)結(jié)束點例:for(;;){
for(;;){ //…
if(i==1) continue; //…
} a=1;}條件判斷假真狀態(tài)修正循環(huán)初始狀態(tài)i==1……a=1;假真continue;4/18/202378例:把100~200之間不能被3整除的整數(shù)輸出
for(intn=100;n<=200;n++){
if(n%3==0)continue;
cout<<n<<endl;}n<=200假真n++;n=100;n%3==0cout<<…;假真結(jié)束開始continue;100101103104106…4/18/202379continue與break的區(qū)別:
for(表達式1;表達式2;表達式3){
循環(huán)體語句;}4/18/2023803.goto
語句一般形式:goto
語句標(biāo)號;作用:將程序控制轉(zhuǎn)移到標(biāo)號所標(biāo)志的語句處.語句標(biāo)號:標(biāo)志符,命名規(guī)則與變量的命名規(guī)則相同;例:求1到100的和#include<iostream.h>voidmain(){
inti=1,sum=0;
loop: sum+=i; ++i;
if(i<101)
gotoloop;
cout<<"sum="<<sum;}4/18/202381#include<iostream.h>intmain(){
inta;
gotoInit;Forward:a=a+1;Print:
cout<<a<<endl;
gotoDown;Init:a=1;
gotoPrint;Down:if(a<100)
gotoForward;}#include<iostream.h>intmain(){
for(inta=1;a<101;a++)
cout<<a<<endl;}結(jié)果:1234…4/18/202382應(yīng)該禁用goto語句(不符合結(jié)構(gòu)化原則)C++中唯一比較適合使用goto的地方:當(dāng)從多重循環(huán)深處跳到循環(huán)之外時,如果用break語句,將要用多次,這時候用goto就比較簡單。
例:for(inti=1;i<100;i++){
for(intj=1;j<100;++j){
if(i*j==651)gotoEnd;//…}}End://…4/18/2023832.7再做循環(huán)設(shè)計(MoreLoopDesigns
)
一、邏輯判斷類問題對于邏輯判斷的問題,一般都要考慮全部的可能性,然后從這些可能性中按條件逐一排查,直到最后獲得某個結(jié)論。兩種模式:
①列出全部的可能性,去掉那些不滿足要求的情況。
②列出全部的可能性,從中選擇滿足要求的情況。4/18/202384①列出全部的可能性,去掉那些不滿足要求的情況。語句控制結(jié)構(gòu):
for(所有可能情況){//可為多重循環(huán)
if(條件1不滿足)continue;
if(條件2不滿足)continue;//…
if(條件n不滿足)continue;
輸出所要的結(jié)果
}4/18/202385②列出全部的可能性,從中選擇滿足要求的情況。語句控制結(jié)構(gòu):
for(所有可能情況){//可為多重循環(huán)
if(條件1滿足&&條件2滿足&&…&&條件n滿足)
輸出所要的結(jié)果
}4/18/202386例:百錢買百雞問題:雄雞7元1只,母雞5元1只,小雞1元3只?;?00元錢,買100只雞,如果雄雞、母雞和小雞都必須有,則雄雞、母雞和小雞應(yīng)各買幾只?分析:考慮全部的可能性時,先考慮雄雞、母雞和小雞數(shù)的取值范圍。由于各種雞都必須有,所以雄雞的最高耗用金額為100-5-1=94,取7的倍數(shù),得91元,所以雄雞的取值范圍為1~13。同理,母雞為1~18,小雞為3~96;4/18/202387所以本問題的條件是:
1、雄雞數(shù)+母雞數(shù)+小雞數(shù)=100;
cock+hen+chick-100==0
2、買雄雞款+買母雞款+買小雞款=100;
7*cock+5*hen+chick/3-100==0
3、小雞數(shù)為3的倍數(shù);
chick%3==0反條件是:
1、cock+hen+chick-100!=0
2、7*cock+5*hen+chick/3-100!=0
3、chick%3!=04/18/202388#include<iostream.h>
intmain(){
for(intcock=1;cock<=13;++cock)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溝渠隧道開挖施工方案
- 砂巖沉積盆地施工方案
- 混凝土擋土壩施工方案
- 墻體管道美化施工方案
- 水泥穩(wěn)定土施工方案
- 二零二五年度保密技術(shù)合作保密費及保密期限協(xié)議
- 二零二五年度養(yǎng)老服務(wù)業(yè)勞動合同違約賠償及服務(wù)質(zhì)量標(biāo)準(zhǔn)合同
- 2025年度購房合同簽訂及后續(xù)房產(chǎn)增值服務(wù)協(xié)議
- 2025年法拍房屋拍賣議價及成交保障合同
- 二零二五年度大型光伏發(fā)電站項目設(shè)備安裝合同
- GB/T 3452.2-2007液壓氣動用O形橡膠密封圈第2部分:外觀質(zhì)量檢驗規(guī)范
- GB/T 30797-2014食品用洗滌劑試驗方法總砷的測定
- GB/T 20057-2012滾動軸承圓柱滾子軸承平擋圈和套圈無擋邊端倒角尺寸
- GB/T 19808-2005塑料管材和管件公稱外徑大于或等于90mm的聚乙烯電熔組件的拉伸剝離試驗
- GB/T 10051.1-2010起重吊鉤第1部分:力學(xué)性能、起重量、應(yīng)力及材料
- 2022年人民交通出版社股份有限公司招聘筆試試題及答案解析
- 班組建設(shè)工作體系課件
- 第章交通調(diào)查與數(shù)據(jù)分析課件
- 穆斯林太巴熱咳慶念詞文
- 軟硬結(jié)合板的設(shè)計制作與品質(zhì)要求課件
- 中醫(yī)院情志養(yǎng)生共64張課件
評論
0/150
提交評論