您好,欢迎访问三七文档
实验一1.尝试用命令行方式编译一个简单的控制台程序为可执行PE文件。(1)先用“记事本”编写一个简单的控制台应用程序p1.cs,该程序中只包含可供测试的几行简单代码,例如为:usingSystem;usingSystem.Threading;classtest{staticvoidMain(){intx,y;x=Int32.Parse(Console.ReadLine());y=Int32.Parse(Console.ReadLine());Console.WriteLine({0}+{1}={2},x,y,x+y);Console.ReadLine();}}(2)使用C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe程序(该路径为VS2005下适用,如果用更高版本时应相应调整)以及适当的参数执行编译命令。产生一个可执行PE程序。(3)执行该PE程序,观察是否符合预期。(4)观察用以上方法编译时,如果代码中有错误,系统如何输出错误信息?2.使用GC类控制.NET的垃圾回收操作。(1)按照教材上【例1-3】,建立C#的控制台应用程序。(2)编译调试该程序,观察、记录控制台输出。(3)如果要使MakeSomeGarbage方法中产生的对象不会被回收,应该如何修改MakeSomeGarbage中的代码?修改后实际运行时,观察程序输出的相关信息是否与预计一致(需要与修改前输出的内存占有数据相比较)。3.学习使用委托(1)按照教材上【例1-5】,建立C#的控制台应用程序。(2)编译调试该程序,观察、记录控制台输出。4.不要利用VisualStudio.NETIDE环境的“工具箱”、“属性窗口”,最好只使用“笔记本”写代码,编写一个“Hello,World!”的Windows应用程序。(1)该Windows程序窗体上有一个按钮。当单击按钮时,弹出对话框显示“Hello,World!”。(2)在“命令行窗口”下执行CSC将C#代码文件编译为PE程序。提示:可在Form_Load等事件中执行Buttonbutton1=newButton();创建该按钮,对该按钮,要将其加入到Form的Controls集合中。然后对按钮的Text、Position等属性赋值。最后记得要为单击按钮的事件设置一个方法:this.button1.Click+=newSystem.EventHandler(this.button1_Click);详见教材上§1.5.2中有关叙述。实验二1.使用StreamReader和StreamWrite类操纵文本文件。(1)按照教材上【例2-4】,建立C#的控制台应用程序。(2)编译调试该程序,观察、记录控制台输出。(程序中使用的文件路径和名称可调整)(3)修改一下程序中代码,将ReadLine方法替换为使用ReadToEnd方法,但仍然可以输出同样的结果。2使用DirectoryInfo类和FileInfo类,对文件系统进行操作。(1)按照教材上【例2-8】,建立C#的控制台应用程序。(2)编译调试该程序,观察、记录控制台输出。(程序中使用的文件夹名称可以酌情调整)(3)修改或补充该程序,当指定一个文件夹后,程序可输出该文件夹及其各级子目录内所包含的文件的总数。3.使用DriveInfo类探测本机上各个驱动器。(1)按照教材上【例2-12】,建立C#的控制台应用程序。(2)编译调试该程序,观察、记录控制台输出。(3)修改或补充该程序,使能找到本机上所有U盘中可用空间最大的那一个。4.使用FileSystemWatche类,监视C盘根目录上的各种文件操作。(1)按照教材上【例2-13】建立C#的控制台应用程序。(2)编译调试该程序,记录测试过程。(3)修改或补充该程序,使得文件改名操作不允许(或每次改名后总能自动改回去)。实验三1.学习ArrayList的基本操作(1)按照教材上【例3-1】建立C#的控制台应用程序。(2)编译调试该程序,记录测试过程和运行结果。(3)尝试一下将两种不同类型的对象添加为同一个ArrayList中的元素。你认为是否可行?记录下实际运行的结果。2.学习Stack类的基本操作(1)按照教材上【例3-3】建立C#的控制台应用程序。(2)编译调试该程序,记录测试过程和运行结果。(3)修改一下本例的代码:将输出栈中所有元素的任务定义为一个方法。该方法应类似例3-3中的ShowValues那样,利用该集合中实现的IEnumerator接口的方法来工作。3.学习哈希表的基本操作(1)按照教材上【例3-4】建立C#的控制台应用程序。(2)编译调试该程序,记录测试过程和运行结果。4.学习Sortedlist的基本操作(1)参考教材上【例3-5】,使用Sortedlist编写一个简单的数据查找程序。(2)新建WindowsForm应用程序,在程序中加入一个Sortedlist对象。窗体上放三个按钮、两个文本框和一个列表框。三个按钮的Text分别为“添加”、“查找”、“列表”。(3)在第一个文本框中输入英文单词,在另一个文本框中输入中文解释,然后单击“添加”按钮即添加该“键、值对”到Sortedlist集合内。(4)在第一个文本框中输入英文单词后,单击“查找”按钮进行按“键”的查找。当找到该项后,在第二个文本框内显示其中文释义。如果找不到,则弹出一个“该项未找到!”的信息框。(5)单击“列表”按钮,在列表框中显示该Sortedlist的所有元素。注意观察它们是否已经都排好序了。5.使用泛型(1)按照教材上【例3-9】建立C#的控制台应用程序。(2)编译调试该程序,分析运行时输出的数据,看它是否符合栈“后进先出”的基本要求。(3)修改或补充该程序,使得对上述程序中使用的类型为Stackstring。然后再运行,并比较与此前程序运行时有什么区别。6.自定义集合类型(1)按照教材上【例3-10】建立C#的控制台应用程序。(2)编译调试该程序,记录测试过程和运行结果。(3)尝试将本例中publicContractorthis[intIndex]方法注释掉后再进行编译,看看是否会影响在自定义集合中使用索引器(即像访问数组元素那样去访问集合的元素)。(4)尝试为本例中自定义的集合类型添加一个Remove或RemoveAt方法用于删除元素。实验四1.使用Thread类,创建多线程应用程序(1)按照教材上【例4-1】建立C#的控制台应用程序。(2)编译调试该程序,根据运行时输出的数据,分析这些线程如何并发运行。(3)修改或补充该程序,适当增加线程的数目以及每个线程中循环执行的次数。或者改变Sleep的参数。然后再运行,并比较与此前程序运行时有什么区别。如果发现有规律性的东西,请在实验报告中给予解释。(4)修改或补充该程序,适当增加线程的数目以及每个线程中循环执行的次数。或者改变Sleep的参数,并降低第一个线程的优先级并提高最后一个线程的优先级。然后再运行,观察其输出。看看能否使第一个线程比最后一个线程结束得更晚。2.使用ThreadPool类对线程池进行管理。(1)按照教材上【例4-3】,建立C#的控制台应用程序。(2)编译调试该程序,观察、记录和分析其输出,从中获得线程池中同时在运行的线程的最大数目。注意:由于控制台输出缓存有限,可以用“”操作将输出重定向到一个文件(例如C:\ConsoleApplication1.exeC:\output.txt)。(3)思考以下问题:如果将程序中Thread.Sleep(50)语句中的参数值改为较小值,线程池中同时运行的线程数是增加还是减少?建议通过实际修改程序去测试一下自己的判断是否正确。(4)思考以下问题:通过修改程序使程序自动检测运行过程中线程池内最多同时运行的线程的数目并输出该数值。3.使用Thread类的Join方法对线程进行控制。(1)按照教材上【例4-4】,建立C#的控制台应用程序。(2)编译调试该程序,观察和记录控制台输出。注意应能正确解释这个输出结果。4.使用AutoResetEvent类对象对线程进行控制。(1)按照教材上【例4-5】,建立C#的控制台应用程序。(2)编译调试该程序,观察和记录控制台输出。注意应能正确解释这个输出结果。5.线程同步技术综合应用。(1)请参考【例4-4】、【例4-5】等例题,建立C#的控制台应用程序。(2)该程序应完成子任务A、B、C、D、E、F、G。这些子任务之间存在的前趋关系如图1所示。(3)为了提高运行效率,要求该程序使用多线程技术,除主线程外,另加入一至二个分线程(允许使用线程池)。这些多线程之间需要进行适当同步性控制,以满足图1中规定的关系。请在程序中适当使用Thread类的Join方法或AutoResetEvent类对象WaitOne方法解决这里的同步性要求。并且当用Join方法能解决问题时就不用WaitOne或少用WaitOne方法。注:为了突出重点,可将子任务A、B、C、D、E、F、G分别以简单输出语句代替,如Console.WriteLine(“A”);等。图1实验五1.使用Process和ProcessStartInfo类,调用非托管PE应用程序并进行初始运行环境的设置。(1)按照教材上【例6-2】,建立控制台应用程序(程序中用到的网页可以自己随便找一个或编一个)。(2)编译调试该程序,观察、记录其输出并作出解释。(如果在win7下运行,可能需要以管理员权限执行程序才能获得期望的效果)。2.调用非托管的DLL动态链接库程序中的方法。(1)按照教材上【例6-3】,建立控制台应用程序。(2)编译调试该程序,观察、记录其输出并作出解释。3.调用WindowsAPI函数(1)按照教材上【例6-4】,建立WindowsForm应用程序。(2)编译调试该程序,观察、记录其输出并作出解释。(3)还有一个比FindWindow功能更强大API是FindWindowEx,它除了可以查找顶级窗口外,可以获得子窗口的句柄。有兴趣自己去网上查一下,然后尝试做一点测试。4.调用WindowsAPI函数处理窗口消息。(1)按照教材上【例6-5】,建立控制台应用程序。(2)编译调试该程序,观察、记录其输出并作出解释。(3)尝试一下修改该程序,例如将本例中的0x0010消息换成其他windows消息,然后观察运行时出现仕么情况。最好尝试一下有使用到LPARAM和WPARAM参数的消息。5.在.NET项目中调用Word(1)参照教材中的【例6-8】,建立WindowsForm应用程序。本例中使用的“模板”(KTBG.doc)可以下载。(2)编译调试该程序,观察、记录其运行过程。(3)尝试自定义一个模板,并按本例的原理进行自动数据替换达到自动产生表格的效果。并可尝试按照数据库表中的数据填写一批表格(数据库表的每一条记录对应一个表格)。实验中可利用Access数据库“工资.mdb”中的数据(可下载)。6.在.NET项目中调用Excel(1)按照教材上【例6-9】,建立WindowsForm应用程序。(2)编译调试该程序,观察、记录其输出并作出解释。(3)尝试一下通过程序自动将某个Access数据库表所有记录的数据填入到Excel电子表中。实验中可利用“工资.mdb”中的数据(可下载)。实验六1.使用XMLReader类。(1)参照教材上【例7-1】,用XMLReader的对象读取XML文件。(2)编译调试该程序,观察、记录其运行过程。(3)尝试用不同的XML文档,在该程序下进行显示。了解不同XML元素在程序下是如何显示的。(4)尝试对XML稍加修改,使程序中可以读到XML元素的属性。(5)尝试对XML稍加修改,观察当出现某些非规范的XML元素时程序是否出现异常。2.使用XMLWriter类。(1)参照教材上【例7-2】,使用XMLWriter的对象编写XML文件。(2)编译调试该程序,观察、记录其运行过程。(3)尝试修改该程序,实现将数据库表的所有记录写入到XML。(可任意选用一个数
本文标题:C编程实验
链接地址:https://www.777doc.com/doc-2908711 .html