![C++語言程序設(shè)計課件_第1頁](http://file4.renrendoc.com/view/530aa1a0c9e4e97de28d6725e632c2a8/530aa1a0c9e4e97de28d6725e632c2a81.gif)
![C++語言程序設(shè)計課件_第2頁](http://file4.renrendoc.com/view/530aa1a0c9e4e97de28d6725e632c2a8/530aa1a0c9e4e97de28d6725e632c2a82.gif)
![C++語言程序設(shè)計課件_第3頁](http://file4.renrendoc.com/view/530aa1a0c9e4e97de28d6725e632c2a8/530aa1a0c9e4e97de28d6725e632c2a83.gif)
![C++語言程序設(shè)計課件_第4頁](http://file4.renrendoc.com/view/530aa1a0c9e4e97de28d6725e632c2a8/530aa1a0c9e4e97de28d6725e632c2a84.gif)
![C++語言程序設(shè)計課件_第5頁](http://file4.renrendoc.com/view/530aa1a0c9e4e97de28d6725e632c2a8/530aa1a0c9e4e97de28d6725e632c2a85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++標準模板庫
泛型程序設(shè)計將程序?qū)懙帽M可能通用
將算法從特定的數(shù)據(jù)結(jié)構(gòu)中抽象出來,成為通用的C++的模板為泛型程序設(shè)計奠定了關(guān)鍵的基礎(chǔ)
STL是泛型程序設(shè)計的一個范例
容器(container)迭代器(iterator)算法(algorithms)函數(shù)對象(functionobject)*命名空間(namespace)一個命名空間將不同的標識符集合在一個命名作用域(namedscope)內(nèi)為了解決命名沖突例如,聲明一個命名空間NS:namspaceNS{classFile;voidFun();}
則引用標識符的方式如下,NS::Fileobj;NS::Fun();沒有聲明命名空間的標識符都處于無名的命名空間中*概念和術(shù)語命名空間(續(xù))可以用using來指定命名空間例如,經(jīng)過以下聲明:
usingNS::File;
在當前作用域中就可以直接引用Fileusingnamespacestd;
命名空間std中所有標識符都可直接引用在新的C++標準程序庫中,所有標識符都聲明在命名空間std中,頭文件都不使用擴展名*概念和術(shù)語容器容器類是容納、包含一組元素或元素集合的對象。異類容器類與同類容器類順序容器與關(guān)聯(lián)容器七種基本容器:向量(vector)、雙端隊列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)*概念和術(shù)語容器的接口通用容器運算符==,!=,>,>=,<,<=,=方法(函數(shù))迭代方法begin(),end(),rbegin(),rend()訪問方法size(),max_size(),swap(),empty()*適配器適配器是一種接口類為已有的類提供新的接口。目的是簡化、約束、使之安全、隱藏或者改變被修改類提供的服務(wù)集合。三種類型的適配器:容器適配器用來擴展7種基本容器,它們和順序容器相結(jié)合構(gòu)成棧、隊列和優(yōu)先隊列容器迭代器適配器函數(shù)對象適配器。*概念和術(shù)語迭代器迭代器是面向?qū)ο蟀姹镜闹羔?,它們提供了訪問容器、序列中每個元素的方法。*概念和術(shù)語算法C++標準模板庫中包括70多個算法其中包括查找算法,排序算法,消除算法,記數(shù)算法,比較算法,變換算法,置換算法和容器管理等等。這些算法的一個最重要的特性就是它們的統(tǒng)一性,并且可以廣泛用于不同的對象和內(nèi)置的數(shù)據(jù)類型。*概念和術(shù)語順序容器順序容器的接口插入方法push_front(),push_back(),insert(),運算符“=”刪除方法pop(),erase(),clear()迭代訪問方法使用迭代器其他順序容器訪問方法(不修改訪問方法)front(),back(),下標[]運算符*容器順序容器——向量向量屬于順序容器,用于容納不定長線性序列(即線性群體),提供對序列的快速隨機訪問(也稱直接訪問)向量是動態(tài)結(jié)構(gòu),它的大小不固定,可以在程序運行時增加或減少。例10-1求范圍2~N中的質(zhì)數(shù),N在程序運行時由鍵盤輸入。*容器//10_1.cpp#include<iostream>#include<iomanip>#include<vector> //包含向量容器頭文件usingnamespacestd;intmain(){vector<int>A(10); intn; intprimecount=0,i,j;cout<<"Enteravalue>=2asupperlimit:";cin>>n;A[primecount++]=2; **for(i=3;i<n;i++){if(primecount==A.size()) A.resize(primecount+10);if(i%2==0)continue;j=3;while(j<=i/2&&i%j!=0)j+=2;if(j>i/2)A[primecount++]=i;}for(i=0;i<primecount;i++)//輸出質(zhì)數(shù)
{cout<<setw(5)<<A[i];if((i+1)%10==0)//每輸出10個數(shù)換行一次
cout<<endl;}cout<<endl;}**順序容器——雙端隊列雙端隊列是一種放松了訪問權(quán)限的隊列。元素可以從隊列的兩端入隊和出隊,也支持通過下標操作符“[]”進行直接訪問。例10-2使用雙端隊列容器保存double數(shù)值序列*容器順序容器——列表列表主要用于存放雙向鏈表,可以從任意一端開始遍歷。列表還提供了拼接(splicing)操作,將一個序列中的元素插入到另一個序列中。例10-3改寫例9-7從鍵盤輸入10個整數(shù),用這些整數(shù)值作為結(jié)點數(shù)據(jù),生成一個鏈表,按順序輸出鏈表中結(jié)點的數(shù)值。然后從鍵盤輸入一個待查找整數(shù),在鏈表中查找該整數(shù),若找到則刪除該整數(shù)所在的結(jié)點(如果出現(xiàn)多次,全部刪除),然后輸出刪除結(jié)點以后的鏈表。在程序結(jié)束之前清空鏈表。*容器//10_3.cpp#include<iostream>#include<list>usingnamespacestd;intmain(){list<int>Link; //構(gòu)造一個列表用于存放整數(shù)鏈表
inti,key,item;for(i=0;i<10;i++)//輸入10個整數(shù)依次向表頭插入
{cin>>item;Link.push_front(item);}cout<<"List:";//輸出鏈表**list<int>::iteratorp=Link.begin();while(p!=Link.end())//輸出各節(jié)點數(shù)據(jù),直到鏈表尾
{cout<<*p<<"";p++;//使P指向下一個節(jié)點
}cout<<endl;cout<<"請輸入一個需要刪除的整數(shù):";cin>>key;Link.remove(key);cout<<"List:";//輸出鏈表
p=Link.begin(); //使P重新指向表頭
while(p!=Link.end()) {cout<<*p<<"";p++;//使P指向下一個節(jié)點
}cout<<endl;}**容器適配器容器適配器是用來擴展7種基本容器的棧容器使用適配器與一種基礎(chǔ)容器相結(jié)合來實現(xiàn)例10-4:應(yīng)用標準庫中的deque順序容器生成一個整數(shù)棧stack。隊列容器使用適配器與一種基礎(chǔ)容器相結(jié)合來實現(xiàn)的先進先出數(shù)據(jù)結(jié)構(gòu)。例10-5:應(yīng)用標準庫中的deque順序容器生成一個整數(shù)標準隊列queue。*容器什么是迭代器迭代器是面向?qū)ο蟀姹镜闹羔樦羔樋梢灾赶騼?nèi)存中的一個地址迭代器可以指向容器中的一個位置STL的每一個容器類模版中,都定義了一組對應(yīng)的迭代器類。使用迭代器,算法函數(shù)可以訪問容器中指定位置的元素,而無需關(guān)心元素的具體類型。*迭代器迭代器的類型輸入迭代器可以用來從序列中讀取數(shù)據(jù)輸出迭代器允許向序列中寫入數(shù)據(jù)前向迭代器既是輸入迭代器又是輸出迭代器,并且可以對序列進行單向的遍歷雙向迭代器與前向迭代器相似,但是在兩個方向上都可以對數(shù)據(jù)遍歷隨機訪問迭代器也是雙向迭代器,但能夠在序列中的任意兩個位置之間進行跳轉(zhuǎn)。*迭代器迭代器適配器迭代器適配器是用來擴展(或調(diào)整)迭代器功能的類。它本身也被稱為迭代器,只是這種迭代器是通過改變另一個迭代器而得到的逆向迭代器通過重新定義遞增運算和遞減運算,使其行為正好倒置插入型迭代器將賦值操作轉(zhuǎn)換為插入操作。通過這種迭代器,算法可以執(zhí)行插入行為而不是覆蓋行為例10-6應(yīng)用逆向迭代器和后插迭代器來操作向量容器中的元素*迭代器迭代器相關(guān)的輔助函數(shù)advance()函數(shù)將迭代器的位置增加,增加的幅度由參數(shù)決定distance()函數(shù)返回迭代器之間的距離函數(shù)iter_swap()交換兩個迭代器所指向的元素值例10-7用三個迭代器輔助函數(shù)來操作列表容器中的元素。*迭代器標準C++庫中的算法算法本身是一種函數(shù)模板不可變序列算法(non-mutatingalgorithms)不直接修改所操作的容器內(nèi)容的算法可變序列算法(mutatingalgorithms)可以修改它們所操作的容器的元素。排序相關(guān)算法數(shù)值算法*算法算法應(yīng)用舉例例10-9應(yīng)用不可變序列算法對數(shù)據(jù)序列進行分析例10-10以可變序列算法對數(shù)據(jù)序列進行復(fù)制,生成,刪除,替換,倒序,旋轉(zhuǎn)等可變性操作。例10-11應(yīng)用排序相關(guān)算法對序列進行各項操作例10-12應(yīng)用數(shù)值算法對數(shù)據(jù)序列進行操作*算法函數(shù)對象一個行為類似函數(shù)的對象,它可以沒有參數(shù),也可以帶有若干參數(shù),其功能是獲取一個值,或者改變操作的狀態(tài)。任何普通的函數(shù)和任何重載了調(diào)用運算符operator()的類的對象都滿足函數(shù)對象的特征STL中也定義了一些標準的函數(shù)對象,如果以功能劃分,可以分為算術(shù)運算、關(guān)系運算、邏輯運算三大類。為了調(diào)用這些標準函數(shù)對象,需要包含頭文件<functional>。*小結(jié)與復(fù)習建議主要內(nèi)容泛型程序設(shè)計、與標準模板庫有關(guān)的概念和術(shù)語、C++標準模板庫中的容器、迭代器、標準C++庫中的算法、函數(shù)對象達到的目標初步了解泛型程序設(shè)計的概念,學(xué)會C++標準模板庫(STL)的使用方法實驗任務(wù)實驗十*
C++程序的結(jié)構(gòu)
函數(shù)原型的作用域函數(shù)原型中的參數(shù),其作用域始于
"(",結(jié)束于")"。例如,設(shè)有下列原型聲明:doublearea(doubleradius);*radius的作用域僅在于此,不能用于程序正文其他地方,因而可有可無。作用域與可見性局部作用域函數(shù)的形參,在塊中聲明的標識符,其作用域自聲明處起,限于塊中,例如:voidfun(inta){intb=a;cin>>b;if(b>0){intc;
}}*c的作用域b的作用域作用域與可見性a的作用域類作用域類作用域作用于特定的成員名。類X的成員m具有類作用域,對m的訪問方式如下:如果在X的成員函數(shù)中沒有聲明同名的局部作用域標識符,那么在該函數(shù)內(nèi)可以訪問成員m。通過表達式x.m或者X::m訪問。通過表達式ptr->m*作用域與可見性文件作用域不在前述各個作用域中出現(xiàn)的聲明,具有文件作用域,這樣聲明的標識符的作用域開始于聲明點,結(jié)束于文件尾。*作用域與可見性可見性可見性是從對標識符的引用的角度來談的概念可見性表示從內(nèi)層作用域向外層作用域“看”時能看見什么。如果標識在某處可見,則就可以在該處引用此標識符。*塊作用域類作用域文件作用域作用域與可見性可見性標識符應(yīng)聲明在先,引用在后。如果某個標識符在外層中聲明,且在內(nèi)層中沒有同一標識符的聲明,則該標識符在內(nèi)層可見。對于兩個嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲明了與外層作用域中同名的標識符,則外層作用域的標識符在內(nèi)層不可見。*作用域與可見性同一作用域中的同名標識符在同一作用域內(nèi)的對象名、函數(shù)名、枚舉常量名會隱藏同名的類名或枚舉類型名。重載的函數(shù)可以有相同的函數(shù)名。*作用域與可見性例5.1#include<iostream>usingnamespacestd;inti;//文件作用域intmain(){
i=5;{inti;//塊作用域
i=7;cout<<"i="<<i<<endl;//輸出7}
cout<<"i="<<i;//輸出5
return0;}*作用域與可見性對象的生存期對象從產(chǎn)生到結(jié)束的這段時間就是它的生存期。在對象生存期內(nèi),對象將保持它的值,直到被更新為止。*靜態(tài)生存期這種生存期與程序的運行期相同。在文件作用域中聲明的對象具有這種生存期。在函數(shù)內(nèi)部聲明靜態(tài)生存期對象,要冠以關(guān)鍵字static
。*對象的生存期例#include<iostream>usingnamespacestd;inti=5;//文件作用域intmain(){cout<<"i="<<i<<endl;return0;}i具有靜態(tài)生存期*對象的生存期動態(tài)生存期塊作用域中聲明的,沒有用static修是的對象是動態(tài)生存期的對象(習慣稱局部生存期對象)。開始于程序執(zhí)行到聲明點時,結(jié)束于命名該標識符的作用域結(jié)束處。*對象的生存期例#include<iostream>usingnamespacestd;voidfun();intmain(){fun();fun();}voidfun(){
staticinta=1;inti=5;
a++;
i++;cout<<"i="<<i<<",a="<<a<<endl;}*運行結(jié)果:i=6,a=2i=6,a=3i是動態(tài)生存期a是靜態(tài)生存期對象的生存期例5-2變量的生存期與可見性#include<iostream>usingnamespacestd;inti=1;//i為全局變量,具有靜態(tài)生存期。voidother(){staticinta=2;staticintb;//a,b為靜態(tài)局部變量,具有全局壽命,局部可見。
//只第一次進入函數(shù)時被初始化。
intc=10;//C為局部變量,具有動態(tài)生存期,
//每次進入函數(shù)時都初始化。
a+=
2;i+=
32;c+=
5;cout<<"OTHER\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
b=a;}*對象的生存期intmain(){staticinta;//靜態(tài)局部變量,有全局壽命,局部可見。
intb=-10;//b,c為局部變量,具有動態(tài)生存期。
intc=0; cout<<"MAIN\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;c+=8;other();cout<<"MAIN\n";cout<<"i:"<<i<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl;
i+=
10;other(); return0;}17運行結(jié)果:MAIN
i:1
a:0b:-10c:0OTHER
i:33
a:4b:0c:15MAIN
i:33
a:0b:-10c:8OTHER
i:75
a:6b:4c:1518例5-3具有靜態(tài)、動態(tài)生存期對象的時鐘程序#include<iostream>usingnamespacestd;classClock{ //時鐘類定義public: //外部接口
Clock(); voidsetTime(intnewH,intnewM,intnewS);//三個形參均具有函數(shù)原型作用域
voidshowTime();private: //私有數(shù)據(jù)成員
inthour,minute,second;};*對象的生存期Clock::Clock():hour(0),minute(0),second(0){} //構(gòu)造函數(shù)voidClock::setTime(intnewH,intnewM,intnewS){//三個形參均具有局部作用域
hour=newH; minute=newM; second=newS;}voidClock::showTime(){ cout<<hour<<":"<<minute<<":"<<second<<endl;}20ClockglobClock;//聲明對象globClock,
//具有靜態(tài)生存期,文件作用域intmain(){//主函數(shù) cout<<"Firsttimeoutput:"<<endl;
//引用具有文件作用域的對象:
globClock.showTime();//對象的成員函數(shù)具有類作用域
globClock.setTime(8,30,30); ClockmyClock(globClock);
//聲明具有塊作用域的對象myClock cout<<"Secondtimeoutput:"<<endl;
myClock.showTime(); //引用具有塊作用域的對象 return0;}21程序的運行結(jié)果為:Firsttimeoutput:0:0:0Secondtimeoutput:8:30:3022數(shù)據(jù)與函數(shù)數(shù)據(jù)存儲在局部對象中,通過參數(shù)傳遞實現(xiàn)共享——函數(shù)間的參數(shù)傳遞。數(shù)據(jù)存儲在全局對象中。將數(shù)據(jù)和使用數(shù)據(jù)的函數(shù)封裝在類中。*數(shù)據(jù)與函數(shù)使用全局對象#include<iostream>usingnamespacestd;intglobal;voidf(){global=5;}voidg(){cout<<global<<endl;}intmain(){f();g();//輸出“5”return0;}*數(shù)據(jù)與函數(shù)將函數(shù)與數(shù)據(jù)封裝#include<iostream>usingnamespacestd;classApplication{public:voidf();voidg();private:intglobal;};voidApplication::f(){
global=5;}voidApplication::g(){cout<<global<<endl;}intmain(){ApplicationMyApp;MyApp.f();MyApp.g();return0;}*數(shù)據(jù)與函數(shù)靜態(tài)成員靜態(tài)數(shù)據(jù)成員用關(guān)鍵字static聲明該類的所有對象維護該成員的同一個拷貝必須在類外定義和初始化,用(::)來指明所屬的類。靜態(tài)成員函數(shù)類外代碼可以使用類名和作用域操作符來調(diào)用靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。*靜態(tài)成員例5-4
具有靜態(tài)數(shù)據(jù)成員的Point類#include<iostream>usingnamespacestd;classPoint {public: Point(intx=0,inty=0):x(x),y(y){count++;} Point(Point&p); intgetX(){returnx;} intgetY(){returny;} voidshowCount(){ cout<<"Objectcount=“<<count<<endl;}private: intx,y;
staticintcount;};*靜態(tài)成員Point::Point(Point&p){ x=p.x; x=p.y; count++;}intPoint::count=0;
intmain(){ Pointa(4,5); cout<<"PointA:"<<a.getX()<<","<<a.getY(); a.showCount(); Pointb(a); cout<<"PointB:"<<b.getX()<<","<<b.getY(); b.showCount(); return0;}28靜態(tài)成員函數(shù)舉例#include<iostream>usingnamespacestd;classApplication{public:staticvoidf();staticvoidg();private:staticintglobal;};intApplication::global=0;voidApplication::f(){ global=5;}voidApplication::g(){ cout<<global<<endl;}intmain(){ Application::f(); Application::g(); return0;}*靜態(tài)成員靜態(tài)成員函數(shù)舉例classA{public: staticvoidf(Aa);private: intx;};voidA::f(Aa){ cout<<x;//對x的引用是錯誤的 cout<<a.x;//正確}*靜態(tài)成員具有靜態(tài)數(shù)據(jù)、函數(shù)成員的Point類#include<iostream>usingnamespacestd;classPoint{ //Point類定義public: //外部接口
Point(intx=0,inty=0):x(x),y(y){count++;} Point(Point&p); ~Point(){count--;} intgetX(){returnx;} intgetY(){returny;} staticvoidshowCount(){ //靜態(tài)函數(shù)成員
cout<<"Objectcount="<<count<<endl; }private: //私有數(shù)據(jù)成員
intx,y; staticintcount; //靜態(tài)數(shù)據(jù)成員聲明};*靜態(tài)成員Point::Point(Point&p){ x=p.x; y=p.y; count++;}intPoint::count=0;
intmain(){//主函數(shù)實現(xiàn) Pointa(4,5); //聲明對象A cout<<"PointA,"<<a.getX()<<","<<a.getY();
Point::showCount(); //輸出對象個數(shù)
Pointb(a); //聲明對象B cout<<"PointB,"<<b.GetX()<<","<<b.GetY();
Point::showCount(); //輸出對象個數(shù) return0;}32友元友元是C++提供的一種破壞數(shù)據(jù)封裝和數(shù)據(jù)隱藏的機制。通過將一個模塊聲明為另一個模塊的友元,一個模塊能夠引用到另一個模塊中本是被隱藏的信息??梢允褂糜言瘮?shù)和友元類。為了確保數(shù)據(jù)的完整性,及數(shù)據(jù)封裝與隱藏的原則,建議盡量不使用或少使用友元。*
友元友元函數(shù)友元函數(shù)是在類聲明中由關(guān)鍵字friend修飾說明的非成員函數(shù),在它的函數(shù)體中能夠通過對象名訪問private和protected成員作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。訪問對象中的成員必須通過對象名。*
友元例5-6使用友元函數(shù)計算兩點距離#include<iostream>#include<cmath>classPoint{ //Point類聲明public: //外部接口
Point(intx=0,inty=0):x(x),y(y){} intgetX(){returnx;} intgetY(){returny;}
friendfloatdist(Point&a,Point&b);
private: //私有數(shù)據(jù)成員
intx,y;};*
友元floatdist(Point&a,Point&b){doublex=a.x-b.x;doubley=a.y-b.y;returnstatic_cast<float>(sqrt(x*x+y*y));}intmain(){Pointp1(1,1),p2(4,5);cout<<"Thedistanceis:";cout<<dist(p1,p2)<<endl;return0;}36友元類若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員。聲明語法:將友元類名在另一個類中使用friend修飾說明。*
友元友元類舉例classA{friendclassB;public:voiddisplay(){cout<<x<<endl;}private:intx;}classB{public:voidset(inti);voiddisplay();private:
Aa;};*
友元voidB::set(inti){
a.x=i;}voidB::display(){a.display();}39友元關(guān)系是單向的如果聲明B類是A類的友元,B類的成員函數(shù)就可以訪問A類的私有和保護數(shù)據(jù),但A類的成員函數(shù)卻不能訪問B類的私有、保護數(shù)據(jù)。*常類型常類型的對象必須進行初始化,而且不能被更新。常對象:必須進行初始化,不能被更新。const類名
對象名常引用:被引用的對象不能被更新。const類型說明符&引用名常數(shù)組:數(shù)組元素不能被更新(下一章介紹)。類型說明符const數(shù)組名[大小]...常指針:指向常量的指針(下一章介紹)。*
共享數(shù)據(jù)的保護常對象舉例classA{public:A(inti,intj){x=i;y=j;}...private:intx,y;};Aconsta(3,4);//a是常對象,不能被更新*
共享數(shù)據(jù)的保護用const修飾的對象成員常成員函數(shù)使用const關(guān)鍵字說明的函數(shù)。常成員函數(shù)不更新對象的數(shù)據(jù)成員。常成員函數(shù)說明格式:
類型說明符函數(shù)名(參數(shù)表)const;
這里,const是函數(shù)類型的一個組成部分,因此在實現(xiàn)部分也要帶const關(guān)鍵字。const關(guān)鍵字可以被用于參與對重載函數(shù)的區(qū)分通過常對象只能調(diào)用它的常成員函數(shù)。常數(shù)據(jù)成員使用const說明的數(shù)據(jù)成員。*
共享數(shù)據(jù)的保護例5-7常成員函數(shù)舉例#include<iostream>usingnamespacestd;classR{public:R(intr1,intr2):r1(r1),r2(r2){}voidprint();voidprint()const;private:intr1,r2;};*
共享數(shù)據(jù)的保護voidR::print(){cout<<r1<<":"<<r2<<endl;}voidR::print()const{cout<<r1<<";"<<r2<<endl;}intmain(){Ra(5,4);a.print();//調(diào)用voidprint()
constRb(20,52);
b.print();//調(diào)用voidprint()const return0;}45例5-8常數(shù)據(jù)成員舉例#include<iostream>usingnamespacestd;classA{public: A(inti); voidprint();private: constinta; staticconstintb;//靜態(tài)常數(shù)據(jù)成員};*
共享數(shù)據(jù)的保護constintA::b=10;A::A(inti):a(i){}voidA::print(){cout<<a<<":"<<b<<endl;}intmain(){/*建立對象a和b,并以100和0作為初值,分別調(diào)用構(gòu)造函數(shù),通過構(gòu)造函數(shù)的初始化列表給對象的常數(shù)據(jù)成員賦初值*/Aa1(100),a2(0);a1.print();a2.print();return0;}47例5-9常引用作形參#include<iostream>#include<cmath>usingnamespacestd;classPoint{ //Point類定義public: //外部接口
Point(intx=0,inty=0):x(x),y(y){} intgetX(){returnx;} intgetY(){returny;} friendfloatdist(constPoint&p1,constPoint&p2);private: //私有數(shù)據(jù)成員
intx,y;};*
共享數(shù)據(jù)的保護例5-9常引用作形參floatdist(constPoint&p1,constPoint&p2){
doublex=p1.x-p2.x; doubley=p1.y-p2.y; returnstatic_cast<float>(sqrt(x*x+y*y));}intmain(){ //主函數(shù)
constPointmyp1(1,1),myp2(4,5);
cout<<"Thedistanceis:"; cout<<dist(myp1,myp2)<<endl;
return0;}*
共享數(shù)據(jù)的保護編譯預(yù)處理命令#include包含指令將一個源文件嵌入到當前源文件中該點處。#include<文件名>按標準方式搜索,文件位于C++系統(tǒng)目錄的include子目錄下#include"文件名"首先在當前目錄中搜索,若沒有,再按標準方式搜索。#define宏定義指令定義符號常量,很多情況下已被const定義語句取代。定義帶參數(shù)宏,已被內(nèi)聯(lián)函數(shù)取代。#undef刪除由#define定義的宏,使之不再起作用。*條件編譯指令
#if和#endif#if
常量表達式
//當“常量表達式”非零時編譯程序正文#endif*
編譯預(yù)處理命令條件編譯指令——#else #if常量表達式
//當“常量表達式”非零時編譯程序正文1#else
//當“常量表達式”為零時編譯程序正文2#endif*
編譯預(yù)處理命令條件編譯指令#elif#if常量表達式1
程序正文1
//當“常量表達式1”非零時編譯#elif常量表達式2
程序正文2
//當“常量表達式2”非零時編譯#else
程序正文3
//其他情況下編譯#endif*
編譯預(yù)處理命令條件編譯指令#ifdef標識符程序段1#else
程序段2#endif如果“標識符”經(jīng)#defined定義過,且未經(jīng)undef刪除,則編譯程序段1,否則編譯程序段2。*
編譯預(yù)處理命令條件編譯指令#ifndef標識符程序段1#else
程序段2#endif如果“標識符”未被定義過,則編譯程序段1,否則編譯程序段2。*
編譯預(yù)處理命令多文件結(jié)構(gòu)(例5-10)一個源程序可以劃分為多個源文件:類聲明文件(.h文件)類實現(xiàn)文件(.cpp文件)類的使用文件(main()所在的.cpp文件)利用工程來組合各個文件。*不使用條件編譯的頭文件//main.cpp#include"file1.h"#include"file2.h"intmain(){…}//file1.h#include"head.h"…//file2.h#include"head.h"…//head.h…classPoint{…}…*
多文件結(jié)構(gòu)使用條件編譯的頭文件//head.h#ifndefHEAD_H#defineHEAD_H…classPoint{…}…#endif*
多文件結(jié)構(gòu)常成員函數(shù)的聲明原則適當?shù)貙⒊蓡T函數(shù)聲明為常成員函數(shù),能夠提高代碼質(zhì)量。凡是不會改變對象狀態(tài)的函數(shù),都應(yīng)當聲明為常成員函數(shù)。什么是改變對象狀態(tài)?改變對象狀態(tài),不簡單地等同于改變成員數(shù)據(jù)的值。只要一個成員函數(shù)執(zhí)行與否,不會影響以后接口函數(shù)的調(diào)用結(jié)果,都可以認為它不會改變對象狀態(tài)。*深度探索常成員函數(shù)的聲明原則classLine{ //Line類的定義public: //外部接口
Line(constPoint&p1,constPoint&p2):p1(p1),p2(p2),len(-1){} doublegetLen();private: //私有數(shù)據(jù)成員
Pointp1,p2; //Point類的對象p1,p2 doublelen;};doubleLine::getLen(){ if(len<0){ doublex=p1.getX()-p2.getX(); doubley=p1.getY()-p2.getY(); len=sqrt(x*x+y*y); } returnlen;}*深度探索改變數(shù)據(jù)成員,但不改變對象狀態(tài)常成員函數(shù)的聲明原則在原則上,應(yīng)當將getLen聲明為常成員函數(shù),但由于修改了數(shù)據(jù)成員的值,語言規(guī)則不允許怎么辦?使用mutable關(guān)鍵字mutable關(guān)鍵字使得被修飾的成員對象無視“常對象的成員對象被視為常對象”這一語言原則Mutable須慎用*深度探索代碼的編譯連接與執(zhí)行編譯:源文件
目標文件源文件的函數(shù)代碼
目標文件的代碼段源文件的靜態(tài)對象
目標文件的數(shù)據(jù)段分為初始化的數(shù)據(jù)段和未初始化的數(shù)據(jù)段符號表:將靜態(tài)對象與函數(shù)的名字與地址關(guān)聯(lián)重定位記錄表:將代碼中需用到的地址與符號表關(guān)聯(lián)連接將各段合并將符號表合并根據(jù)重定位記錄表,確定代碼中用到的全局地址*深度探索代碼的編譯連接與執(zhí)行代碼的執(zhí)行操作系統(tǒng)首先將文件從磁盤讀入,初始化各段——一些靜態(tài)數(shù)據(jù)就在此時被初始化從引導(dǎo)代碼開始執(zhí)行,引導(dǎo)代碼啟動main,main返回后,引導(dǎo)代碼會通知操作系統(tǒng)程序結(jié)束為什么只有靜態(tài)對象需要在目標文件中保存信息?連接器負責為靜態(tài)對象分配唯一地址,而其它對象都是相對尋址為什么類的信息不存在于目標文件中?類的“解構(gòu)”*深度探索小結(jié)與復(fù)習建議主要內(nèi)容作用域與可見性、對象的生存期、數(shù)據(jù)的共享與保護、友元、編譯預(yù)處理命令、多文件結(jié)構(gòu)和工程達到的目標深入理解程序的結(jié)構(gòu)、模塊間的關(guān)系、數(shù)據(jù)共享。實驗任務(wù)實驗五*C++簡單程序設(shè)計
C++語言的產(chǎn)生C++是從C語言發(fā)展演變而來的,首先是一個更好的C引入了類的機制,最初的C++被稱為“帶類的C”1983年正式取名為C++從1989年開始C++語言的標準化工作于1994年制定了ANSIC++標準草案于1998年11月被國際標準化組織(ISO)批準為國際標準,成為目前的C++*C++語言概述C++的特點全面兼容C它保持了C的簡潔、高效和接近匯編語言等特點對C的類型系統(tǒng)進行了改革和擴充C++也支持面向過程的程序設(shè)計,不是一個純正的面向?qū)ο蟮恼Z言支持面向?qū)ο蟮姆椒?C++語言概述C++程序?qū)嵗?-1//2_1.cpp#include<iostream>usingnamespacestd;intmain(){ cout<<"Hello!"<<endl; cout<<"Welcometoc++!"<<endl; return0;}運行結(jié)果:Hello!Welcometoc++!*C++語言概述C++字符集大小寫的英文字母:A~Z,a~z數(shù)字字符:0~9特殊字符:
! # % ^ & * _ + = - ~ < > / \ ‘
“ ; . , : ? ( ) [ ] { }*C++語言概述詞法記號關(guān)鍵字
C++預(yù)定義的單詞標識符
程序員聲明的單詞,它命名程序正文中的一些實體文字
在程序中直接使用符號表示的數(shù)據(jù)操作符
用于實現(xiàn)各種運算的符號分隔符
(){},:;
用于分隔各個詞法記號或程序正文空白符 空格、制表符(TAB鍵產(chǎn)生的字符)、垂直制表符、換行符、回車符和注釋的總稱*C++語言概述標識符的構(gòu)成規(guī)則以大寫字母、小寫字母或下劃線(_)開始??梢杂梢源髮懽帜浮⑿懽帜?、下劃線(_)或數(shù)字0~9組成。大寫字母和小寫字母代表不同的標識符。*C++語言概述
數(shù)據(jù)類型
——常量與變量#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;return0;}*常量變量變量先聲明后使用符號常量基本數(shù)據(jù)類型和表達式
數(shù)據(jù)類型
——整型數(shù)據(jù)#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;return0;}*shortunsignedshort2字節(jié)intunsignedint
4字節(jié)longunsignedlong4字節(jié)整型變量聲明基本數(shù)據(jù)類型和表達式整型變量整型常量數(shù)據(jù)類型
—整數(shù)數(shù)據(jù)及取值范圍類型 說明符 位數(shù) 數(shù)值范圍 短整 short 16 -32768~32767基本 int 32 -231~(231-1)長整 long 32 -231~(231-1)無符號
unsignedshort 16 0~65535
unsigned[int] 32 0~(232-1)
unsignedlong 32 0~(232-1) *基本數(shù)據(jù)類型和表達式
數(shù)據(jù)類型
——實數(shù)數(shù)據(jù)#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;return0;}*實型常量float4字節(jié)
3.4×10±387位有效數(shù)字double8字節(jié)
1.7×10±30815位有效數(shù)字longdouble8字節(jié)
1.7×10±30815位有效數(shù)字實型變量默認為double型后綴F(或f)
為float型后綴L(或l)
為longdouble
型基本數(shù)據(jù)類型和表達式
數(shù)據(jù)類型
——字符數(shù)據(jù)(一)字符常量單引號括起來的一個字符,
如:'a','D','?','$'字符變量用來存放字符常量
例:charc1,c2;
c1='a';
c2='A';字符數(shù)據(jù)在內(nèi)存中的存儲形式以ASCII碼存儲,占1字節(jié),用7個二進制位*基本數(shù)據(jù)類型和表達式
數(shù)據(jù)類型
——字符型數(shù)據(jù)(二)字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運算。字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字符串常量例:"CHINA"
"a"
'a'所以:charc;
c="a";*CHINA\0a
\0aPage*基本數(shù)據(jù)類型和表達式
數(shù)據(jù)類型
——布爾型數(shù)據(jù)布爾型變量的說明:
例:boolflag;布爾型數(shù)據(jù)的取值:
只有false
和true
兩個值*基本數(shù)據(jù)類型和表達式
數(shù)據(jù)類型
——變量初始化例:
inta=3;
doublef=3.56;
charc='a';
intc(5);*Page*基本數(shù)據(jù)類型和表達式數(shù)據(jù)類型
—混合運算時的類型轉(zhuǎn)換不同類型數(shù)據(jù)進行混合運算時,C++編譯器會自動進行類型轉(zhuǎn)換。為了避免不同的數(shù)據(jù)類型在運算中出現(xiàn)類型問題,應(yīng)盡量使用同種類型數(shù)據(jù)??梢圆捎脧娭祁愋娃D(zhuǎn)換:例如:
floatc;
inta,b;
c=float(a)/float(b);或c=(float)a/(float)b;
*基本數(shù)據(jù)類型和表達式變量的存儲類型auto屬于一時性存儲,其存儲空間可以被若干變量多次覆蓋使用。register存放在通用寄存器中。extern在所有函數(shù)和程序段中都可引用。static在內(nèi)存中是以固定地址存放的,在整個程序運行期間都有效。*基本數(shù)據(jù)類型和表達式算術(shù)運算符與算術(shù)表達式基本算術(shù)運算符
+-*/(若整數(shù)相除,結(jié)果取整)%(取余,操作數(shù)為整數(shù))優(yōu)先級與結(jié)合性先乘除,后加減,同級自左至右++,--(自增、自減)例:i++;--j;*Page*基本數(shù)據(jù)類型和表達式賦值運算符和賦值表達式
簡單的賦值運算符"="舉例
n=n+5表達式的類型
賦值運算符左邊對象的類型表達式的值
賦值運算符左邊對象被賦值后的值*Page*基本數(shù)據(jù)類型和表達式賦值運算符和賦值表達式
復(fù)合的賦值運算符有10種復(fù)合運算符:
+=,-=,*=,/=,%=,
<<=,>>=,&=,^=,|=例
a+=3
等價于a=a+3
x*=y+8
等價于x=x*(y+8)*基本數(shù)據(jù)類型和表達式逗號運算和逗號表達式格式表達式1,表達式2求解順序及結(jié)果先求解1,再求解2,最終結(jié)果為表達式2的值例a=3*5,a*4
最終結(jié)果為60*Page*基本數(shù)據(jù)類型和表達式關(guān)系運算與關(guān)系表達式關(guān)系運算是比較簡單的一種邏輯運算,優(yōu)先次序為:
<<=>>===!=
優(yōu)先級相同(高)優(yōu)先級相同(低)關(guān)系表達式是一種最簡單的邏輯表達式其結(jié)果類型為bool,值只能為true
或false。例如:a>b,c<=a+b,x+y==3*基本數(shù)據(jù)類型和表達式邏輯運算與邏輯表達式邏輯運算符
!(非)&&(與)||(或)
優(yōu)先次序:高→低邏輯表達式
例如:(a>b)&&(x>y)
其結(jié)果類型為bool,值只能為true
或false*基本數(shù)據(jù)類型和表達式邏輯運算與邏輯表達式“&&”
的“短路特性”表達式1&&表達式2先求解表達式1若表達式1的值為false,則最終結(jié)果為false,不再求解表達式2若表達式1的結(jié)果為true,則求解表達式2,以表達式2的結(jié)果作為最終結(jié)果“||”也具有類似的特性*基本數(shù)據(jù)類型和表達式條件運算符與條件表達式一般形式表達式1?表達式2:表達式3表達式1必須是bool類型執(zhí)行順序先求解表達式1,若表達式1的值為true,則求解表達式2,表達式2的值為最終結(jié)果若表達式1的值為false,則求解表達式3,表達式3的值為最終結(jié)果例:x=a>b?a:b;*基本數(shù)據(jù)類型和表達式條件運算符與條件表達式注意:條件運算符優(yōu)先級高于賦值運算符,低于邏輯運算符表達式2、3的類型可以不同,條件表達式的最終類型為2和3中較高的類型。例:x=a>b?a:b;*基本數(shù)據(jù)類型和表達式①②sizeof運算符語法形式
sizeof(類型名)
或sizeof表達式結(jié)果值:
“類型名”所指定的類型或“表達式”的結(jié)果類型所占的字節(jié)數(shù)。例:sizeof(short)sizeofx*基本數(shù)據(jù)類型和表達式位運算——按位與(&)運算規(guī)則將兩個運算量的每一個位進行邏輯與操作舉例:計算3&53:000000115:(&)000001013&5:00000001用途:將某一位置0,其他位不變。例如:
將char型變量a的最低位置0:
a=a&0xfe;取指定位。
例如:有charc;inta;
取出a的低字節(jié),置于c中:c=a&0xff;*基本數(shù)據(jù)類型和表達式位運算——按位或(|)運算規(guī)則將兩個運算量的每一個位進行邏輯或操作舉例:計算3|53:000000115:(|)000001013|5:00000111用途:將某些位置1,其他位不變。
例如:將int
型變量a
的低字節(jié)置
1
:
a=a|0xff;*基本數(shù)據(jù)類型和表達式位運算——按位異或(^)運算規(guī)則兩個操作數(shù)進行異或:
若對應(yīng)位相同,則結(jié)果該位為0,
若對應(yīng)位不同,則結(jié)果該位為1,舉例:計算071^052071: 00111001052:(^)00101010071^052: 00010011*基本數(shù)據(jù)類型和表達式位運算——按位異或(^)用途:使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反)例如:要使01111010
低四位翻轉(zhuǎn):
01111010(^) 00001111 01110101*基本數(shù)據(jù)類型和表達式位運算——取反(~)單目運算符,對一個二進制數(shù)按位取反。例:025:0000000000010101~025:1111111111101010*基本數(shù)據(jù)類型和表達式位運算——移位左移運算(<<)左移后,低位補0,高位舍棄。右移運算(>>)右移后,低位:舍棄高位:無符號數(shù):補0
有符號數(shù):補“符號位”*基本數(shù)據(jù)類型和表達式運算符優(yōu)先級括號++,--,sizeof*,/,%+,-==,!=位運算&&||?:賦值運算逗號運算*低高基本數(shù)據(jù)類型和表達式混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
——隱含轉(zhuǎn)換一些二元運算符(算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符和賦值運算符)要求兩個操作數(shù)的類型一致。在算術(shù)運算和關(guān)系運算中如果參與運算的操作數(shù)類型不一致,編譯系統(tǒng)會自動對數(shù)據(jù)進行轉(zhuǎn)換(即隱含轉(zhuǎn)換),基本原則是將低類型數(shù)據(jù)轉(zhuǎn)換為高類型數(shù)據(jù)。
char,short,int,unsigned,long,unsignedlong,float,double
低高*基本數(shù)據(jù)類型和表達式混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
——隱含轉(zhuǎn)換當參與運算的操作數(shù)必須是bool型時,如果操作數(shù)是其它類型,編譯系統(tǒng)會自動將非0數(shù)據(jù)轉(zhuǎn)換為true,0轉(zhuǎn)換為false。位運算的操作數(shù)必須是整數(shù),當二元位運算的操作數(shù)是不同類型的整數(shù)時,也會自動進行類型轉(zhuǎn)換,賦值運算要求左值與右值的類型相同,若類型不同,編譯系統(tǒng)會自動將右值轉(zhuǎn)換為左值的類型。*基本數(shù)據(jù)類型和表達式混合運算時數(shù)據(jù)類型的轉(zhuǎn)換
——顯式轉(zhuǎn)換語法形式(3種):類型說明符(表達式)(類型說明符)表達式類型轉(zhuǎn)換操作符<類型說明符>(表達式)類型轉(zhuǎn)換操作符可以是:
const_cast、dynamic_cast、
reinterpret_cast、static_cast顯式類型轉(zhuǎn)換的作用是將表達式的結(jié)果類型轉(zhuǎn)換為類型說明符所指定的類型。例:int(z),(int)z,static_cast<int>(z)
三種完全等價*基本數(shù)據(jù)類型和表達式語句空語句聲明語句表達式語句復(fù)合語句選擇語句循環(huán)語句跳轉(zhuǎn)語句標號語句
*表達式語句格式:表達式;表達式語句與表達式的區(qū)別:表達式可以包含在其他表達式中,而語句不可。例如:if((a=b)>0)t=a;不可寫為:if((a=b;)>0)t=a;*語句復(fù)合語句將多個語句用一對大括號包圍,便構(gòu)成一個復(fù)合語句例如{ sum=sum+i; i++;} *語句簡單的輸入、輸出向標準輸出設(shè)備(顯示器)輸出例:intx;cout<<"x="<<x;從標準輸入設(shè)備(鍵盤)輸入例:intx;cin>>x;*算法的基本控制結(jié)構(gòu)順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)*如何解決分支問題?例2-2輸入一個年份,判斷是否閏年。*算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain()
{ intyear;boolIsLeapYear;cout
<<
"Entertheyear:";cin
>>
year; IsLeapYear=((year%4==0&&
year%100!=0)
||
(year%400==0));
if(IsLeapYear)
cout
<<
year
<<
"isaleapyear“
<<
endl;
else
cout
<<
year
<<
"isnotaleapyear“
<<endl; return0;}*運行結(jié)果:Entertheyear:20002000isaleapyear*if語句
——三種形式if(表達式)語句例:if(x>y)cout<<x;if(表達式)語句1else語句2例:if(x>y)cout<<x;elsecout<<y;if(表達式1)語句1
elseif(表達式2)語句2
elseif(表達式3)語句3
…
else語句n*算法的基本控制結(jié)構(gòu)如何解決多分問題?例2-3輸入兩個整數(shù),比較兩個數(shù)的大小。*算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){ intx,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; return0;}*運行結(jié)果1:Enterxandy:58x<y運行結(jié)果2:Enterxandy:88x=y運行結(jié)果3:Enterxandy:128x>y*一般形式if()if()語句1else語句2elseif()語句3else語句4注意語句1、2、3、4可以是復(fù)合語句,每層的if與else配對,或用{}來確定層次關(guān)系。*if語句
——嵌套算法的基本控制結(jié)構(gòu)特殊的多分支結(jié)構(gòu)例2-4輸入一個0~6的整數(shù),轉(zhuǎn)換成星期輸出。*算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain()
{
intday; cin>>day; switch(day)
{
case0:
cout
<<
"Sunday"
<<
endl;
break;
case1:
cout
<<
"Monday"
<<
endl;
break;
case2:
cout
<<
"Tuesday"
<<
endl;
break;
case3:cout
<<
"Wednesday"
<<
endl;
break;
case4:
cout
<<
"Thursday"
<<
endl;
break;
case5:
cout
<<
"Friday"
<<
endl;
break;
case6:
cout
<<
"Saturday"
<<
endl;
break;
default:
cout
<<
"DayoutofrangeSunday..Saturday"
<<
endl;
break; } return0;}*switch語句一般形式switch(表達式){case常量表達式1:語句1case常量表達式2:語句2┆case常量表達式n:語句ndefault:語句n+1}*執(zhí)行順序以case中的常量表達式值為入口標號,由此開始順序執(zhí)行。因此,每個case分支最后應(yīng)該加break語句。每個常量表達式的值不能相同,次序不影響執(zhí)行結(jié)果??梢允嵌鄠€語句,但不必用{}。可以是整型、字符型、枚舉型算法的基本控制結(jié)構(gòu)使用switch語句應(yīng)注意的問題case分支可包含多個語句,且不用{}。表達式、判斷值都是int型或char型。若干分支執(zhí)行內(nèi)容相同可共用一組語句。*算法的基本控制結(jié)構(gòu)如何有效地完成重復(fù)工作例2-5求自然數(shù)1~10之和分析:本題需要用累加算法,累加過程是一個循環(huán)過程,可以用while語句實現(xiàn)。*算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;
while(i<=10){sum+=i;//相當于sum=sum+i;i++;
}cout<<"sum="<<sum<<endl; return0;}運行結(jié)果:sum=55*while語句形式while(表達式)語句
*可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先判斷表達式的值,若為true時,執(zhí)行語句。算法的基本控制結(jié)構(gòu)先執(zhí)行循環(huán)體,后判斷條件的情況例2-6
輸入一個整數(shù),將各位數(shù)字反轉(zhuǎn)后輸出。*算法的基本控制結(jié)構(gòu)#include<iostream>usingnamespacestd;intmain()
{ intn,right_digit,newnum=0; cout<<"Enterthenumber:"; cin>>n;
cout<<"Thenumberinreverseorderis";
do
{ right_digit=n%10; cout<<right_digit; n/=10;
//相當于n=n/10
}while(n!=0);cout<<endl; return0;}*運行結(jié)果:Enterthenumber:365Thenumberinreverseorderis563*do-while語句一般形式do語句while(表達式)*可以是復(fù)合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先執(zhí)行循環(huán)體語句,后判斷條件。
表達式為true時,繼續(xù)執(zhí)行循環(huán)體與while語句的比較:while語句執(zhí)行順序
先判斷表達式的值,為true時,再執(zhí)行語句算法的基本控制結(jié)構(gòu)對比下列程序:程序1:#include<iostre
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年P(guān)A12項目提案報告模范
- 2025年光伏電站建設(shè)與運營管理合同
- 2025年微博平臺廣告投放合作合同
- 2025年會議場地使用租約協(xié)議參考
- 2025年獸藥購銷合同樣本
- 2025年企業(yè)借款擔保合同標準文本
- 2025年二手住宅居間合同樣本
- 2025年醫(yī)療美容公司股權(quán)融資協(xié)議
- 2025年企業(yè)文化建設(shè)合同樣本
- 2025年鄉(xiāng)村道路路基工程承包合同樣本
- 《反洗錢法》知識考試題庫150題(含答案)
- 2025年中國X線診斷設(shè)備行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2023-2024小學(xué)六年級上冊英語期末考試試卷質(zhì)量分析合集
- 第六章幾何圖形 初步數(shù)學(xué)活動 制作紙魔方和繪制五角星說課稿2024-2025學(xué)年人教版數(shù)學(xué)七年級上冊
- 武漢市2024-2025學(xué)年度高三元月調(diào)考歷史試題卷(含答案)
- 2025年金城出版社有限公司招聘筆試參考題庫含答案解析
- 醫(yī)院保安管理服務(wù)項目實施方案
- 《工程建設(shè)質(zhì)量信得過班組建設(shè)活動準則》
- 2025-2025學(xué)年度第二學(xué)期七年級組工作計劃
- 妊娠期糖尿病指南2024
- 讀書心得《好老師征服后進生的14堂課》讀后感
評論
0/150
提交評論