1、面向对象程序设计C#实验指导及报告书 / 学年 第 学期姓 名:_学 号:_班 级:_指导教师:_实验目录实验一 创建简单的.NET应用程序3实验二 选择和循环9实验三 数组和字符串处理15实验四 类和对象编程练习21实验五 继承与多态编程练习32实验六 接口和集合41实验七 文件和输入输出50实验八 代理和事件54实验一 创建简单的.NET应用程序一、实验目的1了解C# 基本程序结构;2熟悉命令行方式下C#程序编写、编译、调试和执行过程;3了解VS2005集成开发环境的功能和特点。二、预习内容1一个C#应用程序,从编写到运行,要经过哪几个步骤?三、实验内容1. 调试并运行下面程序,并写出运行
2、结果:using System;class SimpleProgramstatic void Main() Console.WriteLine(“Hello!nWorld.”);运行结果(注意,按照屏幕输出格式写):Hello!World.2. 调试并运行下面程序,并写出运行结果: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( ); /一个空格 for (k = 0;
3、 k = 2 * i; k+) Console.Write(*); Console.WriteLine(); Console.ReadKey();运行结果(注意,按照屏幕输出格式写): * * *3. 下面是一个模拟计算器的程序(两个操作数都为正整数)。计算器应该能够执行以下算术操作:加法、减法、乘法、除法。调试并运行下面程序,验证当从键盘输入8和2两个整数时,选择进行乘法时的计算结果。注意:程序输入时要区分大小写。using System;class CalcNumberint number1,number2;char option;int result;public void Number
4、()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.WriteLine(“3.Mu
5、ltiplication”);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;case 4: result=n
6、umber1 / 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时的运行结果:The result is 16Invalid Option从键盘输入的8和two时(
7、第二个数为非整数),程序运行结果:程序不运行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=Convert.ToInt32(Console.ReadL
8、ine();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.ToChar(Console.ReadLine
9、();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”);return result;class TestCalc
10、static 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);比较与上例运行结果,是否完全相同:从键盘输入8和2两个整数时, 选择3时的运行结果:选择5时的运行结果:从键盘输入8和two时(第二个数为非整数),程序运行结果:
11、 输入的字符不正确在main()函数中如不加try和catch部分代码,运行结果又会怎样?程序不运行体会程序5的结构与程序4相比哪一个好,谈谈你的理解?四、实验小结在程序的调试过程中,会遇到哪些问题?应该如何去解决这些问题?六、教师评分实验预习20%实验过程20%实验结果30%实验报告30%总成绩实验二 选择和循环一、实验目的1. 掌握C#数据类型和表达式的特点和用法。2. 熟练掌握单分支、双分支、多分支选择语句的格式与功能,能正确选取选择语句来设计选择结构的程序。3. 熟练掌握while、do-while、for、break语句、continue语句的格式和功能;并能根据循环结构的要求正确选
12、取循环语句来实现循环和多重循环。二、预习内容1C#的内置数据类型有哪些? 2从存储角度看.NET将变量的类型分为值类型和引用类型,它们两者有何区别(举例说明)?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 = (in
13、t) rd.Next(1,7); /生成一个1-6之间的随机整数Console.Write (这次掷的筛子是:0 ,roll);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套,每套8
14、0元,不足50套,每套90元,若只买上衣每件60元,只买裤子每条45元,从键盘读入所买上衣coat和裤子trousers件数,计算应付款money?提示: (1)先计算成套的衣服多少钱? (2)再计算剩下的单件的上衣、单件的裤子多少钱;(3)计算总付款将程序补充完整:using System;class CalcPay public static void Main(String args) int coat,trousers,money; Console.WriteLine (“Enter coat number:”);coat = Convert.ToInt32(Console.ReadL
15、ine();Console.WriteLine (“Enter trousers number:”);trousers = Convert.ToInt32(Console.ReadLine(); money = getPay (coat, trousers); Console.WriteLine ( “total money = 0”,money);public static int getPay(int c, int t)要求用以下三套测试数据测试程序:a) coat: 55, trousers: 70b) coat: 55, trousers: 40 c) coat: -5, trouse
16、rs: 3 , 此时应显示错误信息运行结果分别是:3. 编程输入年份月份,打印该月的天数变量命名要求: 年份:year;月份:month;计算结果:天数days程序代码: 输入年份:2008;月份:10,运行结果:年份:2008;月份:2,运行结果:年份:2009;月份:9,运行结果:年份:2009;月份:2,运行结果:年份:2009;月份:99,运行结果:4.计算机来当一年级的算术老师,要求给出十道两位数的四则运算的算术题,每道题10分,学生输入该题的答案,计算机根据学生的答案判断正确与否,当结束时给出成绩。 (提示:用Random类产生两个两位数的随机数)程序代码:四、实验小结谈谈本次实验
17、的心得、体会?五、选做实验编写一个程序打印九九乘法表11=121=2 22=431=3 32=6 33=941=4 42=8 43=12 44=16六、教师评分实验预习20%实验过程20%实验结果30%实验报告30%总成绩word文档 可自由复制编辑实验三 数组和字符串处理一、实验目的1. 要求掌握一维数组、多维数组(主要指二维)的创建、初始化、数组元素的引用等方法。2. 掌握冒泡排序算法。3. 掌握二分查找算法。4. 掌握字符串处理的相关方法。二、预习内容1如何创建一个能存放十个整数的一维数组intArr?2如何创建一个如下图的不等长的存放整数的二维数组jagArr?21 543 09876
18、 3查阅MSDN,至少写出String类的五个方法,并说明该方法的作用?三、实验内容1. 实现对从键盘输入一批非零整数,以-1作为输入结束标记,对这批整数进行排序。要求:1)用选择或冒泡升序排 2)从控制台获取数据、排序、输出数组功能分别做成三个方法。 3)安排方法的调用,注意方法调用时参数的传递。程序代码:2 数组A中的N(0N-1)origin = origin.Replace(smod, );return origin;elsereturn null;class Program static void Main(string args) string str = hellxyzo,wxy
19、zoxyzrldxyz.; string smod = xyz; string newString; newString = DealString.Del(str, smod); Console.WriteLine(newString); Console.ReadKey(); 运行结果:程序完成什么样功能?四、实验小结谈谈在C#中,数组的使用和字符串处理的心得和体会?六、教师评分实验预习20%实验过程20%实验结果30%实验报告30%总成绩实验四 类和对象编程练习一、实验目的1. 掌握C#中类的定义、对象的创建方法;2. 理解封装性及其意义;3. 掌握构造函数的含义与作用、定义方式和实现,能够
20、根据要求正确定义和重载构造函数。4. 能够根据给定的要求定义类并实现类的成员函数;5. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别二、实验内容1. 定义一个学生类,其中有学号、姓名、年龄3个数据成员,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求:使用构造函数实现对数据的输入,使用成员函数实现对数据的输出。 调试下列的参考代码。class Studentprivate string id;private string name;private int age;public Student(string id,string name,int age)t
21、his.id = id;this.name = name;this.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. 实现交
22、通工具Vehicle类版本一:(1)没有数据隐藏的类创建一个Vehicle 类实现上面的UML类图。 a) 含有两个public属性:load “车辆当前的载货量” maxLoad “车辆的最大载货量”。 b) 含有一个公有的构造函数用于初始化最大载货量属性maxLoad。 c) 含有两个公有的函数:public llldouble getLoad(); / 用于得到当前的载货量public double getMaxLoad()/ 用于取得最大载货量(注意:所有的数据都是假定以千克(kilograms)作为单位的。在这个版本的Vehicle类中,你将把所有成员的属性设置为public,这样在
23、下面测试程序TestVehicle1中可以直接访问这些成员。(2)编写下面的程序对Vehicle类进行测试,代码如下: public class TestVehicle1public static void Main(String args)Vehicle vehicle = new Vehicle(10000.0); Console.WriteLine(Add box #1 (500kg); vehicle.load = vehicle.load + 500.0; Console.WriteLine (Add box #2 (250kg); vehicle.load = vehicle.lo
24、ad + 250.0;Console.WriteLine (Add box #3 (5000kg);vehicle.load = vehicle.load + 5000.0;Console.WriteLine (Add box #4 (4000kg);vehicle.load = vehicle.load + 4000.0;Console.WriteLine (Add box #5 (300kg);vehicle.load = vehicle.load + 300.0;Console.WriteLine (Vehicle load is +vehicle.getLoad()+ kgn);应该得
25、到以下的结果: Add box #1 (500kg)Add box #2 (250kg) Add box #3 (5000kg) Add box #4 (4000kg) Add box #5 (300kg) Vehicle load is 10050.0 kg从程序的运行结果来看,你发现了什么问题?思考如何才能避免?版本二:(1)基本数据隐藏 为了解决第一个版本中的问题,你应该隐藏类中的数据成员(load 和 maxLoad) 并且提供一个方法addBox, 来检查车辆是否会发生超载。 创建一个Vehicle 类实现上面的UML类图。 A) 把load和maxLoad属性修改为private(
26、私有的)。B) 添加addBox方法。public boolean addBox(double weight); /参数为所加箱子重量这个方法必须检查加上一个箱子后是否会超过车辆的最大载货量。如果超过了,应该拒绝装载这个箱子并返回false;否则把箱子加到车上并返回true。 注意:所有的数据都是假定以千克(kilograms)作为单位的。(2)编写下面的程序对新版本的Vehicle类进行测试,代码如下: public class TestVehicle2public static void Main(String args)Vehicle vehicle=new Vehicle(10000.
27、0); Console.WriteLine (Add box #1 (500kg):+ vehicle.addBox(500.0); Console.WriteLine (Add box #2 (250kg):+ vehicle.addBox(250.0); Console.WriteLine(Add box #3 (5000kg):+ vehicle.addBox(5000.0); Console.WriteLine(Add box #4 (4000kg):+ vehicle.addBox(4000.0); Console.WriteLine (Add box #5 (300kg):+ ve
28、hicle.addBox(300.0); Console.WriteLine (Vehicle load is +vehicle.getLoad()+ kg);阅读并运行下面的测试程序段。注意代码中不能直接修改load属性的值,现在我们可以使用addBox()方法。这个方法将返回true或false并打印到屏幕上。 应该得到以下的结果: Add box #1 (500kg) : trueAdd box #2 (250kg) : trueAdd box #3 (5000kg) : trueAdd box #4 (4000kg) : trueAdd box #5 (300kg) : falseVe
29、hicle load is 9750.0 kg 版本三:(1)改变重量的内部表示单位为牛顿 现在假设你将要作一些关于车辆发动机和轮胎等磨损的计算,这些计算使用用牛顿表示的重量。 创建一个Vehicle 类实现上面的UML类图。 修改构造方法,getLoad(), getMaxLoad(), 和addBox() 方法,使它们使用一个从千克到牛顿的相互转换。你可以定义下面的私有方法: private double kiloToNewts(double weight) . private double newtsToKilo(double weight) . 注意vehicle 对象的内部数据是以牛
30、顿为单位的,而外部数据(在方法中传递的参数)还是以千克为单位 。(2)编写下面的程序对新版本的Vehicle3类进行测试,注意它和版本2中的测试代码是相同的,代码如下: public class TestVehicle3public static void Main(String args)Vehicle3 vehicle=new Vehicle3(10000.0); Console.WriteLine (Add box #1 (500kg):+ vehicle.addBox(500.0); Console.WriteLine (Add box #2 (250kg):+ vehicle.add
31、Box(250.0); Console.WriteLine(Add box #3 (5000kg):+ vehicle.addBox(5000.0); Console.WriteLine(Add box #4 (4000kg):+ vehicle.addBox(4000.0); Console.WriteLine (Add box #5 (300kg):+ vehicle.addBox(300.0); Console.WriteLine (Vehicle load is +vehicle.getLoad()+ kg);应该得到以下的结果: Creating a vehicle with a 1
32、0,000kg maximum load.Add box #1 (500kg) : trueAdd box #2 (250kg) : trueAdd box #3 (5000kg) : trueAdd box #4 (4000kg) : trueAdd box #5 (300kg) : falseVehicle load is 9750.0 kg 对Vehicle类的第二个和第三个版本采用相同的测试代码,输出的结果有没有发生变化?从代码可维护性的角度谈谈封装的好处。3. 如果已知一个日期为2007/3/8,求10天后是哪一天,367天后呢?设计思路:(1)定义一个MyDate类(版本一),成员
33、有:class MyDate /数据成员private int day;private int month; private int year; /方法成员public MyDate(int y,int m,int d) /构造一个日期 public MyDate DayInc() /返回下一天的日期 public MyDate DayInc(int x) /返回x天后的日期 public void Display () /显示当前日期信息(2)对MyDate类进行测试,测试代码如下:public class TestDatepublic static void Main(String arg
34、s)MyDate d1 = new MyDate(2007,3,8);MyDate d2;d2 = d1.DayInc(10);d2.Display();d2 = d1.DayInc(367);d2.Display();要求:将MyDate类中的方法代码编写完整,以实现程序所要求的功能。如果将main方法中的语句MyDate d1 = new MyDate(2007,3,8);改为:MyDate d1 = new MyDate(2007,33,58);其它语句不变,程序运行结果是什么?运行结果:(3)修改MyDate类(版本二)要求:必须对生成的日期做合法性验证,设定如下规则A) year :
35、 大于或等于1900年,合法,否则则将year置为1900。B) Month:在1,12范围内合法,否则将month置1。C) Day: 与month有关,应month所在月有效,否则置1。(设计参考:在MyDate类中增加两个方法:)public void SetDate(int d,int m,int y) /设置日期private void CheckDate(int y,int m,int d) /对日期的有效性检查进一步,求两个日期之间的相差的天数,MyDate类又如何改进?(设计参考:在MyDate类中增加公有的方法:)public int DaysBetweenTowDate(M
36、yDate otherDate) 4. 课后思考题:设计一个数学中的分数类(Fraction),并测试结果是否正确。要求:(1)一个分数由分子和分母构成(2)生成的分数对象的分子和分母必须满足的条件:A、分母不为零 B、分子和分母既约(化简后最大公约数只能为1) C、分子和分母异号时分子为负(3)分数对象之间能够四则运算,分数与整数之间也能够完成四则运算(4)分数对象之间能够比较大小,分数与整数之间也能够比较大小(5)一个分数的对象能够转化为小数形式四、实验小结五、教师评分实验预习20%实验过程20%实验结果30%实验报告30%总成绩实验五 继承与多态编程练习一、实验目的1了解类之间的关系,能区分关联关系中的聚合和组合的区别;2学习并掌握使用多个类对象构建一复杂系统。3理解继承的含义,掌握派生类的定义方法和实现;4掌握抽象类和抽象方法的使用;5编写体现类的继承性的程序;6. 掌握多态性的概念并能编写体现类多态性的程序。二、实验内容1、创建一个应用程序,实现下面的UML图。Step1:实现银行帐户Account
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922