《C#语言程序设计》实 验 报 告.docx
- 文档编号:6912212
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:22
- 大小:124.47KB
《C#语言程序设计》实 验 报 告.docx
《《C#语言程序设计》实 验 报 告.docx》由会员分享,可在线阅读,更多相关《《C#语言程序设计》实 验 报 告.docx(22页珍藏版)》请在冰豆网上搜索。
《C#语言程序设计》实验报告
《C#语言程序设计》实验报告
学院:
信息学院
专业:
计算机科学与技术
指导教师:
报告人:
学号:
班级:
实验一简单编程练习
一、目的与要求
1、熟悉VisualStudio.NET集成开发环境(IDE)
2、熟悉C#源程序语言的编辑、编译和运行过程
3、能够创建、编译和执行一个简单的C#程序
二、实验仪器
Windows操作系统,MicrosoftVisualStudio.NET2010。
三、实验内容
1.开发一个简单的控制台应用程序,该程序完成一段字符的输入,然后输出该字符串。
2.开发一个简单的Windows应用程序,该程序通过鼠标单击按钮在文本框中显示一行字符串。
四、实验过程与结果
〔1〕启动.NET2010。
〔2〕在“文件〞菜单上找到“新建〞->“项目〞,打开“新建项目〞对话框。
〔3〕在模板一栏选择“控制台应用程序〞,在名称一栏输入项目的名称。
〔4〕位置一栏内指定的是项目存放的目录,可以更改为自己定制的目录,也可以使用系统提供的默认路径。
〔5〕按确定以后用下面的代码替换Program.cs已有的所有代码:
usingSystem;
namespaceTestConsole
{
classProgram
{
staticvoidMain()
{
stringstr;
System.Console.WriteLine("Pleaseinputastring!
");
str=System.Console.ReadLine();
System.Console.WriteLine(str);
}
}
}
〔6〕运行应用程序(ctrl+F5)。
〔1〕新建项目,选择Windows应用程序,输入名称为:
TestWindows。
〔2〕在主窗体上放置一个TextBox和一个Button。
〔3〕选中TextBox,展开它的属性面板〔单击鼠标右键,选择属性〕,将它的Name属性设置为txtContent,Text属性设置为空。
〔4〕选中Button,展开它的属性面板,将它的Name属性设置为btnType,Text属性设置为“显示〞。
〔5〕在窗体上鼠标双击按钮,在生成的事件处理方法内添加如下的代码:
txtContent.Text="hello!
";
〔6〕运行应用程序(ctrl+F5)。
五、实验总结
C#较其他语言比如Java,在可视化界面方面更方便。
采用拖拽式的界面设计操作,对新手来说更好入门。
除了界面其他方面和其他语言还有一定区别。
1、必须借助.NETFramework类库实现
2、必须定义类
3、类的代码主要由方法组成
4、C#程序中的方法的结构由头部和方法体构成
5、C#程序的输入与输出操做:
需要借助Console的类方法(ReadLine、WriteLine)
实验二控制结构编程练习
一、目的与要求
1、掌握分支结构语句的语法书写格式
2、掌握循环结构语句的语法书写格式
3、综合利用各种结构语句完成特定的任务
二、实验仪器
Windows操作系统,MicrosoftVisualStudio.NET2010。
三、实验内容
1.开发一个简单的控制台应用程序,求1!
+2!
+3!
+……+10!
。
2.开发一个简单的控制台应用程序,该程序完成一个一维数组排序编程,然后输出该数组。
四、实验过程与结果
1.1!
+2!
+3!
+……+10!
〔1〕启动.NET2010。
〔2〕在“文件〞菜单上找到“新建〞->“项目〞,打开“新建项目〞对话框。
〔3〕在模板一栏选择“控制台应用程序〞,在名称一栏输入项目的名称。
〔4〕按确定以后用下面的代码替换Program.cs已有的所有代码:
usingSystem;
classEx2
{
publicstaticvoidMain()
{
inti,k,m=1,sum=0;
for(i=1;i<=10;i++)
{
for(k=1;k<=i;k++)
m=m*k;
sum=sum+m;
m=1;
}
Console.WriteLine("1!
+2!
+3!
+……+10!
={0}",sum);
}
}
〔5〕运行应用程序(ctrl+F5)。
2.一维数组排序编程
〔1〕启动.NET2010。
〔2〕在“文件〞菜单上找到“新建〞->“项目〞,打开“新建项目〞对话框。
〔3〕在模板一栏选择“控制台应用程序〞,在名称一栏输入项目的名称。
〔4〕按确定以后用下面的代码替换Program.cs已有的所有代码:
usingSystem;
namespaceshuzu
{
classmaopo
{
publicstaticvoidMain()
{
int[]a=newint[10];
Console.WriteLine("请输入10个整数");
for(inti=0;i<10;i++)
{
Console.Write("第[{0}]个数:
",i+1);
a[i]=Int32.Parse(Console.ReadLine());
}
Console.WriteLine("排序前的十个数是:
");
for(inti=0;i<10;i++)
{
Console.Write("{0}\t",a[i]);
}
Console.WriteLine();
inttemp;//临时变量
for(intj=0;j<9;j++)
{
for(inti=0;i<9-j;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for(inti=0;i<10;i++)
{
Console.WriteLine("排序后的结果是:
");
Console.Write("{0}\t",a[i]);
}
Console.WriteLine();
}
}
}
〔5〕运行应用程序(ctrl+F5)。
五、实验总结
循环就是重复执行一些语句。
这个技术使用起来非常方便,因为可以对操作重复任意屡次,而无需每次都编写一样的代码。
while循环非常类似于do循环,但有一个重要的区别:
while语句中的布尔测试是在循环开始时进展,而不是最后。
如果测试结果为false,循环代码将不会被执行,而直接执行循环后面的代码。
分支是控制下一步要执行哪些代码的过程。
要跳转的代码是由某个条件语句来控制的,这个条件语句使用布尔逻辑,对测试值和一个或多个可能的值进展比拟。
C#中的分支结构有以下三种:
1、三元运算其语法如下:
<条件运算>?
<运算真的结果>:
<运算假的结果>
2、if语句其最简单语法:
if(<条件运算>)<运算真的结果>;当然也可以将else语句和if语句合并使用,指定其他的代码。
如果<条件运算>的结果为false时就执行else语句。
其语法结构如下:
if(<条件运算>){<运算真的结果>}else{<运算假的结果>}3、我们知道当进展的比拟少的情况下用if与else语句是很方便的,但是如果我们进展很多的比拟时,就应该考虑使用另一种分支结构:
switch语句。
实验三类设计练习
一、目的与要求
1、掌握C#语言定义类的方法。
2、掌握派生类的设计方法。
3、理解运行时多态的含义。
二、实验仪器
Windows操作系统,MicrosoftVisualStudio.NET2010。
三、实验内容
1.依次定义Rectangle,Circle,Cylinder三个类,Circle类继承于Rectangular,Cylinder继承于Circle。
在Rectangle类中需要定义属性,虚拟的Area()方法,虚拟的Name属性,重写ToString()方法;在Circle类中需要定义属性,重写Area()方法,重写Name属性,重写ToString()方法,定义周长方法。
在Cylinder类中要定义Volume方法,重写Area,ToString方法,Name属性。
定义一个Test类,参加主方法,在主方法中分别定义三个类的对象和实例;定义Rectangle类的对象数组,将数组元素分别引用到刚定义的三个实例上,然后通过基类对象调用重写的方法。
四、实验过程与结果
〔1〕启动.NET2010。
〔2〕在“文件〞菜单上找到“新建〞->“项目〞,打开“新建项目〞对话框。
〔3〕在模板一栏选择“控制台应用程序〞,在名称一栏输入项目的名称。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
publicclassRectangle
{
publicconstdoublepi=Math.PI;
privateintx,y;
privatedoublewidth,height;
publicRectangle(intx,inty,doublewidth,doubleheight)
{
this.x=x;
this.y=y;
this.width=width;
this.height=height;
}
publicintY
{
get{returny;}
set{y=value;}
}
publicintX
{
get{returnx;}
set{x=value;}
}
publicdoubleHeight
{
get{returnheight;}
set{height=value;}
}
publicdoubleWidth
{
get{returnwidth;}
set{width=value;}
}
publicvirtualdoubleArea()//定义虚拟方法
{
returnheight*width;
}
publicvirtualstringName//虚拟属性
{
get
{
return"矩形";
}
}
publicoverridestringToString()
{
return("左上角坐标"+"("+X+","+Y+")"+"宽"+width+"高"+height);
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
publicclassCircle:
Rectangle
{
privateintxValue,yValue;
privatedoubleradius;
publicCircle(intx,inty,doubler):
base(x-(int)r,y-(int)r,2*r,2*r)
{
this.xValue=x;
this.yValue=y;
this.radius=r;
}
publicintYValue//圆心坐标
{
get{returnyValue;}
set{yValue=value;}
}
publicintXValue
{
get{returnxValue;}
set{xValue=value;}
}
publicdoubleRadius
{
get{returnradius;}
set{radius=value;}
}
publicdoubleDiameter//直径
{
get
{
returnWidth;
}
}
publicdoubleCircumference()
{
return2*pi*radius;
}
publicoverridedoubleArea()//重写虚拟方法
{
returnpi*radius*radius;
}
publicoverridestringName//重写虚拟属性
{
get{return"圆";}
}
publicoverridestringToString()
{
return("圆心:
"+"("+xValue+","+yValue+")"+"半径"+Radius);
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
classCylinder:
Circle
{
privatedoubleh;
publicCylinder(intx,inty,doubler,doubleh):
base(x,y,r)
{
H=h;
}
publicdoubleH
{
get{returnh;}
set{h=value;}
}
publicoverridedoubleArea()
{
returnpi*Radius*Radius;
}
publicdoubleVolume()
{
returnbase.Area()*H;
}
publicoverridestringName
{
get
{
return"圆柱";
}
}
publicoverridestringToString()
{
returnbase.ToString()+"高"+H;
}
}
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
publicclassTest
{
publicstaticstringShowArea(Rectangle[]Items)
{
stringoutput="";
foreach(RectangleIteminItems)
output+="\n"+Item.Name+":
"+Item.ToString()+"面积"+Item.Area();
returnoutput;
}
publicstaticvoidMain()
{
Rectanglerectangle1=newRectangle(0,0,35.2,100);
Circlecircle1=newCircle(10,8,10);
CylinderCylinder1=newCylinder(12,6,10.35,25.6);
Rectangle[]shape=newRectangle[3];
shape[0]=rectangle1;
shape[1]=circle1;
shape[2]=Cylinder1;
stringoutput=ShowArea(shape);
output+="体积"+Cylinder1.Volume();
Console.WriteLine(output,"运行结果");
}
}
}
〔4〕运行应用程序(ctrl+F5)。
五、实验总结
类的定义是以关键字 class 开始,后跟类的名称。
类的主体,包含在一对花括号内。
虚方法特点总结:
1,在父类中把需要设置为虚方法的方法前加virtual标记;
2,虚方法在父类中必须有实现,哪怕是空实现
3,子类继承父类后,可以选择对虚方法进展重写也可以选择不进展重写;
4,当子类重写父类方法的时候,必须保证重写后的方法和原方法的访问修饰符,返回值类型,方法名,参数列表完全一致;
5,当方法的标记是virtual和override的时候都可以重写。
*实现继承:
表示一个类型派生于基类型,它拥有该基类型的所有成员字段和函数。
在实现继承中,派生类型采用基类型的每个函数的实现代码,除非在派生类型的定义中指定某个函数的实现代码。
在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,可以使用这种类型的继承。
*接口继承:
表示一个类型只继承了函数的签名,没有继承任何的代码。
在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。
C#不支持多重继承,但C#允许类型派生自多个接口————多重接口继承。
这说明,C#类可以派生自另一个类和任意多个接口。
更准确的说,因为System.Object是一个公共的基类,所以每个C#〔除Object之外〕都有一个基类,还可以有任意多个接口。
使用结构的一个限制是结构不支持实现继承,但每个结构都自动派生自System.ValueType。
不能编码实现类型层次的结构,但结构可以实现接口。
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
换句话说,实际上就是同一个类型的实例调用“一样〞的方法,产生的结果是不同的。
这里的“一样〞打上双引号是因为这里的一样的方法仅仅是看上去一样的方法,实际上它们调用的方法是不同的。
实验四委托事件处理编程
一、目的与要求
1.掌握代理的定义,代理的实例化和代理的调用。
2.掌握代理的本质。
3.掌握事件代理的定义,事件的定义,事件的触发以与实例化事件代理和事件处理方法的实现。
4.了解事件参数类的定义和使用方法。
二、实验仪器
Windows操作系统,MicrosoftVisualStudio.NET2010。
三、实验内容
在一个文本框中输入圆的半径,回车之后,将半径的值赋给circle类〔自定义的类〕的R属性,从而触发一个事件,在主窗体类中设计事件处理方法,在事件处理方法中要根据半径的值计算对应的圆的面积,周长和对应的球的体积。
计算的结果通过文本框的方式显示出来。
注意需要定义一个事件参数类来记录半径的值,事件触发后将半径的值传递给事件处理方法,事件处理方法才能根据半径的值进展计算。
四、实验过程与结果
“EventExample〞的Windows应用程序,在主窗体上放置两个TextBox,将第二个TextBox的Multiline属性设置为true,ReadOnly属性设置为true,如如下图所示。
2.向应用程序添加一个类,在对应文件中添加如下代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceEventExample
{
classRadiusEventArgs:
EventArgs//事件参数类的定义
{
privatedoubler;
publicRadiusEventArgs(doubler)
{
this.r=r;
}
publicdoubleR
{
get
{
returnr;
}
}
}
classCircle//Circle类的定义
{
privatedoubler;
publicdelegatevoidMyDelegate(objectob,RadiusEventArgse);
//定义代理
publiceventMyDelegateradiusEvent;//定义事件
publicdoubleR
{
set
{
r=value;
}
}
}
}
3.回到主窗体的类,添加Circle类的对象;radiusEvent事件的实例化〔封装事件处理方法〕;编写事件处理方法。
publicpartialclassForm1:
Form
{
privateCirclec;
publicForm1()
{
Initializeponent();
创建Circle类的实例;
c.radiusEvent事件实例化;
}
voidc_radiusEvent(objectob,RadiusEventArgse)
{
textBox2.Text="面积="+(Math.PI*e.R*e.R).ToString()+"\r\n"+"周长="+(2*Math.PI*e.R).ToString()+"\r\n"+"体积="+(4.0/3*Math.PI*e.R*e.R*e.R).ToString();
}
4.映射textBox1的KeyDown事件,判断当输入回车时修改Circle类的R属性。
c.R=Convert.ToDouble(textBox1.Text);
5.运行程序,测试设计的功能。
五、实验总结
代理就是用来定义指向方法的引用
1.代理声明的语法:
[public/private]delegate<返回值类型><代理名称>(<参数列表>);
“实例化〞:
代理声明相当于类的定义。
有了类的定义后我们要还需生成这个类的对象;同样有了代理的声明我们还需要“实例化〞代理
委托是一种引用方法的类型。
一旦为委托分配了方法,委托将于该方法具有完全一样的行为。
委托的方法的使用可以向其他任何方法一样,具有参数和返回值。
委托与代理的比拟
代理:
是把一些事情交给某人帮助去完成。
委托:
是当某件事情发生的时候,顺便干某件事情。
委托就相当于一个触发器罢了。
实验四WinForm程序设计
一、目的与要求
1.熟悉Windows应用程序的创建方法。
2.掌握代理的本质。
3.掌握事件代理的定义,事件的定义,事件的触发以与实例化事件代理和事件处理方法的实现。
4.了解事件参数类的定义和使用方法。
二、实验仪器
Windows操作系统,MicrosoftVisualStudio.NET2010。
三、实验内容
创建
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C#语言程序设计 C#语言程序设计实 C# 语言程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)