c#实验指导书.docx
- 文档编号:3398931
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:24
- 大小:193.60KB
c#实验指导书.docx
《c#实验指导书.docx》由会员分享,可在线阅读,更多相关《c#实验指导书.docx(24页珍藏版)》请在冰豆网上搜索。
c#实验指导书
第1章概述
1.1编辑、编译和运行C#程序
实验题目:
编辑、编译和运行给出的C#应用程序。
实验目的:
1)熟悉C#开发窗口的布局及功能。
2)了解C#应用程序的本结构。
3)了解程序集和程序命名空间。
4)熟悉C#应用程序的编译和运行过程。
实验步骤:
1)打开装VisualStudio2008/2005开发环境软件。
从开始—>所有程序—>MicrosoftVisualStutio2008—>MicrosoftVisualStutio2008
从文件菜单进入新建--→项目--→VisualC#项目如下图
选择“控制台应用程序“并命名为”My-FirstNewProgram”,单击确定后进入编辑页面。
2)在Main函数中录入如下代码并保存。
Console.WriteLine("helloworld!
");
MessageBox.Show("Helloworld","MessageBoxfromC#",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
3)Console.Read();
4)编译该应用程序。
VisualStudio2005提供了编译选项为:
5)运行该应用程序。
选择F5或者Ctrl+F5或者单击菜单,程序编译并运行查看结果。
思考:
解决方案资源管理器中的引用和程序开头处的using有什么关系。
第2章C#语言编程基础
1.1求矩形的周长和面积
实验题目:
已知两个矩形的长和宽,编程求它们的面积和周长。
假设,矩形1的长和宽分别为20和50;矩形2的长和宽分别为3.6和4.5。
实验目的:
1)掌握double型变量的声明和使用方法。
2)熟悉基本算术运算符的运算规则。
3)掌握表达式的使用及运算符的的优先级概念。
4)了解C#语言的控制台输出方法。
实验步骤:
1)声明double型变量length、width,分别用于表示矩形的长和宽,并将length初始化为20,width初始化为50。
2)声明double型变量area用于表示矩形的面积,并将它初始化为length和width的积(即矩形1的面积)。
3)声明double型变量perimeter用于表示矩形的周长,并将它初始化为length和width的和与2的积(即矩形1的周长)。
4)分别输出矩形1的面积和周长。
5)将矩形2的长和宽分别赋值给变量length和width。
6)分别求矩形2的面积和周长并相应赋值给变量area和perimeter。
7)分别输出矩形2的面积和周长。
2.2判断某年是否闰年
实验题目:
编写一个程序,判断用户从键盘输入的年份是否是闰年。
如果一个年份能被4整除,并且如果该年份是100的倍数,它能被400整除,那么该年份就是闰年。
实验步骤:
1)声明int型变量year,用于表示年份。
2)声明bool型变量isLeap,用于表示是否闰年。
3)声明string型变量str,用于表示一串字符。
4)向屏幕输出提示信息,提示用户输入年份。
5)从键盘读入年份字符串赋值给变量str。
6)将变量str中的数据转换成int型数据并赋值给变量year。
7)通过混合取余运算、关系运算和条件逻辑运算判断year是否闰年,并将结果赋值给变量isLeap。
8)使用条件运算符,当isLeap为true时,给变量str赋字符串“是”;否则,赋“不是”。
输出结果,告诉用户相应年份是否闰年
2.3求三个整数的最大值
实验题目:
编写一个程序,使用条件运算符求用户输入的三个整数中的最大值。
实验目的:
1)掌握int型和string型变量的声明和使用方法。
2)了解C#语言的控制台输入方法。
3)熟悉关系运算符的运算规则。
4)熟悉条件运算符的运算规则。
5)理解运算符的优先级概念。
实验步骤:
1)声明int型变量a、b、c,用于保存三个待求整数。
2)声明int型变量max,用于保存最大值。
3)声明string型变量str,用于表示一串字符。
4)分别向屏目输出提示信息,提示用户输入三个整数,将用户输入的字符串保存在变量str中,并在将str中的数据转换成int型数据后分别赋值给变量a、b、c。
5)使用条件运算符和关系运算符求出变量a和b中的大者,并赋值给变量max。
6)使用条件运算符和关系运算符求出变量max和c中的大者,并赋值给变量max。
7)输出变量max的值。
第三章控制语句
3.1整数排序
实验题目:
编写一个程序,使用if语句将用户输入的三个整数按从小到大的顺序排序。
实验目的:
1)掌握if语句的使用方法。
2)学会嵌套使用if语句。
实验步骤:
1)声明int型变量a、b、c,用于保存用户输入的三个整数。
2)声明int型变量t,在交换变量a、b、c的值时,用于临时保存其中的某个值。
3)从键盘读入三个整数,分别保存在变量a、b、c中。
4)使用if语句将变量a、b、c中的最大值赋给变量c,最小值赋给变量a,中间值赋给变量b。
5)按从小到大的顺序依次输出变量a、b、c的值。
3.2简单计算器
实验题目:
编写一个简单的计算器程序,能够根据用户从键盘输入的运算指令和整数,进行简单的加减乘除运算。
实验目的:
1)掌握循环语句while的使用。
2)掌握循环语句do-while的使用。
3)熟悉选择语句switch的使用。
4)学会嵌套使用循环语句和选择语句。
5)学会使用break语句。
实验步骤:
1)声明int型变量firstNumber和secondNumber,用于保存操作数。
2)声明string型变量operation,用于保存运算符。
3)声明string型变量response,用于保存用户输入的决定是否继续运算的字符。
4)声明do-while语句读入运算符和操作数,在该循环中用switch语句执行相应运算,并输出运算结果。
5)在do-while语句中提示用户输入相应的字符决定是否断续运算,并根据输入字符决定是否结束do-while语句的运行。
3.3求指定范围内的所有合数
实验题目:
合数就是非素数,即除了1和它本身之外还有其他约数的正整数。
编写一个程序求出指定数据范围(假设10~100)内的所有合数。
实验目的:
1)掌握循环语句for的使用。
2)掌握选择语句if的使用。
3)学会嵌套使用循环语句和选择语句。
4)学会使用break语句。
实验步骤:
1)声明int型变量min、max,并分别初始化为10和100;
2)声明int型变量num,用于保存合数的个数,初始化为0。
嵌套使用for语句,顺序判断10~100中的每个整数,如果某个整数是合数,则输出该数,并将变量num加1。
第4章方法
4.1求两个整数的最大公约数和最小公倍数
实验题目:
定义两个方法,分别求两个正整数的最大公约数和最小公倍数。
其中,最大公约数的计算采用辗转相除法;最小公倍数的计算采用先计算最大公约数,然后再用两个数的积去除最大公约数来求得。
在Main()方法中实现两个待求正整数的输入及结果的输出。
备注:
1)把能够整除某一个数的数,叫做这个数的约数。
几个数所公有的约数叫这几个数的公约数。
公约数中最大的一个叫做这几个数的最大公约数。
2)几个数所公有的倍数,叫做这几个数的公倍数。
公倍数中最小的一个(零除外)叫做这几个数的最小公倍数。
3)辗转相除法,又名欧几里德算法(Euclideanalgorithm)乃求两个正整数之最大公因子的算法。
4)辗转相除法的算法:
算法
辗转相除法是利用以下性质来确定两个正整数a和b的最大公因子的:
1.若r是a÷b的余数,则gcd(a,b)=gcd(b,r)
2.a和其倍数之最大公因子为a。
另一种写法是:
1.a÷b,令r为所得余数(0≤r<b)
若r=0,算法结束;b即为答案。
2.互换:
置a←b,b←r,并返回第一步。
实验目的:
1)理解方法的意义。
2)掌握如何定义方法。
3)掌握如何调用方法。
4)理解形参和实参的值传递关系。
5)学会如何在方法中返回值。
实验步骤:
1)定义方法GreatestCommonDivisor,用辗转相除法求两个正整数的最大公约数。
两个待求正整数由参数传递传入,所求结果由返回值返回。
2)定义方法LeastCommonMultiple,求两个正整数的最小公倍数。
两个待求正整数由参数传入,所求结果由返回值返回,而且方法中两个正整数的最大公约数由调用方法GreatestCommonDivisor求得。
3)在Main()方法中读入待求的两个正整数。
4)在Main()方法中调用方法GreatestCommonDivisor,求两个正整数的最大公约数并输出。
5)在Main()方法中调用方法LeastCommonMultiple,求两个正整数的最小公倍数并输出。
4.2给三个整数排序并求其和及平均值
实验题目:
定义一个方法,给三个整数按从小到大的顺序排序并求其和及平均值。
其中,三个待求整数及排序后的结果由引用参数传递;其和由输出参数传递;平均值由返回值返回。
在Main()方法中实现三个待求整数的输入及结果的输出。
实验目的:
1)掌握如何定义方法。
2)掌握如何调用方法。
3)理解形参和实参的引用传递关系。
4)熟悉引用参数和输出参数的使用。
5)学会如何在方法中返回值。
实验步骤:
1)定义方法Sort,给三个整数按从小到大的顺序排序并求其和及平均值。
其中,三个待求整数及排序后的结果由引用参数传递,其和由输出参数传递,平均值由返回值返回。
2)在Main方法中读入待求的三个正整数。
3)在Main方法中调用方法Sort给三个整数排序并求其总和及平均值。
4)在Main方法中输出结果。
4.3求n!
的值
实验题目:
用递归的方法求n!
(n>=0)。
实验目的:
1)掌握递归方法的定义与使用。
2)熟悉递归的“递推”和“回归”过程。
3)理解行参和实参的值传递关系。
实验步骤:
1)定义递归方法fac,计算整数n的阶乘,方法中需要递归调用自身。
2)在Main方法中读入整数n的值。
3)在Main方法中调用fac方法,求出整数n的阶乘。
4)Main方法中输出计算结果。
第5章面向对象与对象模型
实验目的:
1.理解C#语言是如何体现面向对象编程基本思想;
2.掌握类对象的定义;
3.了解类的封装方法,以及如何创建类和对象;
4.了解成员变量和成员方法的特性;
5.掌握静态成员的用法;
6.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义
和重载构造函数。
能够根据给定的要求定义类并实现类的成员函数;
7.理解类的成员的访问控制的含义,公有、私有和保护成员的区别;
8.掌握参数传递的用法;
9.掌握属性的作用和使用。
实验题目:
5.1类定义
以下是一个学生管理系统的UML类图,根据图示分别写出Student和Students两个类的定义。
即方法具体实现不需要给出,但有返回值的则需要给出return语句。
5.2创建一个描述图书信息的类并在主函数中测试图书类。
要求:
1)定义图书类Book,Book类中包含isbn(书号)、title(标题)、author(作者)、press(出版社)、price(价格)等私有字段。
由于对一本书来说,书号是唯一的,因此,isbn字段应声明为只读的。
2)为Book类中的每个字段定义相应的属性,由于isbn字段只读的,其相应属性也应该是只读的。
3)为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值,另一个构造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初始化时,价格取0,除书号的其他信息取“未知”。
4)为Book类定义方法Show,Show方法用于显示图书的所有信息。
5)编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建Book对象。
5.3实现一个日期类型。
要求:
1)定义日期类型Date。
要求有以下面成员:
年、月、日变量
2)重载的构造方法,一个实现年、月、日单独的输入,一个实现从系统时间里读出年月日,4)实现打印方法成员,该方法要按照“XXXX年XX月XX日”格式输出日期。
5)编写Main方法测试Date类,Main方法中分别使用上述两个构造函数创建Date对象。
5.4通过类程序说明静态变量/方法与实例变量/方法的区别
static声明的成员变量/方法被视为类的成员变量/方法,而不把它当作实例对象的成员变量/方法。
换句话说,静态变量/方法是类固有的,可以直接引用,其它成员变量/方法仅仅被声明,生成实例对象后才存在,才可以被引用。
基于这样的事实,也把静态变量/方法称为类变量/方法,非静态变量称为实例变量/方法。
要求:
1)编写帐户类BankAccount,包含账号IDstringBankAccountId,账户存款doubleinitialDepositAmount两个基本字段。
2)对每一账号设置初始化存款为0.00元
3)在类内设计一变量统计账号生成的数目。
4)编写类函数displayid,显示帐户ID及存款数额。
5)编写类函数display,显示程序共存建了几个帐户。
6)编写Main方法测试BankAccount类,致少创建3个类变量,测试类函数displayid,display。
5.4方法中参数传递的练习
在C语言值传递和传地址的基础上,C#语言又增加传引用和out参数。
值传递不能修改实参的值;传地址可以间接地修改调用方法中变量的值;传引用,由于传递的是同一个对象的别名,所以在被调用方法中修改的同一个对象;out输出参数在调用前对象可以没有初始值,通过out修饰在被调用方法中修改对象的值,再带回来。
要求:
1.创建名为ArgumentsPass的控制台应用程序。
2.为了在程序中能使用指针。
在解决方案资源管理器当中选中ArgumentsPass项目,鼠标右键单击->选择属性,在左边的一栏选择“生成”,将其中的“允许不安全代码”复选框选中,这样在程序中就可以使用指针。
3.在类ArgumentsPass中加入下面的代码:
publicstaticvoidswap(intx,inty)
{
intt=x;x=y;y=t;
}
publicstaticvoidswap(refintx,refinty)
{
intt=x;x=y;y=t;
}
publicunsafestaticvoidswap(int*x,int*y)
{
intt=*x;*x=*y;*y=t;
}
publicstaticvoidchange(int[]arr)
{
for(inti=0;i } publicstaticintTestOut(outchari) { i='b'; return-1; } 4.在主函数中添加代码,测试以上函数,要求分别在屏幕上打印出参数被传进函数前和函数后 5、思考题 1.如果调用一个方法之后想“带回”多个值,应该都有什么方法? 2.传引用和传对象之间的区别。 3.C#中的数组和C语言的数组有什么区别。 第6章继承与多态 实验目的: 1.理解继承的含义,掌握派生类的定义方法和实现; 2.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。 3.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序; 4.编写体现类多态性(成员方法重载,构造方法重载)的程序。 实验要求: 1.写出程序,并调试程序,要给出测试数据和实验结果。 2.整理上机步骤,总结经验和体会。 3.完成实验报告和上交程序。 6.1类的继承和基类构造方法的应用 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。 新类还可添加新的变量和方法。 这种现象就称为类的继承。 当建立一个新类时,不必写出全部成员变量和成员方法。 只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。 被继承的类称为父类或超类(superclass),这个新类称为子类。 C#提供了一个庞大的类库让开发人员继承和使用。 设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。 你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。 所以,通常要对子类进行扩展,即添加新的属性和方法。 这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。 继承的意义就在于此。 实验要求: 1.编写一个学生类student和教师类teacher 2.该类能实现对学生和教师数据的输入和显示功能。 3.学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。 4.要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。 5.编写Main方法测试teacher类和student类 6.2类的多态性练习 1.理解类的多态性 类的继承发生在多个类之间,而类的多态只发生在同一个类上。 在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。 这种现象称为类的多态。 多态使程序简洁,为程序员带来很大便利。 在OOP中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。 这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。 类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。 2.构造方法的重载 方法的重载是指对同名方法的不同使用方式。 构造方法的名称和类同名,没有返回类型。 尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。 因此,构造方法不能直接调用,只能由new操作符调用。 构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。 重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。 实验要求: 1.设计一个雇员系统,定义雇员基类,雇员共同的属性包括姓名、地址和出生日期; 2.定义子类: 程序员,秘书,高层管理人员,清洁工。 各类职务员工具有不同工资算法,以多态的方式处理程序。 3.雇员类中定义虚函数Salary,被重载后完成工资结算功能。 4.在各子类中重载Slayr函数,在该函数里只需在屏幕打印出雇员所属的类名,雇员姓名,薪水数额即可。 5.编写Main方法,定义一个长度为4的雇员类数组,数组中分别存放一个程序员,秘书,高层管理人员,清洁工的类变量。 写一个循环程序,调用各个类变量的Salary函数。 思考: 1.如果将基类中虚方法关键字virtual去掉程序会怎样? 2.如果将雇员类定义为抽象类是否可以实现该实验中要求的功能? 有可能请写出实现程序。 3.能否再举一个例子,说明多态性在现实中的应用。 第7章操作符重载编程练习 实验目的: 1.了解操作符重载的意义,掌握操作符重载的一般方法。 2.理解操作符对的重载实现,编写相应的程序。 实验要求: 1.进一步了解操作符重载的实现。 2.掌握operator关键字的使用方法。 3.掌握常用的操作符重载: 数学操作符、逻辑操作符、转换操作符重载实现。 4.写出程序,并调试程序,要给出测试数据和实验结果。 5.整理上机步骤,总结经验和体会。 6.完成实验报告和上交程序。 7.1操作符重载 TimeSpan类含一个总耗费秒数变量,每小时秒数3600常量,每分钟秒数60常量; 构造方法实现无参数时总耗秒为初设为0,具有小时、分钟和秒参数时总耗秒为小时和分钟及秒总含秒数; 打印出总共消耗小时数、分钟数和秒数; 定义了TimeSpanAdd方法,实现两个TimeSpan对象的加和; 参考代码如下: usingSystem; classTimeSpan { privateuinttotalSeconds; privateconstuintSecondsInHour=3600; privateconstuintSecondsInMinute=60; publicTimeSpan() { totalSeconds=0; } publicTimeSpan(uintinitialHours,uintinitialMinutes, uintinitialSeconds) { totalSeconds=initialHours*SecondsInHour+ initialMinutes*SecondsInMinute+initialSeconds; } publicuintSeconds { get { returntotalSeconds; } set { totalSeconds=value; } } publicvoidPrintHourMinSec() { uinthours; uintminutes; uintseconds; hours=totalSeconds/SecondsInHour; minutes=(totalSeconds%SecondsInHour)/SecondsInMinute; seconds=(totalSeconds%SecondsInHour)%SecondsInMinute; Console.WriteLine("{0}Hours{1}Minutes{2}Seconds", hours,minutes,seconds); } publicstaticTimeSpanAdd(TimeSpantimeSpan1,TimeSpantimeSpan2) { TimeSpansumTimeSpan=newTimeSpan(); sumTimeSpan.Seconds=timeSpan1.Second
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 实验 指导书