C# 实验四 习题以及答案Word文档下载推荐.docx

上传人:b****6 文档编号:21324565 上传时间:2023-01-29 格式:DOCX 页数:31 大小:83.47KB
下载 相关 举报
C# 实验四 习题以及答案Word文档下载推荐.docx_第1页
第1页 / 共31页
C# 实验四 习题以及答案Word文档下载推荐.docx_第2页
第2页 / 共31页
C# 实验四 习题以及答案Word文档下载推荐.docx_第3页
第3页 / 共31页
C# 实验四 习题以及答案Word文档下载推荐.docx_第4页
第4页 / 共31页
C# 实验四 习题以及答案Word文档下载推荐.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

C# 实验四 习题以及答案Word文档下载推荐.docx

《C# 实验四 习题以及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C# 实验四 习题以及答案Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。

C# 实验四 习题以及答案Word文档下载推荐.docx

格式化输出统计结果

stringstr=string.Format("

{0,-15}{1,3}"

de.Key,de.Value);

txtFile.Text=txtFile.Text+str+"

\r\n"

图2词频统计界面

二.异常处理-简单的除法运算器

鉴于大家上课留实验的时候面色不太正常,故降低实验难度,哈哈,老师我还是很和谐滴!

1.创建项目L4_2。

2.两个加数分别输入2和3,调试并修改程序,得出结果

3.

两个加数分别输入字符a和b,调试并修改程序,在结果文本框中输出相应的异常提示,如图3所示。

图3格式化异常

4.两个加数分别输入123456789876543和1,调试并修改程序,在结果文本框中输出相应的异常提示。

5.两个加数分别输入123和0,调试并修改程序,尝试用finally处理该异常。

6.定义一个自己的异常MyException,并在TxtOp1或者TxtOp2为空的时候,抛出该异常。

利用catch语句将该异常捕捉。

try

{

if(TxtOp1.Text=="

"

||TxtOp2.Text=="

thrownewmyexception("

不能为空!

);

}

catch(myexceptionme)

MessageBox.Show(me.Message);

三、委托练习

以委托对象作为方法的参数,对学生类对象分别按照姓名、年龄和年级来比较两个学生对象,实现程序以不同的排序方式来输出学生信息。

(1)创建一个控制台应用程序L4_3。

(2)在Program.cs文件中,首先定义Student类:

●定义三个私有字段,包括字符串类型的姓名、整型的年龄、整型的年级

●分别定义三个共有属性

●定义带参构造函数Student(stringname,intage,intgrade)

●声明委托CompareFunction

publicdelegateintCompareFunction(Students1,Students2);

●定义方法SortPrint

提示:

这里利用委托,可以根据用户的不同选择,调用CompareName、CompareAge或者CompareGrade方法,来实现不同的排序方式,使用的冒泡排序方法。

publicstaticvoidSortPrint(Student[]students,CompareFunctioncompare)

for(inti=students.Length-1;

i>

0;

i--)

for(intj=0;

j<

i;

j++)

if(compare(students[j],students[j+1])>

0)

Students=students[j];

students[j]=students[j+1];

students[j+1]=s;

foreach(Studentsinstudents)

Console.WriteLine(s);

(3)在Program.cs文件中,定义三个与委托具有同相同签名的方法CompareName、CompareAge和CompareGrade

staticintCompareName(Students1,Students2)

returns1.Name.CompareTo(s2.Name);

staticintCompareAge(Students1,Students2)

//todo

staticintCompareGrade(Students1,Students2)

(4)在Main函数中通过选择排序方式(A姓名、B年龄、C年级)确定SortPrint方法调用的第2个参数(CompareFunction委托类型),以实现不同的排序方式。

staticvoidMain(string[]args)

Student[]students=newStudent[5];

students[0]=newStudent("

zhang"

18,2);

Student.CompareFunctioncompare;

Console.WriteLine("

请选择排序方式:

A姓名B年龄C年级"

charch=Console.ReadKey().KeyChar;

if(ch=='

B'

||ch=='

b'

compare=CompareAge;

\n"

Student.SortPrint(students,compare);

Console.ReadLine();

运行界面如图4所示。

图4按年龄排序

四.异常抛出和捕捉

编写一个计算阶乘的程序,当不能存储该数值时,引发异常。

(1)创建一个控制台应用程序L4_4。

(2)在Program类的Main方法中输入相应代码,当输入数据无效或运算结构超出数据范围时,使用throw抛出异常,然后在catch代码块中进行处理。

●数据无效异常FormatException(),输出提示“输入数据错误,应输入一个正整数”

●超出数据范围异常OverFlowexception,输出提示“程序运行结果超出数据范围”

if(x<

0)thrownewFormatException();

五.模拟连锁反应事件(验证型题目)

本题目旨在使同学们对事件的使用有所了解,在事件机制中,事件的提供者(Provider)中定义事件成员(即提供事件),并且具有引发事件的功能(在该类的其他成员中引发事件);

而事件的订阅者(Client)对事件的订阅是通过将事件与事件处理方法相关联完成的(通过+=符号)。

(1)创建C#控制台应用程序L4_5。

(2)新建一个表示太阳的类Sun,在其中定义一个事件OnRise,一个成员方法Rise,并在方法中引发。

参考源代码如下(太阳只有一个,所以将其定义为静态类,静态类中只能定义静态成员):

publicstaticclassSun

{

publicstaticeventEventHandlerOnRise;

//定义了一个事件成员OnRise

publicstaticvoidRise()//引发事件的函数成员

太阳从东方升起..."

if(OnRise!

=null)

OnRise(null,null);

//引发事件OnRise

(3)在程序中新建一个公鸡类Cock,在其中定义:

●私有字段_name;

●针对Sun.OnRise事件的处理方法Sun_OnRise;

●事件OnSing;

●引发事件OnSing的方法Sing。

●构造函数,初始化私有字段_name,并将事件处理方法与事件进行关联。

参考源代码如下:

publicclassCock

privatestring_name;

//私有字段,用于存放Cock实例的名称

publicCock(stringname)//构造函数,初始化字段,并将事件关联至处理方法

_name=name;

Sun.OnRise+=newEventHandler(Sun_OnRise);

//定义Sun.OnRise事件的处理方法

privatevoidSun_OnRise(objectsender,EventArgse)

公鸡{0}:

_name);

雄鸡一声天下白!

this.Sing();

//调用Sing方法以引发自身的事件OnSing

publiceventEventHandlerOnSing;

//Cock类的事件成员

publicvoidSing()//引发OnSing事件的方法

喔喔喔..."

if(OnSing!

OnSing(this,null);

(4)在程序中新建一个主人类Host,在其中同样定义:

●起床事件OnGetup;

●起床方法Getup(引发起床事件的成员);

●养鸡方法Foster,在该方法中将事件OnSing与事件处理方法c1_OnSing相关联;

●Cock.OnSing事件的处理方法c1_OnSing。

(c1_OnSing方法中调用Getup方法,表示公鸡打鸣会使主人起床)

publicclassHost

publicHost(stringname)

publiceventEventHandlerOnGetup;

//Host类的事件成员

publicvoidGetup()

日出而作..."

if(OnGetup!

OnGetup(this,null);

publicvoidFoster(Cockc1)

c1.OnSing+=newEventHandler(c1_OnSing);

privatevoidc1_OnSing(objectsender,EventArgse)

主人{0}:

闻鸡起舞!

this.Getup();

(5)新建狗类Dog和猫类Cat,在其中定义:

●私有字段_owner,记录器主人对象;

●owner_OnGetup方法,处理Host.OnGetup事件(主人起床时,狗和猫的动作);

●公有属性Owner封装字段_owner,并在其set访问函数中关联事件和事件处理方法;

publicclassDog

privateHost_owner;

publicHostOwner

get{returnthis.owner;

set

this._owner=value;

this._owner.OnGetup+=newEventHandler(owner_OnGetup);

publicDog(stringname)

privatevoidowner_OnGetup(objectsender,EventArgse)

{0}:

汪汪...主人起床了,我也该起了"

publicclassCat

get{returnthis._owner;

this._owner.OnGetup+=newEventHandler(owner_OnGetup);

publicCat(stringname)

喵喵...主人起床了,我也该起了"

(6)在程序主方法中依次建立鸡、主人、狗、猫对象,而后调用Sun.OnRise方法,参考源代码如下:

classL4_5

staticvoidMain()

Cockcock1=newCock("

花花"

Hosthost1=newHost("

小明"

host1.Foster(cock1);

Dogdog1=newDog("

阿黄"

dog1.Owner=host1;

Catcat1=newCat("

咪咪"

cat1.Owner=host1;

Sun.Rise();

六.使用泛型类List<

T>

(1)创建C#Windows应用程序L4_6。

(2)向程序主窗体中分别加入4个RadioButton控件、一个RichTextBox控件、一个ListBox控件,以及一个Button控件,控件的内容和布局如图2所示。

(3)为按钮控件添加单击事件处理代码:

当用户选中第一个单选框“字符串”时,创建一个构造类型List<

string>

的对象,将RichTextBox控件中的各行文本依次加入到该列表对象中,而后调用对象的Sort方法对列表排序,最后将内容显示在ListBox控件中,参考源代码如下:

string[]ss=richTextBox1.Text.Trim().Split('

\n'

//String类的split方法的用法

if(radioButton1.Checked)//单选按钮的Checked属性,用于指示该按钮是否被选中

List<

l1=newList<

();

//创建List<

的构造类型对象

for(inti=0;

i<

ss.Length;

i++)

l1.Add(ss[i]);

//调用Add方法将各元素加入到List列表中

l1.Sort();

//调用Sort方法将对各元素进行排序

listBox1.Items.Clear();

l1.Count;

listBox1.Items.Add(l1[i]);

//调用Add方法将各元素加入到ListBox中

说明:

List<

是System.Collections.Generic命名空间中定义的一个泛型类,是ArrayList类的泛型等效类,该类用于维护容量可动态调整的同类元素列表,该类提供了一系列对列表进行输入、删除、查找和排序等操作的方法。

例如Add方法用于将新元素加入到列表尾部,Insert方法和RemoveAt方法分别用于在指定位置插入和删除元素。

Find方法和Sort方法分别用于查找和排序等。

同学们可自行试试这些方法。

(4)继续加入按钮单击事件处理代码:

当用户选中第二个单选框“整数”时,程序将RichTextBox控件中的各行文本都转换成整数(转换失败则跳过该行,并给出提示),依次加入到一个List<

int>

对象中,而后排序输出到ListBox控件中,参考源代码如下:

elseif(radioButton2.Checked)

intx;

if(int.TryParse(ss[i],outx))

l1.Add(x);

MessageBox.Show(string.Format("

文本框中第{0}行不是合法的整数"

i+1,"

错误"

));

listBox1.Items.Add(l1[i]);

(5)类似的,当用户选中单选框“小数”或“时间”时,程序分别将RichTextBox控件中的各行文本转换成List<

double>

或List<

DateTime>

集合,而后排序输出到ListBox控件中。

请同学们自己动脑自行完成这两部分代码的设计吧。

(6)编译运行程序,在RichTextBox控件中输入不同内容,而后通过“排序”按钮来检查List<

的不同构造类型的使用效果。

程序输出如图5所示。

图5程序L4_6的示例输出结果

答案:

1、usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

namespaceL4_1

publicpartialclassForm1:

Form

publicForm1()

InitializeComponent();

privatestring[]filestr;

privateDictionary<

string,int>

isEx;

privatevoidForm1_Load(objectsender,EventArgse)

filestr=newstring[3];

isEx=newDictionary<

string,int>

filestr[0]="

filestr[1]="

filestr[2]="

privatevoidbutton1_Click(objectsender,EventArgse)

if(button1.Text=="

文?

件t显?

示º

?

1"

textBox1.Text=filestr[0];

button1.Text="

2"

elseif(button1.Text=="

textBox1.Text=filestr[1];

button1.Text="

3"

elseif(button1.Text

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1