实验指导 实验1C#开发环境及程序设计基础 实验2程序流程控制(一) 实验3程序流程控制(二) 实验4数组和指针 实验5类的设计和实现 实验6结构和枚举 实验7泛型、特性和多线程 实验8语言集成查询(一) 实验9语言集成查询(二) 实验10数值、日期、字符串处理 实验11文件和流I/O 实验12集合和数据结构(一) 实验13集合和数据结构(二) 实验14数据库访问 实验15Windows窗体应用程序开发 实验16WPF应用程序开发 实验17ASP.NET Web应用程序开发 实验1〓C#开发环境及程序设计基础 实 验 目 的  掌握使用命令行开发简单的C#应用程序;  掌握使用Visual Studio编写控制台应用程序;  掌握Visual Studio环境下程序的跟踪调试;  了解Visual Studio在线帮助的使用;  掌握应用程序命令行参数的使用。 实 验 内 容 实验11使用命令行开发简单的C#应用程序 实验要求: 使用记事本编写“Hello World!” C#应用程序,使用C#命令行编译程序csc.exe对应用程序进行编译并运行测试。 操作步骤: (1) 启动记事本,输入如下代码,并保存为C:\C#LAB\LAB01\Hello.cs。 //LAB01/Hello.cs //A "Hello World!" program //compile:csc Hello.cs -> Hello.exe using System; namespace CSharpBook.LAB01 { class HelloWorld { static void Main() { System.Console.WriteLine("Hello World!"); } } } (2) 启动Visual Studio 2022命令提示并进入C:\C#LAB\LAB01文件夹。执行“开始”→“所有应用”→Visual Studio 2022→Developer Command Prompt for VS 2022命令,进入“VS 2022开发者命令提示”命令行窗口,并输入命令cd \C#LAB\LAB01,然后按Enter键,将当前目录切换到实验1的实验目录,如图11所示。 图11切换到实验1的实验目录 (3) 编译Hello.cs程序。在C:\C#LAB\LAB01命令提示状态下输入命令csc Hello.cs,并按Enter键,如图12所示,编译Hello.cs程序。 图12编译、运行Hello.cs程序 (4) 运行Hello.exe程序。在C:\C#LAB\LAB01命令提示状态下输入命令Hello,并按Enter键,见图12,运行Hello.exe程序,观测运行效果。 实验12Visual Studio的基本使用 实验要求: 使用Visual Studio编写控制台应用程序HelloConsole。根据命令行参数(如zhangsan)输出“您好!zhangsan”。 操作步骤: (1) 打开Visual Studio 2022。 (2) 创建控制台应用程序HelloConsole。通过选择“文件”→“新建”→“项目”命令,打开“创建新项目”对话框,在“语言”下拉列表框中选择C#,然后选择“控制台应用”模板,单击“下一步”按钮,如图13(a)所示。在随后出现的“配置新项目”对话框中,在“项目名称”文本框中输入控制台应用程序名称HelloConsole,利用“浏览”按钮选择文件夹C:\C#LAB\LAB01,单击“下一步”按钮,如图13(b)所示。在随后出现的“其他信息”对话框中,勾选“不使用顶级语句”复选框,如图13(c)所示,单击“创建”按钮,创建控制台应用程序解决方案和项目。 (3) 输入处理程序。在Program.cs的Main()方法中添加如下粗体代码: static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("请输入您的姓名作为参数!"); } else { Console.WriteLine("您好! " + args[0]); } Console.ReadKey(); } 图13创建新项目(控制台应用) 图13(续) 图14提示用户输入姓名作为参数 (4) 编译运行。单击工具栏上的“启动”调试按钮,或者按F5键运行并测试该应用程序。运行效果如图14所示,提示用户输入姓名作为参数。 (5) 在Visual Studio环境输入命令行参数并调试运行。右击“解决方案资源管理器”中的项目HelloConsole,从弹出的快捷菜单中选择“属性”命令,在弹出的对话框中选择“调试”选项, 单击“打开调试启动配置文件UI”链接,在随后出现的“启动配置文件”中的“命令行参数”列表框中输入zhangsan,如图15所示。单击该对话框右上角的“关闭”按钮,关闭属性设置。按F5键再次运行并测试应用程序,运行效果如图16所示。 图15输入命令行参数 图16提供命令行参数的运行效果 实验13Visual Studio环境下程序的跟踪调试 实验要求: 熟悉Visual Studio环境下程序的跟踪调试功能,包括设置断点并进行跟踪调试等。 操作步骤: (1) 打开Visual Studio 2022。 (2) 在C:\C#LAB\LAB01中创建控制台应用程序TraceDebug。 (3) 输入处理程序。在Program.cs的Main()方法中添加如下粗体代码(注意: 每条语句末故意未输入“;”,制造5个编译错误): static void Main(string[] args) { int a = 20 int b = 5 int c = 100 / a + b Console.WriteLine(c) Console.ReadKey() } (4) 编译程序。执行“生成”→“生成解决方案”命令编译程序,“错误列表”窗口中将列出如图17所示的5个错误信息,表明源代码中第13~17行缺少“;”。 图17错误列表信息(1) (5) 修正编译错误。依次双击“错误列表”窗口中所列出的错误信息,光标将自动定位到出错的行列位置,依次输入“;”,改正5个编译错误。 (6) 重新编译程序。执行“生成”→“生成解决方案”命令编译程序,如果程序完全正确,Visual Studio窗口底部的状态栏左侧将显示“生成成功”的提示信息。 图18错误列表信息(2) (7) 修正第二类编译错误。故意删除Program.cs第一行的“using System;”语句,执行“生成”→“生成解决方案”命令编译程序。双击图18所示“错误列表”窗口中第一行的错误信息,光标将自动定位到出错的行列位置,右击Console,从弹出的快捷菜单中选择“快速操作和重构”→“using System;”语句,如图19所示,系统将自动在Program.cs中添加导入名称空间的语句“using System;”,改正第二类编译错误。 图19解析错误 (8) 编译运行。按F5键运行测试该应用程序,运行结果为10。 (9) 运行时错误。故意将Program.cs的Main()方法中的“int a=20;”改为“int a=0;”,按F5键运行测试该应用程序。编译通过,但是将出现如图110所示的运行时错误: “尝试除以零”。关闭当前运行窗口(也可以单击工具栏上的“停止调试”按钮,否则运行调试状态将无法修改源代码),再将“int a = 0;”改回“int a = 20;”。按F5键重新运行测试该应用程序,再次得到正确的运行结果: 10。 图110运行时错误 (10) 设置断点。假设本程序其实是计算“100/(a+b)”而不是程序设计时的“100/a+b”,这将是一个逻辑错误。可以借助设置断点查看变量的中间结果加以调试解决。在“int a=20;”所在行的左侧断点区域单击鼠标,在设置断点的位置会出现一个红点,如图111所示。 图111单步调试 (11) 启动调试。按F5键启动调试,调试器将在断点处停止并获得当前窗口焦点。 (12) 单步执行。从断点处可以通过调试工具栏的逐语句执行或逐过程执行,单步运行调试程序。通过选择“调试”→“窗口”→“局部变量”命令,打开“局部变量”调试窗口,查看局部变量a、b、c在运行过程中值的变化,如图111所示。 (13) 删除断点并修正逻辑错误。单击调试工具栏中的“停止调试”按钮,停止调试,将“int c=100/a+b;”改为“int c=100/(a+b);”。在“int a=20;”所在行的左侧断点区域再次单击鼠标,删除断点。按F5键运行测试该应用程序,得到正确的运行结果: 4。 实验14Visual Studio在线帮助的使用 实验要求: 使用Visual Studio在线帮助功能。 操作步骤: (1) 打开实验12的解决方案。执行“文件”→“打开”→“项目/解决方案”命令,在随后的“打开项目”对话框中选择C:\C#LAB\LAB01\HelloConsole\HelloConsole.sln解决方案文件,打开实验12的解决方案。 (2) 使用上下文帮助。鼠标定位到要获得帮助的对象,例如关键字WriteLine中,按F1键打开帮助窗口,显示WriteLine的帮助信息,如图112所示。 图112WriteLine的帮助信息 实验15创建控制台应用程序ConsoleClass 实验要求: 使用Visual Studio编写控制台应用程序ConsoleClass,实现主教材例1.4类和对象示例程序,输出平面上点的坐标值。运行效果如图113所示。 图113实验15运行效果 操作步骤: 程序代码如图114所示。 图114实验15程序代码 实验16创建控制台应用程序ConsoleArgs 实验要求: 使用Visual Studio编写控制台应用程序ConsoleArgs,实现例1.11命令行参数示例程序,输出命令行参数个数以及各参数内容。运行效果如图115所示。 图115实验16运行效果 操作步骤: 请读者参考例1.11和实验12完成。程序代码如图116所示。 图116实验16程序代码 实验2〓程序流程控制(一) 实 验 目 的  掌握常量和变量的使用;  掌握运算符和表达式的使用;  掌握赋值语句的使用;  掌握顺序结构的程序流程;  掌握单分支语句的使用;  掌握双分支语句的使用;  掌握多分支语句的使用。 实 验 内 容 实验21常量、变量、运算符、表达式和赋值语句的使用 实验要求: 输入半径,求对应圆的周长、面积; 对应球体的体积。运行效果如图21所示。 图21实验21运行效果 操作提示: (1) 利用如下语句输入半径r: String s = Console.ReadLine(); //读入字符串 r = double.Parse(s); //将数字字符串转换为等效的双精度浮点数 (2) 程序代码如图22所示。 图22实验21程序代码 实验22求三角形周长和面积 实验要求: 输入三角形三条边,先判断是否可以构成三角形,如果可以,则求三角形的周长和面积,否则报错。运行效果如图23所示。 图23实验22运行效果 操作提示: (1) 三个数可以构成三角形必须满足如下条件: 每条边长均大于0,并且任意两边之和大于第三边。 (2) 已知三角形的三条边,则三角形的面积=h(h-a)(h-b)(h-c),其中h为三角形周长p的一半。 (3) 程序代码如图24所示。 图24实验22程序代码 实验23分段函数的实现 实验要求: 输入x,根据如下公式计算分段函数y的值。要求参照例4.3,分别利用“一句单分支语句”“两句单分支语句”“双分支结构”以及“条件运算符”4种方法实现。运行效果如图25所示。 图25实验23运行效果 y=x2-3xx2+1+2π+sinxx≥0 ln(-5x)+6|x|+e4-(x+1)3x<0 操作提示: 程序代码如图26所示。 图26实验23程序代码 实验24三个数比较大小 实验要求: 产生三个0~100(包含0和100)的随机数a、b和c,按从小到大的顺序排序。运行效果如图27所示(其中a、b和c的值随机生成)。 图27实验24运行效果 操作提示: (1) 方法一: 先a和b比较,使得a0,有两个不等实根: x1=-b+b2-4ac2a,x2=-b-b2-4ac2a。 ⑤ b2-4ac<0,有两个共轭复根: x1=-b2a+4ac-b22ai,x2=-b2a-4ac-b22ai。 (2) 程序代码如图210所示。 图210实验25程序代码 实验26使用switch语句实现多重分支结构 实验要求: 输入一个数字(1~7),用中文显示对应的星期(星期一至星期日)。运行效果如图211所示。 图211实验26运行效果 操作提示: 程序代码如图212所示。 图212实验26程序代码 实验27分别使用if语句和switch语句实现多分支结构 实验要求: 计算有固定工资收入的党员,每月所交纳的党费。计算有固定工资收入的党员,每月所交纳的党费。工资基数3000元及以下者,交纳工资基数的0.5%; 工资基数3000元到5000元者,交纳工资基数的1%; 工资基数在5000元到10000元者,交纳工资基数的1.5%; 工资基数超过10000元者,交纳工资基数的2%。即 党费f= 0.5%*salarysalary≤3000 1%*salary300010000 运行效果如图213所示。 图213实验27运行效果 操作提示: (1) 为了使用switch语句,首先使用如下语句将党费f的大范围区间数值转换为小范围区间数值(即switch语句中的控制表达式c): if (salary > 10000) c = 11; else c = (int)Math.Ceiling(salary/1000.0); 则党费f的计算公式变换为: 党费f=0.5%*salaryc=0~31%*salaryc=4~51.5%*salaryc=6~72%*salaryc=11 (2) 使用switch语句实现的程序代码如图214所示。 图214实验27程序代码(switch语句) (3) 使用if语句实现的程序代码如图215所示。 图215实验27程序代码(if语句) (4) 请改进switch语句的实现代码,使其能处理月工资基数小于0的情况。 (5) 请使用if语句的其他语法形式实现本实验的功能。 实验3〓程序流程控制(二) 实 验 目 的  掌握for循环语句的使用;  掌握while循环语句的使用;  掌握do…while循环语句的使用;  掌握多重循环结构程序流程;  了解跳转语句的使用;  了解程序异常处理机制。 实 验 内 容 实验31求n! 实验要求: 输入整数n(n≥0),分别利用for循环、while循环、do…while循环求n!。运行效果如图31所示。 图31实验31运行效果 操作提示: (1) n!=n×(n-1)×(n-2)×…×2×1。例如,5!=5×4×3×2×1=120。特别地,0!=1。 (2) 一般地,累乘的初值为1,而累加的初值为0。 (3) 如果输入的是负整数,则继续提示输入非负整数,直至n≥0。 (4) 程序代码如图32所示。 实验32显示Fibonacci数列 实验要求: 显示Fibonacci数列: 1,1,2,3,5,8,…。当Fibonacci的值大于10000时停止显示。要求每行显示5项,运行效果如图33所示。 图32实验31程序代码 图33实验32运行效果 操作提示: Fibonacci数列的生成规律为: F1=1n=1F2=1n=2Fn=Fn-1+Fn-2n≥3 程序代码如图34所示。 图34实验32程序代码 实验33鸡兔同笼问题 实验要求: 已知在同一个笼子里总共有h只鸡和兔,鸡和兔的总脚数为f只,其中h和f由用户输入,求鸡和兔各有多少只?要求使用两种方法: 一是求解方程; 二是利用循环进行枚举测试。运行效果如图35所示。 图35实验33运行效果 操作提示: (1) 已知鸡和兔的总数为h,它们的总脚数为f。假设鸡有c只,兔有r只。 (2) 方法一: 求解方程法。由公式: c+r=h2c+4r=f 解得: r=f2-h c=h-r 由公式推得,鸡和兔的总脚数f必须是偶数,并且鸡和兔的只数必须是非负整数。 (3) 方法二: 利用循环进行枚举测试。鸡的只数c取值范围为0~h,兔的只数为r,如果满足条件,则求得解。 (4) 程序代码如图36所示。 图36实验33程序代码