[工學]C實驗報告附答案_第1頁
[工學]C實驗報告附答案_第2頁
[工學]C實驗報告附答案_第3頁
[工學]C實驗報告附答案_第4頁
[工學]C實驗報告附答案_第5頁
已閱讀5頁,還剩74頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、面向對象程序設計c#實驗指導及報告書 / 學年 第 學期姓 名:_學 號:_班 級:_指導教師:_計算機科學與工程學院2011實驗目錄實驗一 創建簡單的.net應用程序3實驗二 選擇和循環10實驗三 數組和字符串處理15實驗四 類和對象編程練習21實驗五 繼承與多態編程練習28實驗六 接口和集合36實驗七 文件和輸入輸出45實驗八 代理和事件50實驗一 創建簡單的.net應用程序一、實驗目的1了解c# 基本程序結構;2熟悉命令行方式下c#程序編寫、編譯、調試和執行過程;3了解vs2005集成開發環境的功能和特點。二、預習內容1一個c#應用程序,從編寫到運行,要經過哪幾個步驟?三、實驗內容1.

2、調試并運行下面程序,并寫出運行結果:using system;class simpleprogramstatic void main() console.writeline(“hello!nworld.”);運行結果(注意,按照屏幕輸出格式寫):hello!world2. 調試并運行下面程序,并寫出運行結果:using system;class startrianglestatic void main(string args) int i, j, k; for (i = 0; i = 3; i+) for (j = 0; j = 2 - i; j+) console.write( ); /一個

3、空格 for (k = 0; k = 2 * i; k+) console.write(*); console.writeline(); console.readkey();運行結果(注意,按照屏幕輸出格式寫): * * *3. 下面是一個模擬計算器的程序(兩個操作數都為正整數)。計算器應該能夠執行以下算術操作:加法、減法、乘法、除法。調試并運行下面程序,驗證當從鍵盤輸入8和2兩個整數時,選擇進行乘法時的計算結果。注意:程序輸入時要區分大小寫。using system;class calcnumberint number1,number2;char option;int result;publ

4、ic void number()console.writeline(“enter the first number:”);number1=convert.toint32(console.readline();console.writeline(“enter the second number:”);number2=convert.toint32(console.readline();console.writeline(“main menu”);console.writeline(“1.addition”);console.writeline(“2.subtraction”);console.w

5、riteline(“3.multiplication”);console.writeline(“4.division”);console.writeline(“enter the operation you want to perform:”);option=convert.tochar(console.readline();switch(option)case 1: result=number1 + number2; break;case 2: result=number1 - number2; break;case 3: result=number1 * number2; break;ca

6、se 4: result=number1 / number2; break;default: console.writeline(“invalid option”); return;console.writeline(“the result is 0” , result);class testcalcstatic void main(string args) calcnumber obj = new calcnumber();obj.number();從鍵盤輸入8和2兩個整數時, (1) 選擇3時的運行結果:(2) 選擇5時的運行結果:(1): the result is 16(2): inv

7、alid option從鍵盤輸入的8和two時(第二個數為非整數),程序運行結果:顯示錯誤4.在保持功能不變的情況下,改寫上例代碼如下:using system;class calcnumberint number1,number2;char option;public void getnumber()console.writeline(“enter the first number:”);number1=convert.toint32(console.readline();console.writeline(“enter the second number:”);number2=conver

8、t.toint32(console.readline();public void getoption() console.writeline(“main menu”);console.writeline(“1.addition”);console.writeline(“2.subtraction”);console.writeline(“3.multiplication”);console.writeline(“4.division”);console.writeline(“enter the operation you want to perform:”);option = convert.

9、tochar(console.readline();public int compute()int result;switch(option)case 1: result=number1 + number2; break;case 2: result=number1 - number2; break;case 3: result=number1 * number2; break;case 4: result=number1 / number2; break;default: throw new invalidoperationexception (“invalid option”);retur

10、n result;class testcalcstatic void main(string args) trycalcnumber obj = new calcnumber();obj.getnumber();obj.getoption();int result = obj.compute();console.writeline(“the result is 0” , result);catch(exception e)console.writeline(e.message);比較4和3的運行結果是否完全相同:結果完全相同將main()函數中的try和catch部分代碼去掉后,運行結果又會怎

11、樣?結果無法運行體會程序4的結構與程序3相比哪一個更好,好在哪里?程序4更好因為程序4考慮問題更全面,結果更精確四、實驗小結在程序的調試過程中,會遇到哪些問題?應該如何去解決這些問題?五、選做實驗下面程序有錯誤,請在調試過程中找出錯誤,并加以修改。根據運行結果說明該程序解決的是什么問題?請寫出出錯信息及修改方法:程序源代碼:using system;class appstatic long getfact(int n)long ret = 1 ;for(i = 1; i n; i+)ret *= i;return ret;static void main()int n = 5; console

12、.writeline(“0 != 1”, n , getfact(n);運行結果:程序求解的是什么問題?六、教師評分實驗預習20%實驗過程20%實驗結果30%實驗報告30%總成績實驗二 選擇和循環一、實驗目的1. 掌握c#數據類型和表達式的特點和用法。2. 熟練掌握單分支、雙分支、多分支選擇語句的格式與功能,能正確選取選擇語句來設計選擇結構的程序。3. 熟練掌握while、do-while、for、break語句、continue語句的格式和功能;并能根據循環結構的要求正確選取循環語句來實現循環和多重循環。二、預習內容1c#的內置數據類型有哪些? 2從存儲角度看.net將變量的類型分為值類型和

13、引用類型,它們兩者有何區別(舉例說明)?3查閱msdn了解random類,math類的用法。三、實驗內容1調試并運行下面程序,寫出運行結果:using system;class throwrollpublic static void main()int roll = 0;random rd = new random(); /創建一個存儲隨機數的變量rdconsole.write(開始擲篩子);for(int count=0; count5; count+)roll = (int) rd.next(1,7); /生成一個1-6之間的隨機整數console.write (這次擲的篩子是:0 ,ro

14、ll);switch(roll)case 1:case 3:case 5:console. write (篩子是奇數);break;case 2:case 4:case 6:console. write (篩子是偶數);break;default:console. write (篩子不在1-6之間);break;console.writeline(“它的平方根是0”, math.sqrt(roll); 程序運行結果:2.某服裝店經營套服,也單件出售,若買的不少于50套,每套80元,不足50套,每套90元,若只買上衣每件60元,只買褲子每條45元,從鍵盤讀入所買上衣coat和褲子trourser

15、s件數,計算應付款money?提示: (1)先計算成套的衣服多少錢? (2)再計算剩下的單件的上衣、單件的褲子多少錢;(3)計算總付款程序代碼:要求用以下三套測試數據測試程序:a) coat: 55, trousers: 70b) coat: 55, trousers: 40 c) coat: -5, trousers: 3 , 此時應顯示錯誤信息運行結果:3. 編程輸入年份月份,打印該月的天數變量命名要求: 年份:year;月份:month;計算結果:天數days程序代碼: 輸入年份:2008;月份:10,運行結果:年份:2008;月份:2,運行結果:年份:2009;月份:1,運行結果:年份

16、:2009;月份:2,運行結果:4.計算機來當一年級的算術老師,要求給出十道兩位數的四則運算的算術題,每道題10分,學生輸入該題的答案,計算機根據學生的答案判斷正確與否,當結束時給出成績。 (提示:用random類產生兩個兩位數的隨機數)程序代碼:四、實驗小結談談本次實驗的心得、體會?五、選做實驗編寫一個程序打印九九乘法表11=121=2 22=431=3 32=6 33=941=4 42=8 43=12 44=16六、教師評分實驗預習20%實驗過程20%實驗結果30%實驗報告30%總成績78實驗三 數組和字符串處理一、實驗目的1. 要求掌握一維數組、多維數組(主要指二維)的創建、初始化、數組

17、元素的引用等方法。2. 掌握冒泡排序算法。3. 掌握二分查找算法。4. 掌握字符串處理的相關方法。二、預習內容1如何創建一個能存放十個整數的一維數組intarr?2如何創建一個如下圖的不等長的存放整數的二維數組jagarr?21 543 09876 3查閱msdn,至少寫出string類的五個方法,并說明該方法的作用?三、實驗內容1. 用c#實現對從鍵接收一組非零整數進行排序。要求:1)用選擇或冒泡升序排 2)從控制臺獲取數據、排序、輸出數組功能分別做成三個方法。 3)安排方法的調用,注意方法調用時參數的傳遞。程序代碼:2 數組a中的n(0n-1)origin = origin.replace

18、(smod, );return origin;elsereturn null;class program static void main(string args) string str = hellxyzo,wxyzoxyzrldxyz.; string smod = xyz; string newstring; newstring = dealstring.del(str, smod); console.writeline(newstring); console.readkey(); 運行結果:程序完成什么樣功能?5 用c#編程實現將數字字符串轉換為數字要求: (1)可以轉換帶小數點的數字

19、字符串。(2)按從左到右的順序轉換(例如456abc可以轉換為456,12ab567可以轉換為12 故遇到非數字字符就從左截斷,其它忽略)。 (3)要求純算法實現(不可以使用c#中特有的轉換方法,如類似convert.toint32()這樣現成的轉換方法。推薦使用if for while等這樣在所有語言里通用的語句實現)。程序代碼:四、實驗小結談談在c#中,數組的使用和字符串處理的心得和體會?五、選做實驗已知一個已經從小到大排序的數組,這個數組中的一個平臺就是指連續的一串值相同的元素,并且這一串元素不能再延伸,例如,在1,2,2,3,3,3,3,4,4,5,5,5,6中1,2,2,3,3,3,

20、3,4,4,5,5,5,6劃線部分都是一個平臺,試編寫程序,接收任意一個已排好序數組,把這個數組中最長的平臺找出來。在上面的例子中3,3,3,3就是該數組中最長的平臺,平臺長為4。六、教師評分實驗預習20%實驗過程20%實驗結果30%實驗報告30%總成績實驗四 類和對象編程練習一、實驗目的1. 掌握類對象的定義; 2. 了解類的封裝方法,以及如何創建類和對象;3. 掌握構造函數和析構函數的含義與作用、定義方式和實現,能夠根據要求正確定義和重載構造函數。4. 能夠根據給定的要求定義類并實現類的成員函數;5. 理解類的成員的訪問控制的含義,公有、私有和保護成員的區別6. 掌握屬性的作用和使用。二、

21、預習內容1類和對象兩者之間的有何區別和聯系?2c#中定義一個類的語法格式是什么?三、實驗內容1. 定義一個學生類,其中有學號、姓名、年齡3個數據成員,以及若干成員函數。同時編寫主函數使用這個類,實現對學生數據的賦值和輸出。要求:使用構造函數實現對數據的輸入,使用成員函數實現對數據的輸出。 調試下列的參考代碼。class studentprivate string id;private string name;private int age;public student(string id,string name,int age)this.id = id; = name;thi

22、s.age = age;public void display()console.writeline(id=0,name=1,age=2,id,name,age);public static void main()student s1 = new student(001,zhangshan,16);s1.display();console.readkey();以上程序使用了構造方法,請回答(1)構造方法何時被調用?(2)關鍵字this有何作用?(3)在實例化了s1對象后,如要將s1對象的id改為002,程序將如何修改。2. 如果已知一個日期為2007/3/8,求10天后是哪一天,367天后呢?

23、設計思路:(1)定義一個mydate類,成員有:class mydate /數據成員private int day;privateint month;private int year;/方法成員public mydate(int y,int m,int d) /構造一個日期public void monthinc() /月份加1public viod dayinc () /日期加1public void dayinc(int x) /日期加x天public void show () /顯示日期信息(2)對mydate類進行測試,測試代碼如下:class testpublic static vo

24、id main()mydate d1 = new mydate(2007,3,8);mydate d2 = d1;d1.dayinc(10);d1.show();d2.dayinc(367);d2.show();要求:將mydate類代碼編寫完整,以實現程序所要求的功能。如果將main方法中的語句mydate d1 = new mydate(2007,3,8);改為:mydate d1 = new mydate(2007,33,58);其它語句不變,程序運行結果是什么?運行結果:說明:必須對生成的日期做合法性驗證,規則當year小于1900年,則year置為1900,否則year合法。mont

25、h不在有效范圍內則month置1,day應當月有效,否則置1。(提示在mydate類中增加兩個方法:)public void setdate(int d,int m,int y) /設置日期private bool checkdate(int y,int m,int d) /對日期的有效性檢查進一步,求兩個日期之間的相差的天數,date類如何改進?3. 設計一個數學中的分數類(fraction),并測試結果是否正確。要求:(1)一個分數由分子和分母構成(2)生成的分數對象的分子和分母必須滿足的條件:a、分母不為零 b、分子和分母既約(化簡后最大公約數只能為1) c、分子和分母異號時分子為負(3

26、)分數對象之間能夠四則運算,分數與整數之間也能夠完成四則運算(4)分數對象之間能夠比較大小,分數與整數之間也能夠比較大?。?)一個分數的對象能夠轉化為小數形式程序代碼:測試分數類fraction,寫出測試代碼,所用測試數據和運行結果1) 測試代碼2) 所用測試數據3)程序運行結果:四、實驗小結六、教師評分實驗預習20%實驗過程20%實驗結果30%實驗報告30%總成績實驗五 繼承與多態編程練習一、實驗目的1. 理解繼承的含義,掌握派生類的定義方法和實現;2. 理解虛函數在類的繼承層次中的作用,虛函數的引入對程序運行時的影響,能夠對使用虛函數的簡單程序寫出程序結果。3. 編寫體現類的繼承性(成員變

27、量,成員方法,成員變量隱藏)的程序;4. 編寫體現類多態性(成員方法重載,構造方法重載)的程序。二、預習內容1什么叫繼承?繼承的優點是什么?2什么是多態?多態的優點是什么?三、實驗內容1. 創建一個形狀類shape,作為各種形狀的基類,然后用繼承來創建circle類、rectangle類和square類,通過繼承形成一個清晰的類層次結構。(1) 創建shape類,在該類中定義屬性name表示形狀的名稱,定義虛方法calcperimeter()和calcarea()分別用于計算形狀的周長和面積、虛方法show()用于顯示形狀的所有屬性的信息,在基類中show()方法打印“形狀尚未定義”信息。(2

28、) 創建circle類,它從shape類派生,在該類中增加屬性radius表示半徑,定義構造方法對radius屬性及從基類繼承的屬性初始化,對繼承自基類的虛方法calcperimeter()和calcarea()進行重寫以實現對圓周長和面積的計算;重寫虛方法show(),輸出圓的所有屬性信息。(3) 創建rectangle類,它從shape類派生,在該類中增加屬性length和width表示長和寬,定義構造函數完成所有(自身的和繼承來的)屬性的初始化,對從基類繼承的虛方法進行重寫實現對矩形周長和面積的計算。重寫虛方法show(),輸出矩形的所有屬性信息。(4) 創建square類(正方形),它

29、從rectangle類派生,除長、寬相等外其它與rectangle相同。用uml圖表示出上述四個類的聯系圖:編寫以上各個類之后,用如下測試程序,驗證設計的類的正確性class shapetest static void main(string args) circle c1 = new circle(circle, 5); c1.show(); rectangle r1 = new rectangle(rectangle, 3, 5); r1.show(); square s1 = new square(square, 5); s1.show(); console.readkey(); 程序應

30、該輸出的結果:測試代碼如果改為如下的寫法,輸出的結果又是什么?class shapetest static void main(string args) shape shapes = new shape4; shapes0 = new circle(circle, 6); shapes1 = new rectangle(rectangle1, 2, 8); shapes2 = new rectangle(rectangle2, 4, 7); shapes3 = new square(square, 9); for (int i = 0; i temppoint.squareddistance)

31、 return 1; elseif(this.squareddistance=temppoint.squareddistance) return 0; else return -1; (2) 編寫測試程序,創建一個以點為元素的列表(列表中的點隨機生成),將列表中的點按按到原點距離排序,然后將排序后的點打印輸出以檢查是否正確。測試代碼:using system.collections;class testpointspublic static void main()arraylist points = new arraylist();random rnd = new random();for(

32、int count = 0; count10; count+)points.add( new sortablepoint(rnd.next(20),rnd.next(20);points.sort(); /對列表中點按到原點距離排序sortablepoint pt;for( int count = 0; count10; count+)pt = (sortablepoint) (pointscount); console.writeline(“(0,1),distance=2”,pt.x,pt.y,pt.distance);寫出程序運行結果:2. 依據上例創建一個學生(student)類,它有

33、學號(no),姓名(name),高數成績(math),英語成績(english)四個成員變量,成員方法按需自己定義。編寫測試代碼要求創建一個student數組,初始化若干名學生數據,然后將其按總分(math+english)降序排列,并打印出所有學生的信息。3.編程模擬生成一副撲克牌并發牌給幾個玩家的程序,把一副牌分給幾個玩家,依次顯示每個玩家的牌。a、設計一個card類,代表打牌游戲中的一張撲克牌。(1)這個類只有兩個屬性:suit 代表花色(紅桃、黑桃、梅花、方塊)提示:可用枚舉類型。rank 代表牌面的大?。捎谜麛?13表示) (2)類方法自己按需定義(比如構造方法,顯示牌面信息的方法等)b、設計一個deck類,代表一副牌。c、設計一個hand類,代表一個玩家。用card類、deck類、hand類寫一個洗牌、發牌,顯示每個玩家所發牌的程序。設計參考:step0.創建一個card類,它對應現實世界中一張撲克牌的抽象。step1.創建deck類,它對應現實世界中可使用的一副撲克牌,除去大小王,它由52張card構成,因此deck類中應該有一個集合數據成員,來存儲一副牌。根據題意,deck類還應提供洗牌方法、發牌方法、

溫馨提示

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

評論

0/150

提交評論