九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

《C程序設計》上機指導與補充習題.pdf

上傳人:小** 文檔編號:16820894 上傳時間:2020-10-29 格式:PDF 頁數:52 大?。?81.18KB
收藏 版權申訴 舉報 下載
《C程序設計》上機指導與補充習題.pdf_第1頁
第1頁 / 共52頁
《C程序設計》上機指導與補充習題.pdf_第2頁
第2頁 / 共52頁
《C程序設計》上機指導與補充習題.pdf_第3頁
第3頁 / 共52頁

下載文檔到電腦,查找使用更方便

5 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C程序設計》上機指導與補充習題.pdf》由會員分享,可在線閱讀,更多相關《《C程序設計》上機指導與補充習題.pdf(52頁珍藏版)》請在裝配圖網上搜索。

1、C+程序設計上機指導與補充習題 第1部分 上機指導實驗一 Visual C+6.0 的上機操作(2學時)一、 實驗目的1熟悉VC+6.0集成開發(fā)環(huán)境。2掌握在VC+集成開發(fā)環(huán)境下編輯、編譯、連接和運行一個C+程序的步驟。3通過運行簡單的C+程序,初步了解C+源程序的結構和特點。二、實驗內容1. 啟動VisualC+6.0集成開發(fā)環(huán)境 Visual C+ 6.0是微軟公司1998年推出的visual studio系列產品之一,它提供了強大的編譯能力以及良好的界面操作性。能夠對Windows下的C+程序設計提供完善的編程環(huán)境。同時它對網絡、數據庫等方面的編程也提供相應的環(huán)境支持。使用Visual

2、C+ 6.0編制并運行程序也是編輯(把程序代碼輸入)、編譯(成目標程序文件)、連接(成可執(zhí)行程序文件)、運行(可執(zhí)行程序文件)四個步驟,其中第一步的編輯工作是最繁雜而又必須細致地由人工在計算機上來完成,其余幾個步驟則相對簡單,基本上由系統(tǒng)自動完成。確認你所使用的計算機是否已經安裝Visual C+6.0,若已經安裝,則執(zhí)行“開始”“程序”“Microsoft Visual Studio” “Visual C+6.0”命令即可啟動Visual C+ 6.0,否則,則應先安裝Visual C+ 6.0。啟動Visual C+ 6.0,進入到它的集成開發(fā)環(huán)境窗口,其具體窗口式樣如圖2-1 所示。 圖

3、1-1 VisualC+ 6.0集成開發(fā)環(huán)境式樣圖中所示Visual C+ 6.0的窗口從大體上可分為四部分。上部是菜單和工具條;左邊是工作區(qū)顯示窗口,這里將顯示處理過程中與項目相關的各種文件種類等信息;右邊是視圖區(qū),這里顯示和編輯程序文件的操作區(qū);下邊是輸出窗口區(qū),程序調試過程中,進行編譯、鏈接、運行時輸出的相關信息將在此處顯示。2創(chuàng)建工程使用Visual C+ 6.0編制并處理C+程序時要創(chuàng)建工程,因此必須先要了解Visual C+6.0的工程(有的資料也翻譯成項目)的概念,而工程又與工程工作區(qū)相關聯(lián)。實際上,VisualC+ 6.0 是通過工程工作區(qū)來組織工程及其各相關元素的,就好像是一

4、個工作間,以后程序所牽扯到的所有的文件、資源等元素都將放入到這一工作間中,從而使得各個工程之間互不干擾,使編程工作更有條理。這種思想反應到實現上就是一個工作區(qū)對應于一個獨立的文件 夾。簡單的情況下,一個工作區(qū)中用來存放一個工程,代表著某一個要進行處理的程序。如果需要,一個工作區(qū)中也可以用來存放多個工程,其中可以包含該工程的子工程或者與其有依賴關系的其他工程。創(chuàng)建工程工作區(qū)之后,系統(tǒng)將創(chuàng)建出一個相應的工作區(qū)文件,后綴為“.dsw”,用來存放與該工作區(qū)相關的信息;另外還將創(chuàng)建出的其他幾個相關文件是:工程文件(后綴是“.dsp”)以及選擇信息文件(后綴是“.opt”)等。在Windows環(huán)境下通過雙

5、擊工作區(qū)文件或工程文件都可以打開相應的工程。Visual C+ 6.0 已經預先為用戶準備好了近種不同的工程類型以供選擇,選定不同的類型意味著讓Visual C+ 6.0系統(tǒng)幫著提前做某些不同的準備以及初始化工作(例如,事先為用戶自動生成一個所謂的底層程序框架,并進行某些隱含設置,如隱含位置、預定義常量、輸出結果類型等)。工程類型中,其中有一個為“Win32 Console Application”的類型,稱之為控制臺應用,它是我們首先要掌握的、用來編制運行C+程序方法中最簡單的一種。此種類型的程序運行 時,將出現并使用一個類似于DOS的窗口,這個類似于DOS的窗口就是控制臺,通過它提供對字符

6、模式的各種處理與支持。實際上,用此種類型的工程開發(fā)的應用程序是具有字符界面的應用程序。此種類型的工程小巧而簡單,并且足以解決并支持本課程中涉及到的面向對象編程內容與技術,使我們把重點放在面向對象思想的理解及程序的設計,而并非界面處理等方面,至于Visual C+ 6.0支持的其他工程類型,我們在今后的學習和工作中遇到再逐漸了解、掌握與使用。創(chuàng)建工程的步驟為:首先,選擇“File”“New”“Projects”命令,會彈出如圖2-2所示的對話框,從左側選項中選擇“Win32 Console Application”項,在右側“Location”文本框中填入存放與工程工作區(qū)相關的所有文件及其相關信

7、息的文件夾的路徑及名稱,當然也可通過點擊其右部的“”按鈕去選擇并指定這一文件夾即子目錄位置。在“Project name”文本框中填入工程名,注意,此時Visual C+ 6.0會自動在其下的Location文本框中用該工程名建立一個同名的子目錄,隨后的工程文件以及其他相關文件都將存放在這個目錄下。 圖1-2 VisualC+ 6.0新建工程對話框然后,單擊OK進入下一個對話框,如圖2-3所示。 圖1-3新建控制臺工程類型選擇對話框從圖中可以看到有四種類型的控制臺工程可供選擇:若選擇“An empty project”項將生成一個空的工程,工程內不包括任何東西。若選擇“A simple app

8、lication”項將生成包含一個空的main 函數和一個空的頭文件的工程。若選“A Hello World! application”項將生成包含一個有顯示出“Hello World!”字符串的輸出語句的main 函數和一個空的頭文件的工程。若選擇“An application that supports MFC”項的話,可以利用Visual C+ 6.0所提供的基礎類庫來進行編程。選擇“Finish”,系統(tǒng)自動建立一個基于控制臺的工程。建立好工程的Visual C+ 6.0系統(tǒng)界面如圖2-4所示。 圖1-4建立控制臺工程后的系統(tǒng)界面 3. 編輯源程序工程建好之后,下一步要做的工作就是在工程

9、中建立一個源程序并編輯它。選擇時“Project”“Add To Project”“New”命令,打開新建對話框,在“Files”標簽下選擇“C+ Source File”類型,在右邊的“File”文本框中填入源程序的文件名,單擊“OK”按鈕完成源程序的創(chuàng)建。界面如圖2-5所示。 圖1-5新建源程序的對話框界面建立好源程序后會在Visual C+ 6.0右邊的視圖區(qū)打開并顯示該源程序,在這里我們可以鍵入代碼,編輯源程序,如圖2-6所示。 圖1-6編輯源程序的界面4. 編譯、連接、運行程序 源程序編輯完成后,首先選擇執(zhí)行“Build”菜單中的“Compile”項,對源程序進行編譯。若編譯中發(fā)現錯

10、誤或警告,將在Output窗口中顯示出它們具體的出錯或警告信息以及所在的行,可以通過這些信息的提示來修改程序中的錯誤或警告。編譯通過后,可以選擇菜單的第二項Build 來進行鏈接生成可執(zhí)行程序。在鏈接中出現的錯誤也將顯示到Output窗口中。最后就可以運行程序,選擇Execute項,Visual C+ 6.0將運行已經編好的程序,執(zhí)行后將出現一個結果界面,如圖2-7所示。其中的“press any key to continue”是由系統(tǒng)產生的,使得用戶可以瀏覽輸出結果,直到按下了任一個鍵盤按鍵時再返回到編輯界面。 圖1-7程序運行的界面這些編譯、生成、執(zhí)行這些操作也可以通過單擊工具條上的相應

11、的命令按鈕來快捷的完成。另外,如果源程序編輯后沒有編譯就單擊了“執(zhí)行”按鈕,系統(tǒng)會自動的進行編譯、連接和執(zhí)行操作;如果源程序已經編譯過了,即上次運行后沒有編輯源程序,這時單擊“執(zhí)行”按鈕,系統(tǒng)就不再編譯和連接而是直接執(zhí)行上次生成的可執(zhí)行程序了。三、鞏固練習按照上面講述的使用Visual C+ 6.0編制并運行程序的步驟,編寫一個在屏幕上輸出信息“Welcome to C+ World!”的程序并運行。實驗二 C+對C的擴充(4學時)一、實驗目的 1了解在面向過程程序設計中C+對C語言的擴充與增強,并善于在編寫程序過程中應用這些新的功能。2進一步熟悉在所用的VC+集成開發(fā)環(huán)境下編輯、編譯、連接和

12、運行C+程序的方法。 3進一步熟悉C+程序的結構和編程方法。二、實驗內容1請先閱讀下面的2個程序,寫出程序運行的結果,然后再上機運行程序,驗證自己分析的結果是否正確。程序1:#include /包含頭文件命令using namespace std; /使用名字空間stdint main() coutThis is ; couta C+ ;cout program.endl;return 0;程序2:#include /包含頭文件命令using namespace std; /使用名字空間stdint main() int a,b,c; /定義三個變量a、b、ccoutPlease input

13、to a and b:ab; / 等待用戶從鍵盤輸入數據c=a+b;cout a+b= ;coutc;coutendl;return 0;2輸入以下程序,進行編譯,觀察編譯結果,如果有錯誤,請修改程序,再進行編譯,直到沒有錯誤,然后進行連接和運行,并分析運行結果。#include /包含頭文件命令using namespace std; / 使用名字空間stdint main() int a,b; /定義兩個變量a和bcoutPlease input to a and b: ab; /等待用戶從鍵盤輸入數據cout Max= max(a,b) y) ?x:y; /求兩個數中的大者的函數3編寫一

14、個函數,用來求2個或3個正整數中的最大數,并在主函數中調用此函數。 (1) 用不帶默認參數的函數實現。(2) 用帶默認參數的函數實現。對比兩種方法,分析使用帶默認參數的函數的優(yōu)點和應用場合??偨Y如何選擇默認參數的值。請分析本題中默認參數的值應該在什么范圍選取。4編寫一個函數,用來實現對3個數按由小到大的順序排序,并在主函數中調用此函數。要求函數的形參用以下兩種形式實現:(1)使用指針形參(2)使用引用形參5編寫程序,用同一個函數名實現n個數據的升序排序,數據類型可以是整型、單精度型、字符串型。用重載函數實現。6編寫程序,將兩個字符串連接起來,結果取代第一個字符串。實驗三、類和對象(10學時)一

15、、實驗目的 1掌握聲明類的方法,類和類的成員的概念以及定義對象的方法。2初步掌握用類和對象編制基于對象的程序。3學習檢查和調試基于對象的程序。4掌握類的構造函數和析構函數的概念和使用方法。5掌握對象數組、對象的指針及其使用方法。6掌握共用數據的保護方法二、實驗內容1檢查下面的程序,找出其中的錯誤,并改正之。然后上機調試,使之能正常運行。(1)#include using namespace std;class Clock void set_clock(void);void show_clock(void);int hour;int minute;int second;Clock clock;i

16、nt main() set_clock();show_clock (); int set_clock(void) cint.hour;cint.month;cint.second;int show_clock(void) coutt.hour:t.minute:t.secondendl;(2)#include using namespace std;class A public:void A(int i=0)m=i;void show()coutm;void A()private:int m;int main() A a(5);a.m+=10;a.show();return 0;(3) cla

17、ss X private:int a=0;int const int c;void setA(int i)a=i;X(int i) a=i;public:int X() a=b=0;X(int i, int j, int k) a=i; b=j; c=k; setC(int k) const c=c+k;int main() X x1;X x2(2) ; X x3(1,2,3) ;x1.setA(3) ;return 0 ;2請先閱讀下面的程序,寫出程序運行的結果,然后再上機運行程序,驗證自己分析的結果是否正確。(1)#include using namespace std;class tes

18、t public:test( ); int getint( )return num;float getfloat( )return fl;test( );private:int num;float fl;test:test( ) cout Initalizing default endl;num=0;fl=0.0;test:test( ) cout Destructor is active endl; int main( ) test array2;cout array1.getint( ) array1.getfloat( ) endl;return 0;(2)#includeusing n

19、amespace std;#includeclass Xpublic:X(int x1,char *x2,float x3):a(x1),c(x3) b=new charsizeof(x2)+1; strcpy(b,x2);X():a(0),b(X:X(),c(10) X(int x1,char *x2=X:X(.),int x3=10):a(x1),b(x2),c(x3)X(const Xb=X:X(const X c=other.c;void print() couta=atb=btc=cprint();B.print();C.print();D.print();return 0;3某單位

20、的職工工資包括基本工資Wage,崗位津貼Subsidy,房租Rent,水費WaterFee,電費ElecFee。設計實習工資管理的類Salary,該類的形式如下:class Salarypublic:Salary()初始化工資數據的各分項數據為0Salary() 初始化工資數據的各分項數據 void setXX(double f) XX=f; double getXX() return XX; double RealSalary() /計算實發(fā)工資Private:Bouble Wage, Subsidy, Rent, WaterFee, ElecFee;其中,成員函數setXX()用于設置工資

21、的各分項數據,成員函數getXX()用于獲取工資的各分項數據,XX代表Wage、Subsidy等數據成員,如Wage對應的成員函數則為setWage()和getWage()。實發(fā)工資=Wage+Subsidy-Rent-WaterFee-ElecFee編程完善該類的設計,并在主函數中測試該類的各成員函數。4設計一個時鐘類Clock。數據成員包括hour(小時)、minute(分鐘)、second(秒)。要 求用成員函數實現以下功能:(1)創(chuàng)建具有指定時鐘(小時、分鐘、秒)的Clock對象,默認時鐘為00:00:00。(2)動態(tài)地設置時、分、秒。(3)在屏幕上按“時:分:秒”的格式顯示時鐘。(4

22、)在主函數中測試該類。 5設計一個職工類Employee。數據成員包括字符串型的name(姓名)、street(街道地址)、city(市)、province(?。?、postalcode(郵政編碼)。要求用成員函數實現以下功能:(1)創(chuàng)建職工對象時,可以按不同方式指定職工信息。(2)動態(tài)地設置職工對象信息。(3)在屏幕上打印職工信息。(4)在主函數中測試該類。6需要求3個三角形的體積,請編寫一個基于對象的程序。數據成員包括三角形的三邊長a、b、 c。要求用成員函數實現以下功能:(1) 定義構造函數完成長方柱的初始化;(2) 求三角形的周長;(3) 求三角形的面積;(4) 輸出三角形信息。7下面是

23、一個整型數組類intArray的聲明,請給出該類所有數據成員的類外定義。 class intArraypublic:intArray(int size);/構造函數intArray(const intArray /復制構造函數intArray();/析構函數bool Set(int i, int elem);/設置第i個數組元素的值,設置成功返回true,失敗返回falsebool Get(int i, int /獲取第i個數組元素的值,獲取成功返回true,失敗返回falseint Length( ) const;/獲取數組的長度void ReSize ( int size ); /重置數組

24、void Print();/輸出數組private:int *element; /指向動態(tài)數組的指針int arraysize; /數組的當前長度 ;8下面是一個整型鏈表類intList的聲明,請給出該類所有數據成員的類外定義。class intListprotected:struct NodeNode * next;int data;Node * pFirst;public:intList();/構造函數intList(); /析構函數/向鏈表的第i個位置插入一個元素,插入成功返回true,失敗返回false bool Insert(int i, int elem) ;/刪除鏈表的第i個位置

25、的元素,刪除成功返回true,失敗返回falsebool Remove(int i, int int * Find(int elem)const; /查找值為elem的元素,返回指向該元素的指針int Length( ) const;/返回鏈表長度 void Printlist();/輸出鏈表;9下面是一個整型堆棧類intStack的聲明,請給出該類所有數據成員的類外定義。class intStackpublic:intStack (int size=10);/構造函數intStack ();/析構函數bool Push(int elem);/入棧操作bool Pop(int /出棧操作int

26、 Length( ) const; /獲取棧中元素的個數private:int *data; /指向動態(tài)數組的指針int top; /棧頂指針 int size; /堆棧的容量;實驗四、繼承與組合(6學時)一、實驗目的1了解繼承在面向對象程序設計中的重要作用。2進一步理解繼承與派生的概念。3掌握通過繼承派生出一個新的類的方法。4了解虛基類的作用和用法。 5掌握類的組合二、實驗內容1請先閱讀下面的程序,寫出程序運行的結果,然后再上機運行程序,驗證自己分析的結果是否正確。(1) #include using namespace std;class Apublic:A()coutA:A() call

27、ed.n; virtual A()coutA:A() called.n;class B:public A public:B(int i) coutB:B() called.n; buf=new chari;virtual B() delete buf;coutB:B() called.n;private:char *buf;void fun(A *a) coutMay you succeed!delete a; int main() A *a=new B(15);fun(a);return 0;(2)#includeusing namespace std;class Apublic:A(int

28、 a,int b):x(a),y(b) coutA constructor.endl; void Add(int a,int b) x+=a;y+=b;void display() cout(x,y); A()coutdestructor A.endl;private:int x,y;class B:private Aprivate:int i,j;AAobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d) ,Aobj(1,1) coutB constructor.endl;void Add(int x1,int y1,int x2,int

29、 y2) A:Add(x1,y1); i+=x2; j+=y2;void display()A:display();Aobj.display(); cout(i,j)endl;B()coutdestructor B.endl;int main() B b(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();return 0;(3) #includeusing namespace std;class Apublic:A(int a):x(a) coutA constructor.xendl; int f()return +x;A()coutdestru

30、ctor A.endl;private:int x;class B:public virtual Aprivate:int y; AAobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c) coutB constructor.yendl;int f()A:f();Aobj.f();return +y;void display() coutA:f()tAobj.f()tf()endl; B()coutdestructor B.endl;class C:public Bpublic: C(int a,int b,int c):B(a,b,c),A(0)

31、coutC constructor.endl;class D:public C,public virtual Apublic:D(int a,int b,int c):C(a,b,c),A(c) coutD constructor.endl; D()coutdestructor D.endl;int main() D d(7,8,9);d.f();d.display();return 0;(4)#include using namespace std;class Base1 public:Base1() coutclass Base1!endl;class Base2 public:Base2

32、() coutclass Base2!endl; ;class Level1:public Base2,virtual public Base1public:Level1() coutclass Level1!endl;class Level2: public Base2,virtual public Base1public: Level2() coutclass Level2!endl; class TopLevel:public Level1,virtual public Level2public:TopLevel() coutclass TopLevel!endl;int main()

33、TopLevel obj;return 0; 2某出版系統(tǒng)發(fā)行圖書和磁帶,利用繼承設計管理出版物的類。要求如下:建立一個基類Publication存儲出版物的標題title、出版物名稱name、單價price及出版日期date。用Book類和Tape類分別管理圖書和磁帶,它們都從Publication類派生。Book類具有保存圖書頁數的數據成員page,Tape類具有保存播放時間的數據成員playtime。每個類都有構造函數、析構函數,且都有用于從鍵盤獲取數據的成員函數inputData(),用于顯示數據的成員函數display()。3分別定義教師類Teacher和干部類Cadre,采用多重繼

34、承的方式由這兩個類派生出新類Teacher_Cadre(教師兼干部類)。要求:(1)在兩個基類中都包含姓名、年齡、性別、地址、電話數據成員。(2)在Teacher類中還包含數據成員職稱title,在Cadre類中還包含數據成員職務post,在Teacher_Cadre類中還包含數據成員工資wage。(3)對兩個基類中的姓名、年齡、性別、地址、電話數據成員用相同的名字,在訪問這類數據成員時,指定作用域。 (4)在類體中聲明成員函數,在類外定義成員函數。(5)在派生類Teacher_Cadre的成員函數show中調用Teacher類中的display函數,輸出姓名、年齡、性別、地址、電話,然后再用

35、cout語句輸出職務和工資。4按下列要求編寫程序。(1)定義一個分數類Score。它有3個數據成員:Chinese /語文課成績English /英語課成績Mathematics /數學課成績2個構造函數:無參的和帶參數的3個成員函數:是否帶參數根據需要自定sum() /計算三門課總成績print() /輸出三門課成績和總成績 modify() /修改三門課成績(2)定義一個學生類Student。它有3個數據成員:Num /學號 Name /姓名MyScore /成績2個構造函數:無參的和帶參數的3個成員函數:是否帶參數根據需要自定sum() /計算某學生三門課總成績print() /輸出某學

36、生學號、姓名和成績modify() /修改某學生學號、姓名和成績(3)在主函數中,先定義一個學生類對象數組,再通過for循環(huán)給對象數組賦上實際值,最后輸出對象數組個元素的值。5編寫一個程序實現小型公司的人員信息管理系統(tǒng)。該公司雇員(employee)包括經理(manager),技術人員(technician)、銷售員(salesman)和銷售部經理(salesmanager)。要求存儲這些人員的姓名、編號、級別、當月薪水,計算月薪并顯示全部信息。程序要對所有人員有提升級別的功能。為簡單起見,所有人員的初始級別均為1,然后 進行升級,經理升為4級,技術人員和銷售部經理升為3級,銷售員仍為1級。月

37、薪計算辦法是:經理拿固定月薪8000元,技術人員按每小時100元領取月薪,銷售員按該當月銷售額4%提成,銷售經理既拿固定月工資也領取銷售提成,固定月工資為5000元,銷售提成為所管轄部門當月銷售額的5。實驗五、多態(tài)性與虛函數(4學時)一、實驗目的1了解多態(tài)性的概念。2了解虛函數的作用及使用方法。 3了解靜態(tài)關聯(lián)和動態(tài)關聯(lián)的概念和用法。4了解純虛函數和抽象類的概念和用法。二、實驗內容1閱讀下面的程序,寫出程序運行的結果。#include using namespace std;class Baseprotected:int n;public: Base (int m) n=m+; virtual

38、 void g1()coutBase:g1().nendl; g4();virtual void g2()coutBase:g2().+nendl;g3();void g3()coutBase:g3().+nendl; g4();void g4()coutBase:g4().+nendl; ;class Derive:public Baseint j;public:Derive(int n1,int n2):Base(n1) j=n2; void g1()coutDeri:g1().+nendl;g2();void g3()coutDeri:g2().+nendl;g4();int main(

39、)Derive Dobj(1,0);Base Bobj=Dobj;Bobj.g1();cout-g1();cout-endl;Base bobj2.g1();cout-endl;Dobj.g1();return 0;2先建立一個點類Point,包含數據成員x,y(坐標點)。以它為基類,派生出圓類Circle,增加數據成員radius(半徑),再以Cirlcle類為直接基類,派生出圓柱體類Cylinder,再增加數據成員height(高)。要求:(1)每個類都有構造函數、用于從鍵盤獲取數據的成員函數set(),用于顯示數據的成員函 數display()。(2)用虛函數輸出各類對象信息。3先建立一

40、個職工類Employee,包含數據成員name(職工姓名),ID(職工編號)。以它為基類,派生出經理類Manager和技術人員類Technician,在經理類中增加數據成員salary(代表經理的月工資),在技術人員類中增加數據成員wage(代表每小時的工資數)和hours(月工作時數)。在定義類時,所有類中必須包含有構造函數、析構函數、修改和獲取所有數據成員的函數,以及純函數計算職工的工資,輸出職工的信息。4下列shape類是一個表示形狀的抽象類,area( )為求圖形面積的函數,total( )則是一個通用的用以求不同形狀的圖形面積總和的函數。請從shape類派生三角形類(triangle

41、)、矩形類(rectangle),并給出具體的求面積函數。實驗六、面向對象的妥協(xié)(2學時)一、實驗目的 1掌握友元的概念、友元函數的定義與使用方法。2掌握靜態(tài)數據成員與靜態(tài)成員函數的定義與使用方法。 二、實驗內容1設計并測試點類Point,其數據成員是直角坐標系的點坐標,友元函數distance用來計算兩點間的距離。2設計一個書類Book,能夠保存書名、定價,所有書的本數和總價。實驗七、運算符重載(2學時)一、實驗目的1掌握運算符重載的規(guī)則。 2掌握幾種常用的運算符重載的方法。3了解轉換構造函數的使用方法。4了解在Visual C+6.0環(huán)境下進行運算符重載要注意的問題。二、實驗內容1閱讀下面

42、的程序,寫出程序運行的結果。(1)#includeclass ABCint a,b,c;public: ABC(int x,int y,int z):a(x),b(y),c(z)friend ostream ;ostream return out;int main()ABC obj(10,20,30);coutobj;return 0; (2)#includeclass Numberint n;public: Number(int x):n(x)Number return *this; Number return *this;friend Number friend Number void d

43、isplay()coutThis Number is: nendl;Number return o; Number return o; int main()Number N1(10);+ + +N1;N1.display(); N1+;N1.display();-N1;N1.display();N1- - -;N1.display();return 0;2設計并實現一個日期類Date,要求:(1)可以建立具有指定日期(年、月、日)的Date對象,默認日期是2009.1.1。(2)可以從輸出流輸出一個格式為“年-月-日”的日期,其中年是四位數據,月、日可以是一位也可以是兩位數據。(3)可以動態(tài)地

44、設置年、月、日。 (4)可以用運算符= =、!=、對兩個日期進行比較。(5)可以用運算符+、-、+=、-=等完成天數的加減一天或若干天的操作(6)Date類必須能夠正確表達日期,不會出現類似于13月,32日一類的情況。Date類還必須處理閏年的問題,閏年包括:所有能被400整除的年份,以及能被4整除同時又不能被100整除的年份。(7)寫出主函數對該類進行測試。3下面是一個數組類CArray的定義。要求:(1)在此基礎上增加print()成員函數打印數組,(2)重載“=”、“+”、“-” 運算符使之能對該數組類對象進行賦值、加減運算。(3)寫出主函數對該類進行測試。class CArraypri

45、vate:int* p_arr; int size;public:CArray(); /缺省構造函數CArray(int* p_a,int s); /構造函數CArray(const CArray /復制構造函數 CArray();/析構函數int operator(int pos) const; /訪問數組元素值的下標運算符重載函數int /設置數組元素值的下標運算符重載函數Carray ;CArray: CArray() p_arr=NULL; size=0;CArray: CArray(int* p_a,int s) if(s0) size=s; p_arr=new intsize; f

46、or(int i=0;isize;i+) p_arri=p_ai;Else p_arr=NULL; size=0; CArray:CArray(const CArray if(size) p_arr=new intsize;for(int i=0;i=size) return p_arrsize-1;if(pos=size) return p_arrsize-1;if(pos0) return p_arr0; return p_arrpos;4下面是一個自定義字符串類的聲明。請寫出該類所有成員函數的類外定義代碼。class string private:unsigned buflen;char

47、 * buffer;public:string();/構造函數string(unsigned);string(char);string(const char*);string(const string /復制構造函數string();/析構函數/重載賦值運算符stringstring char *operator+=(const char *right);friend string operator+(const string /字符串連接string operator()(unsigned start,unsigned len); /取子串unsigned length()const; /求

48、字符串長度char /訪問單個字符int compare(const string /字符串比較operator const char *()const; /到普通c字符串的轉換friend ostream /字符串的輸出;實驗八、模板(2學時)一、實驗目的 1函數模板的定義與調用。2掌握類模板的聲明與使用方法。二、實驗內容1設計一個函數模板,實現兩數的交換,并用int、float、double、char類型的數據進行測試。2設計一個函數模板,實現從int、float、double、char類型的數組找出最大值元素。提示:可用類型參數傳遞數組、用非類型參數傳遞數組大小,為了找出char*類型數

49、組中的最大值元素,需要對該類型進行重載或特化。3編寫一個順序表類模板。 4建立兩個int類型的向量vector,利用merge算法將其合并,然后用sort算法對合并后的向量進行排序,最后輸出排序結果。 實驗九、輸入輸出流(自學)一、實驗目的1深入理解C+的輸入輸出的含義與其實現方法。2掌握標準輸入輸出流的應用,包括格式輸入輸出。3掌握對文件的輸入輸出操作。二、實驗內容1閱讀下面的程序,寫出程序運行的結果。 (1)#include#includeusing namespace std;int main()fstream out,in;out.open(a.dat,ios:out);outon f

50、actn;outoperating file n;outis the same as inputing/outputing data on screen.n;out.close();char buffer80;in.open(a.dat,ios:in); while(!in.eof() in.getline(buffer,80);coutbufferendl;return 0;(2)#include#include#includeusing namespace std;class Worker private:int number ,age;char name20;double sal;pub

51、lic: Worker()Worker(int num,char* Name,int Age, double Salary):number(num),age(Age),sal(Salary)strcpy(name,Name); void display() coutnumbertnametagetsalendl; ;int main()ofstream out(Worker.dat,ios:out|ios:binary);Worker man=Worker(1,張三,23,2320),Worker(2,李四,32,2321),Worker(3,王五,34,2322),Worker(4,劉六,2

52、7,2324),Worker(5,曉紅,23,2325),Worker(6,黃明,50,2326);for(int i=0;i6;i+) out.write(char*)out.close();Worker s1; ifstream in(Employee.dat,ios:in|ios:binary);in.seekg(2*(sizeof(s1),ios:beg);in.read(char*)s1.display();in.seekg(0,ios:beg);in.read(char*)s1.display();in.close();return 0;2已知數據文件IN.DAT中存有20個整數,

53、每個整數間用空格分隔。有一類Array的結構如下:class Array int A20;public:Array()for(int i=0;i20;i+) Ai=0;int getNumberA(Array void getdata();/讀數據函數void max_min(int /排序函數void putdata(int /寫結果數據函數;其中:成員函數getdata()的功能為:從數據文件IN.DAT中把20個數據讀出來存入數據成員A中。成員函數max_min(int int main() int a=8,5,5,0,6,0,8,5,5,0,7,8;for(int i=0;i5;i+)

54、try coutin for loop.it;if(ai+1=0) throw 1;coutai/ai+1=ai/ai+1endl; catch (int) coutendendl; return 0;(2)#includeusing namespace std;void err(int t) try if(t100) throw biger than 100;else if(t-100) throw t;else coutt in right range.endl; catch(int x) couterror-xendl;catch(char *s) couterror-sendl;cat

55、ch(float f) couterror-fendl; int main()err(200);err(99);err(-1210);return 0;(3)#includeusing namespace std;class excepprivate:char *ch;public: excep(char *m=exception class.)ch=m;void print()cerrchendl;void err1()coutenter err1n;throw excep(exception);void err2()trycoutenter err2n; err1(); catch(int

56、)cerrerr2:catchn; throw; void err3()try coutenter err3n; err2(); catch(.)cerrerr3:chtchn; throw; int main()try err3(); catch(.) cerrmain:catchn; return 0;2設計日期類Date,該類具有三個整型數據成員year,month,day,具有多個重載的構造函數,修改日期的函數,分別獲取年、月、日的函數,輸出日期的函數。要求該類實現如下的異常處理功能:InvalidDay:對于日期day成員,不能接受大于31或小于1的值,當傳遞給類的日期大于31或小于

57、1時,拋出這種類型的異常。InvalidMonth:對于月month,不能接受大于12或小于1的值,當傳遞給類的日期大于12 或小于1時,拋出這種類型的異常。 第2部分 補充習題第1章 面向對象程序設計概述一、選擇題1、C+是( )。A 面向對象的程序設計語言B 結構化程序設計語言C 既是面向對象的程序設計語言又是結構化的程序設計語言D 非結構化的程序設計語言2、C+語言屬于( )。 A 機器語言 B 低級語言 C 中級語言 D 高級語言3、下面關于對象概念的描述中,錯誤的是( )。A 對象就是C語言中的結構變量B 對象代表著正在創(chuàng)建的系統(tǒng)中的一個實體C 對象是一個屬性和操作(或方法)的封裝體

58、D 對象之間的信息傳遞是通過消息進行的4、下面關于類概念的描述中,錯誤的是( )。A 類是抽象數據類型的實現B 類是具有共同行為的若干對象的統(tǒng)一描述體C 類是創(chuàng)建對象的樣板D 類就是C語言中的結構體類型5、下列關于C+類的描述中錯誤的是( )。A 類與類之間可以通過一些手段進行通信和聯(lián)絡 B 類用于描述事物的屬性和對事物的操作C 類與類之間必須是平等的關系,而不能組成層次關系D 類與類之間可以通過封裝而具有明確的獨立性6、面向對象程序設計思想的主要特征中不包括( )。A 封裝性 B 多態(tài)性 C 繼承性 D 功能分解,逐步求精二、填空題1、構成對象的兩個主要因素是 和 ,其中 用于描述對象的靜態(tài)

59、特征,用于描述對象的動態(tài)特征。2、類和對象的關系可表述為:類是對象的 ,而對象則是類的 。3、封裝包含兩方面含義,一是用 把 包裝起來,二將對象中某些部分 。4、 是指特殊類自動地擁有或隱含地復制其一般類的全部屬性與操作。5、面向對象的軟件工程包括的五個階段為: , , , , 。 第2章 C+基礎知識一、選擇題1、下列關于C+語言的發(fā)展說法錯誤的是( )。A C+語言起源于C語言 B C+語言最初被稱為“帶類的C”C 在1980年C+被命名 D 在1983年C+被命名2、C+語言是以 語言為基礎逐漸發(fā)展而演變而成的一種程序設計語言。( )A Pascal B C C Basic D Simu

60、la673、下列關于C+與C語言關系的描述中錯誤的是( )。A C+是C語言的超集B C+是C語言進行了擴充C C+和C語言都是面向對象的程序設計語言 D C+包含C語言的全部語法特征4、下列C+標點符號中表示行注釋開始的是( )。A # B ; C / D 5、每個C+程序都必須有且僅有一個( )。A 預處理命令 B 主函數 C 函數 D 語句6、C+對C語言做了很多改進,下列描述中哪一項使得C語言發(fā)生了質變,即從面向過程變成面向對象( )。A 增加了一些新的運算符 B 允許函數重載,并允許設置默認參數C 規(guī)定函數說明必須用原型 D 引進類和對象的概念7、對定義重載函數的下列要求中,錯誤的是

61、( )。A 要求參數的個數不同 B 要求參數中至少有一個類型不同C 要求參數個數相同時,參數類型不同 D 要求函數的返回值不同8、在函數的返回值類型與返回值表達式的類型的描述中,錯誤的是( )。 A 函數返回值的類型是在定義函數時確定,在函數調用時是不能改變的B 函數返回值的類型就是返回值表達式的類型C 函數返回值表達式類型與返回值類型不同時,函數表達式類型應轉換成返回值類型D 函數返回值類型確定了返回值表達式的類型9、下列不正確的選項是( )。A C+語言是一種既支持面向過程程序設計,又支持面向對象程序設計的混合型語言B 標點符號是在程序中起分割內容和界定范圍作用的一類單詞C iostrea

62、m是一個標準的頭文件,定義了一些輸入輸出流對象D 類與類之間不可以進行通信和聯(lián)絡10、下列表示引用的方法中,正確的是( )。已知:int k=1000;A int B char C int D float 二、填空題 1、C+既可以用來進行面向 程序設計,又可以進行面向 程序設計。2、常量分成兩種,一種是 常量,另一種是 常量。3、 就是某一變量的別名,對其操作與對變量直接操作完全一樣。4、按函數在語句中的地位分類,可以有以下3種函數調用方式: , 。 5、函數與引用聯(lián)合使用主要有兩種方式:一是 ;二是 。6、頭文件由三部分內容組成: , , 。三、程序閱讀題1、分析下面的執(zhí)行結果#inclu

63、deusing namespace std;int main() int a,b,sum; / 定義a,b,sum三個整型變量a=43; / 把整數常量賦給變量ab=37;sum=a+b; / a與b相加的和賦給變量sumcoutThe sum issum;coutendl; / endl 是回車換行的作用return 0;2、分析以下程序的執(zhí)行結果#includeusing namespace std;int main() int a;int / 變量引用b=10;couta=aendl;return 0;3、下列程序的執(zhí)行結果為#includeusing namespace std;voi

64、d mian() int n=10;int* pn=int* (*pn)+;coutn=nendl;(*rn)+;cout”n=”nendl;4、下面程序的運行結果是#includeusing namespace std;void fun(int p=a; a=b; b=p;void exchange(int if(ac)fun(a,c);if(bc)fun(b,c);int main() int a,b,c;a=12; b=639;c=78;exchange(a,b,c);couta=a,b=b,c=cendl;return 0;5、下面的程序輸出結果為#includeusing namespace std;int main()int *ir; int i;ir=i=17;coutint i=iendl;coutint

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!