常熟理工学院-C_实验报告册(本二)

更新时间:2023-06-08 09:39:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《面向对象程序设计C#》实验指导及报告书

/ 学年 第 学期

姓 名:______________ 学 号:______________ 班 级:______________ 指导教师:______________

实验目录

实验一 创建简单的.NET应用程序 ................................................. 3 实验二 选择和循环........................................................................... 9 实验三 数组和字符串处理............................................................. 15 实验四 类和对象编程练习............................................................... 21 实验五 继承与多态编程练习......................................................... 32 实验六 接口和集合........................................................................... 41 实验七 文件和输入输出................................................................. 50 实验八 代理和事件........................................................................... 54

实验一 创建简单的.NET应用程序

一、实验目的

1.了解C# 基本程序结构;

2.熟悉命令行方式下C#程序编写、编译、调试和执行过程; 3.了解VS2005集成开发环境的功能和特点。 二、预习内容

1.一个C#应用程序,从编写到运行,要经过哪几个步骤?

三、实验内容

1. 调试并运行下面程序,并写出运行结果: using System;

class SimpleProgram {

static void Main() {

Console.WriteLine(“Hello!\nWorld.”); } }

运行结果(注意,按照屏幕输出格式写): Hello! World.

2. 调试并运行下面程序,并写出运行结果:

using System; class StarTriangle {

static 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; k <= 2 * i; k++) Console.Write("*"); Console.WriteLine(); }

Console.ReadKey(); } }

运行结果(注意,按照屏幕输出格式写): * *** ***** *******

3. 下面是一个模拟计算器的程序(两个操作数都为正整数)。计算器应该能够执行以下算术操作:加法、减法、乘法、除法。调试并运行下面程序,验证当从键盘输入8和2两个整数时,选择进行乘法时的计算结果。 注意:程序输入时要区分大小写。 using System;

class CalcNumber { int number1,number2; char option; int result; public 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.WriteLine(“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; case 4 : result=number1 / number2; break; default: Console.WriteLine(“Invalid Option”); return; }

Console.WriteLine(“The result is {0}” , result);

}

}

class TestCalc {

static void Main(string[] args) {

CalcNumber obj = new CalcNumber(); obj.Number(); } }

从键盘输入8和2两个整数时,

(1) 选择3时的运行结果: (2) 选择5时的运行结果: The result is 16 Invalid Option

从键盘输入的8和two时(第二个数为非整数),程序运行结果: 程序不运行

4.在保持功能不变的情况下,改写上例代码如下: using System;

class CalcNumber { int 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.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.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”); }

return result;

}

class TestCalc {

static void Main(string[] args) {

try

{

CalcNumber obj = new CalcNumber();

obj.GetNumber(); obj.GetOption(); int result = pute(); Console.WriteLine(“The result is {0}” , result);

}

catch(Exception e) { Console.WriteLine(e.Message); } } }

比较与上例运行结果,是否完全相同: 从键盘输入8和2两个整数时, 选择3时的运行结果:

选择5时的运行结果:

从键盘输入8和two时(第二个数为非整数),程序运行结果: 输入的字符不正确

在main()函数中如不加try和catch部分代码,运行结果又会怎样? 程序不运行

体会程序5的结构与程序4相比哪一个好,谈谈你的理解?

四、实验小结

在程序的调试过程中,会遇到哪些问题?应该如何去解决这些问题?

实验二 选择和循环

一、实验目的

1. 掌握C#数据类型和表达式的特点和用法。

2. 熟练掌握单分支、双分支、多分支选择语句的格式与功能,能正确选取选择语句来设计选择结构的程序。

3. 熟练掌握while、do-while、for、break语句、continue语句的格式和功能;并能根据循环结构的要求正确选取循环语句来实现循环和多重循环。 二、预习内容

1.C#的内置数据类型有哪些?

2.从存储角度看.NET将变量的类型分为值类型和引用类型,它们两者有何区别(举例说明)?

3.查阅MSDN了解Random类,Math类的用法。

三、实验内容

1.调试并运行下面程序,写出运行结果: using System; class ThrowRoll { public static void Main() { int roll = 0;

} }

程序运行结果:

Random rd = new Random(); //创建一个存储随机数的变量rd Console.Write("开始掷筛子"); for(int count=0; count<5; count++) {

roll = (int) 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套,每套80元,不足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.ReadLine()); 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: 70 b) coat: 55, trousers: 40

c) coat: -5, trousers: 3 , 此时应显示错误信息 运行结果分别是:

3. 编程输入年份月份,打印该月的天数

变量命名要求: 年份:year;月份:month;计算结果:天数days 程序代码:

输入

年份:2008;月份:10,运行结果: 年份:2008;月份:2,运行结果:

年份:2009;月份:9,运行结果: 年份:2009;月份:2,运行结果: 年份:2009;月份:99,运行结果:

4.计算机来当一年级的算术老师,要求给出十道两位数的四则运算的算术题,每道题10分,学生输入该题的答案,计算机根据学生的答案判断正确与否,当结束时给出成绩。 (提示:用Random类产生两个两位数的随机数) 程序代码:

四、实验小结

谈谈本次实验的心得、体会?

五、选做实验

编写一个程序打印九九乘法表 1×1=1

2×1=2 2×2=4

3×1=3 3×2=6 3×3=9

4×1=4 4×2=8 4×3=12 4×4=16

六、教师评分

实验三 数组和字符串处理

一、实验目的

1. 要求掌握一维数组、多维数组(主要指二维)的创建、初始化、数组元素的引用等方法。

2. 掌握冒泡排序算法。 3. 掌握二分查找算法。

4. 掌握字符串处理的相关方法。 二、预习内容

1.如何创建一个能存放十个整数的一维数组intArr?

2.如何创建一个如下图的不等长的存放整数的二维数组jagArr?

3.查阅MSDN,至少写出String类的五个方法,并说明该方法的作用?

三、实验内容

1. 实现对从键盘输入一批非零整数,以-1作为输入结束标记,对这批整数进

行排序。要求:

1)用选择或冒泡升序排

2)从控制台获取数据、排序、输出数组功能分别做成三个方法。 3)安排方法的调用,注意方法调用时参数的传递。 程序代码:

2. 数组A中的N(0<N<100)个整数从小到大进行连续编号,要求不能改变

数组A中元素的顺序。如A=(78,42,-34,94,25)则输出为(4,3,1,5,2)。数组长度N和数组中元素要求从键盘输入。 程序代码:

3.已知一个已经从小到大排序的数组,这个数组中的一个平台就是指连续的一串值相同的元素,并且这一串元素不能再延伸,例如,在1,2,2,3,3,3,3,4,4,5,5,5,6中1,2,2,3,3,3,3,4,4,5,5,5,6划线部分都是一个平台,试编写程序,接收任意一个已排好序数组,把这个数组中最长的

4.调试下列代码,写出运行结果。 class Example

{ public static void Change(string str,char[] ch) { str = “test ok”; ch[0] = g ;

}

public static void Main(string[] args)

{

string str = “good”;

char[ ] ch = { a , b , c }; Change(str,ch);

Console.Write(str + “ and “); Console.WriteLine(ch); Console.ReadKey();

} }

运行结果是test ok and gbc吗?为什么?请分析原因:

5. 调试下列代码,写出运行结果,分析程序的功能。 class DealString {

public static string Del(string origin ,string smod) { if( origin !=null && smod !=null) { if( origin.IndexOf(smod)>-1)

{ origin = origin.Replace(smod, ""); return origin; } } else return 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();

} }

运行结果:

程序完成什么样功能?

四、实验小结

谈谈在C#中,数组的使用和字符串处理的心得和体会?

实验四 类和对象编程练习

一、实验目的

1. 掌握C#中类的定义、对象的创建方法; 2. 理解封装性及其意义;

3. 掌握构造函数的含义与作用、定义方式和实现,能够根据要求正确定义

和重载构造函数。

4. 能够根据给定的要求定义类并实现类的成员函数;

5. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别

二、实验内容

1. 定义一个学生类,其中有学号、姓名、年龄3个数据成员,以及若干成

员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求:使用构造函数实现对数据的输入,使用成员函数实现对数据的输出。 调试下列的参考代码。 class Student {

private string id; private string name; private int age;

public Student(string id,string name,int age)

{

this.id = id; = 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();

本文来源:https://www.bwwdw.com/article/oad1.html

Top