C#程序设计教程第6版刘甫迎课后答案_第1页
C#程序设计教程第6版刘甫迎课后答案_第2页
C#程序设计教程第6版刘甫迎课后答案_第3页
C#程序设计教程第6版刘甫迎课后答案_第4页
C#程序设计教程第6版刘甫迎课后答案_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章C#概述习题:1-1选择题(1)C#源程序文件的扩展名为()。A..vb B..c C..cpp D..cs(2)下面关于解决方案的叙述中,不正确的是()。A.一个解决方案可以包含多个项目 B.一个解决方案只能包含一个项目C.在新建项目时,会默认生成一个解决方案 D.解决方案文件的扩展名为“.sln”1-2什么是C#?C#的特点是什么?1-3什么是Microsoft.NET平台?1-4C#13.0有什么新功能?1-5VisualStudio2022有什么新功能?1-6运行C#需要怎样的硬件和软件环境?1-7C#集成开发环境由哪些部分组成?每个部分的主要功能是什么?1-8在C#集成开发环境中,如果在程序设计时想进入代码窗口,应怎样操作?1-9试安装VisualStudio2022并分析C#集成化开发环境的优点。答案:1-1选择题(1)D解析:C#源程序文件的扩展名为.cs;.vb是VisualBasic源程序文件扩展名;.c是C语言源程序文件扩展名;.cpp是C++源程序文件扩展名。(2)B解析:一个解决方案可以包含多个项目,并非只能包含一个项目;在新建项目时,会默认生成一个对应的解决方案;解决方案文件的扩展名为“.sln”。1-2什么是C#?C#的特点是什么?C#的定义:C#是由美国微软公司推出的一种类型安全、现代、简单的面向对象编程语言,它衍生自C语言和C++,牢牢根植于这两种语言之上,能让C语言和C++开发人员快速熟悉。其目标是综合VisualBasic的高生产率和C++的高行动力,集成在VisualStudio.NET中,是微软“.NET计划”的重要开发语言,可用于C/S模式编程、与ASP.NET进行B/S模式编程,以及人工智能时代元宇宙的虚拟现实编程等。C#的特点避免指针:避免复杂指针操作,禁止直接内存操作,禁用运算符“::”和“→”,整型数据0和1不再是布尔值,“==”用于比较,“=”用于赋值,减少运算符错误,采用统一类型系统,摒弃C++多变的类型系统。支持跨平台:编写的应用程序可运行在不同类型客户端,如PDA、手机等非PC端设备,适应复杂网络环境下不同硬件和软件系统的需求。避免多重继承:支持封装、继承和多态等关键面向对象概念,类模式构建在NGWS运行时的VOS上层。无全局函数、变量或常量,所有内容封装在类中。类中方法默认非虚拟,需显式虚拟标志才能改写,还新增internal访问权限,可通过接口实现类似多重继承功能。快速应用开发功能:具备优秀的RAD功能,垃圾收集机制减轻开发人员内存管理负担,委托功能允许不通过内部类调用函数,能以较少代码开发强大应用,避免部分错误,缩短开发周期。语言的兼容和协作交互性:编写的程序可与任何.NET语言最大限度交换信息,不同.NET语言可交互协作,无需强行改写语言,方便不同语言开发者协作。与XML的天然融合:XML技术融入.NET和C#,C#编程成为真正网络编程,开发人员可借助C#内含类应用XML技术,相比其他语言更自由、性能更强。继承C++:集成并保留C++的类型安全检测和重载等强大功能,提供新功能取代C++预处理程序部分功能,提高语言类型安全性。版本可控:NGWS运行时为应用程序提供版本支持,C#能更好支持版本控制,确保类库升级时仍保留对已有客户应用程序的二进制兼容。1-3什么是Microsoft.NET平台?Microsoft.NET是微软为适应Internet发展需求,提供的特别适用于网络编程和网络服务(WebService)的开发平台。它代表一个集合、一个环境、一个编程的基本结构,作为平台支持下一代互联网,是一个用户环境和一组基本用户服务,可作用于客户端、服务器端或其他地方,与改编模式有良好一致性且有新创意,不仅是用户体验,也是开发人员体验的集合。.NET的核心是.NET框架(.NETFramework),其结构从上到下分为应用程序层、基础类库层和公共语言运行环境(CLR)层。应用程序层大致包括面向网络应用的ASP.NET程序和面向Windows系统的Windows应用程序,可使用VC#.NET、VC++.NET、VB.NET等工具编写;基础类库层提供分层、面向对象的函数库,各基于.NET的程序设计语言均可调用,减少语言界限;CLR层为程序代码跨平台执行提供机制,程序代码会经两次编译,还提供系统资源统一管理和统一安全机制。此外,.NET框架采用XML和SOAP两项关键技术,保证各种系统应用程序通过互联网方便沟通和共享资源。1-4C#13.0有什么新功能?语言特性方面扩展类型:打破扩展方法仅能通过静态类定义且只能扩展方法的限制,可扩展实例成员、静态成员和属性成员,提升代码复用性、可维护性和可扩展性。params关键字扩展:不再局限于数组类型,可与System.Span、System.ReadOnlySpan和实现System.Collections.Generic.IEnumerable等可识别集合类型一起使用,使方法接收可变数量参数更灵活。转义序列“\e”:在Unicode字符串中代表ESCAPE字符,等同于传统的“\u001b”或“\x1b”,避免与十六进制转义序列混淆。部分属性:允许属性的定义和实现分布在不同文件中,提高代码组织性和可维护性,适用于与源代码生成器等工具结合使用的场景。方法组自然类型改进:使调用更简单,减少不必要的转换。ref和unsafe在async()方法和迭代器中的使用:在async()方法和迭代器中,可使用ref变量和不安全代码,适用场景更广泛。线程同步方面:.NET9运行时引入System.Threading.Lock类型,通过其API(如Lock.EnterScope()方法进入独占作用域并返回Lock.Scope对象,支持Dispose()方法退出独占范围)提供更好的线程同步,C#的lock语句也使用更新的API。性能优化方面异常处理速度提升:.NET9中的异常处理速度提高2~4倍,应用能更快速处理异常。环路性能提升:通过环路提升和感应变量加宽提高环路性能,使循环运行更快、更高效。动态PGO:降低类型检查成本,提升应用运行速度和效率。RyuJIT编译器改进:内联更通用的方法,减少方法调用开销。Arm64指令集支持:Arm64代码可使用SVE/SVE2SIMD指令编写得更快,利用最新Arm64硬件提高运行速度。其他方面序列化改进:在System.Text.Json中,.NET9提供新选项用于序列化JSON,并引入JsonSerializerOptions.Web单例,简化使用Web默认值进行序列化的操作。Linq新方法:新增CountBy()和AggregateBy()方法,可按键聚合状态分配中间分组而无须通过GroupBy命令;Index(IEnumerable)方法方便用户快速提取可枚举项的隐式索引。1-5VisualStudio2022有什么新功能?高效:全面转换为64位应用程序,突破32位应用程序4GB内存限制,可处理任何大小和复杂性的项目;使用新的Razor编辑器编码,支持跨文件重构,能诊断与异步操作自动分析器可视化效果相关的问题;遇到内存不足问题时,可成为远程内存。现代:使用.NETMAUI可开发跨平台的移动版和桌面版应用;使用Blazor框架生成采用C#的响应式WebUI,可在Linux环境中生成、调试、测试.NET和C++应用程序;借助.NETHotReload(热重载)开发客户端程序,无需重新启动即可将修改后的代码应用到程序,避免调试修改过程中丢失状态。创新:融入大量人工智能因素,AI提供代码完成功能,实现智能感知、智能编码,系统可根据之前书写的代码内容、关键字等自动提示后续编码内容,开发人员按Tab键即可自动填充代码;支持共享编码会话实时协同工作;可克隆存储库、导航工作项及暂存单行进行提交工作;能自动设置可部署到Azure的CI/CD工作流。输入操作量减少但代码产量增多:IntelliCode工具了解代码上下文(变量名称、函数和正在编写的代码类型),可一次完成整行代码,帮助开发人员更准确编码。对代码的深入见解:CodeLens帮助开发人员快速获取代码关键信息,如更改内容、更改影响、方法是否进行单元测试等,提供引用、作者、测试和提交历史记录等重要信息,指导开发人员做出准确工作决策。共享多个屏幕:LiveShare的实时协作会话功能加快团队编辑和调试周期,无论使用何种语言或平台编写代码,具有访问控制功能和自定义编辑器设置的个性化会话确保代码一致性和完整性。及时制止问题出现:集成调试是核心部分,可分步执行代码,查看变量存储的值、代码执行路径、值的更改时间及后台需查看的内容。即时影响:分析正在测试的代码数量,查看针对编码效率优化的测试套件中的即时结果;了解代码更改的影响,借助高级功能在开发人员键入代码时进行测试;借助WSL集成在Windows和Linux操作系统中测试,确保应用在所有环境中均可运行。Azure部署:使部署到云更简单,提供通用应用程序类型和本地仿真器所需的所有模板,开发人员在VisualStudio2022中可预配依赖项(如AzureSQL数据库和Azure存储账户),还可使用直接连接到应用程序的远程调试器快速诊断问题。集成的版本控制:内置支持Git版本控制,可克隆、创建和打开存储库,Git工具窗口包含提交和推送代码更改、管理分支和解决合并冲突所需的一切功能,有GitHub账户的开发人员可直接在VisualStudio2022中管理存储库。AzureDevOpsServer支持:与AzureDevOpsServer(TFS)集成保持原生态风格,在Git代码版本管理、拉取请求和传统的TFVC版本管理上有大幅增强,AzureDevOpsServer为开发团队协作提供平台支持,解决作坊式开发过程中的大部分难题。1-6运行C#需要怎样的硬件和软件环境?硬件要求:需达到Windows10的硬件要求,中央处理器(CPU)建议采用2.4GHz或以上的64位(X64)处理器;内存(RAM)推荐4GB、8GB、16GB(64位)及以上;硬盘推荐500GB(64位)或以上。软件要求:操作系统为Windows10及以上;数据库推荐MySQL、SQLServer、Access、IBMDB2、Oracle等。1-7C#集成开发环境由哪些部分组成?每个部分的主要功能是什么?菜单栏:包含多个菜单标题,每个标题对应下拉式菜单。如“文件”菜单有新建、打开、保存、打印、退出等命令;“编辑”菜单有转到、查找和替换、撤销、复制、粘贴等命令;“视图”菜单用于显示与隐藏工具栏、工具箱及各种独立工具窗口;“Git”菜单涉及克隆、创建Git存储库等操作;“项目”菜单可添加类、新数据源、新项等;“生成”菜单包含生成解决方案、发布选定内容等命令;“调试”菜单有调试程序及启动和中止应用程序运行的命令;“测试”菜单用于运行和调试所有测试;“分析”菜单有代码清理、运行CodeAnalysis等命令;“工具”菜单可获取工具和功能、连接到数据库等;“扩展”菜单用于管理扩展;“窗口”菜单有屏幕窗口布局命令;“帮助”菜单为开发人员提供使用帮助、注册VisualStudio等功能。工具栏:由多个图标按钮组成,提供对常用命令的快速访问,除标准工具栏外,还有Web工具栏、控件布局工具栏、团队资源管理器等具有特定功能的工具栏,可通过“视图”菜单或右击标准工具栏显示或隐藏。工具箱:包含建立应用程序所需的各种控件及非图形化组件,按不同选项组分类,如“公共控件”“容器”“菜单和工具栏”“数据”“组件”“对话框”等,“数据”选项组放访问数据库的控件,“组件”选项组放系统提供的组件,“对话框”选项组放系统提供的对话框,“常规”选项组可保存常用控件,“AllWindowsForms”选项组放开发Windows应用程序所需控件。“解决方案资源管理器”窗口:以树状结构显示整个解决方案中的项目及每个项目的组成信息,C#源文件以.cs为扩展名,窗口显示项目依赖项(引用),还介绍了项目组成文件(如Form1.cs、Form1.Designer.cs、Form1.resx、Program.cs、Properties等),窗口上方有“刷新”“显示”“属性”等选项按钮,“显示”按钮可显示隐藏文件,“刷新”按钮刷新未保存项目文件,“属性”按钮打开“属性”窗口。“属性”窗口:用于显示和设置所选控件或窗体等对象的属性,主要由“对象”列表框(标识当前所选对象名称和所属类)、选项按钮(“按分类顺序”和“按字母顺序”排列属性)、“属性”列表框(左侧列属性名称,右侧列属性值,可设置或修改)、事件列表框(提供所选控件的事件列表)组成。“代码编辑”窗口:用于编写和修改各类代码(如事件过程、模块和类等),左上方为“项目”列表框,中间为“对象”列表框,右上方为“事件、方法”列表框,编写事件过程时,选择对象和对应事件过程名称可构成事件过程模板,代码窗口还可折叠或展开代码块,使程序结构清晰,方便管理。窗体设计器:用于设计应用程序的用户界面(UI),是设计程序界面的区域,C#应用程序设计以窗体为依托,最常用的是Windows窗体设计器,可拖动各种控件创建Windows应用程序界面,还有创建Web界面的Web窗体设计器。其他窗口“类视图”窗口:按树状结构列出解决方案中的各个类及其中包含的事件、方法和函数等,双击视图中的元素可打开对应元素的代码窗口,方便浏览代码。“对象浏览器”窗口:方便查找程序中使用的所有对象信息(包括系统对象和用户自定义对象),左侧窗口以树状分层结构显示系统中用到的所有类,双击类,右侧窗口显示类的属性、方法、事件等。“服务器资源管理器”窗口:C#是面向网络的开发工具,利用该窗口可方便监控和管理网络上的其他服务器。“输出”窗口:输出程序运行时产生的信息,包括应用程序中设定的输出信息和编程环境提示的信息。命令窗口:为用户提供使用命令与系统交互的环境,可直接输入命令(如“toolbox”调出工具箱)。1-8在C#集成开发环境中,如果在程序设计时想进入代码窗口,应怎样操作?方法一:在“视图”菜单中选择“代码”命令。方法二:双击窗体或窗体中的某个控件。方法三:在集成开发环境中,单击对应文件的标签(如“Form1.cs”或“Program.cs”)。1-9试安装VisualStudio2022并分析C#集成化开发环境的优点。VisualStudio2022安装步骤下载完成后,双击“visualstudio2022.exe”并单击“继续”按钮。解压缩安装包,双击打开要安装的应用程序,弹出安装界面,开始进行VisualStudio2022的安装。勾选同意条款,随后单击“继续”按钮继续安装。在“工作负荷”选项卡中勾选“.NET桌面开发”选项,可根据需求选择其他插件。切换至“单个组件”选项卡,勾选或取消勾选想要或不想要安装的组件。“语言包”选项卡中默认选择“中文(简体)”,可根据需要选择其他语言,此处不做修改,单击“安装”按钮,开始安装。在“安装位置”选项卡中选择要安装的位置(可将C盘改为D盘),完成后单击“安装”按钮。安装成功后,程序会自动创建VisualStudio2022的所有程序组。在“已安装”选项卡中单击“启动”按钮,启动程序组。启动VisualStudio2022后,第一次运行会自动配置运行环境等,之后进入起始页(打开或创建项目页面),至此安装完成。C#集成化开发环境的优点功能全面集成:集设计、开发、编辑、测试、调试等功能于一体,开发人员无需在多个工具之间切换,可在同一环境中完成应用程序开发的全流程,提高开发效率。便捷的代码编辑:代码编辑窗口提供智能提示、语法高亮、代码折叠等功能,帮助开发人员快速编写代码,减少语法错误,同时支持多种代码重构操作,提升代码质量和可维护性。可视化设计支持:窗体设计器支持可视化拖拽控件创建用户界面,所见即所得,降低界面设计难度,尤其适合开发Windows应用程序和Web应用程序界面。强大的调试功能:集成调试工具可分步执行代码、查看变量值、设置断点、监控表达式等,帮助开发人员快速定位和解决程序中的逻辑错误,提高调试效率。丰富的工具支持:提供工具箱、解决方案资源管理器、属性窗口等多种工具窗口,方便开发人员管理项目文件、设置控件属性、组织代码结构,使开发过程更有条理。良好的兼容性和扩展性:支持多种.NET框架版本和C#版本,可开发跨平台应用程序,同时支持通过扩展插件增强功能,满足不同开发需求。团队协作支持:内置Git版本控制工具,支持团队成员协同开发,方便代码共享、版本管理和解决代码冲突,提升团队协作效率。

第2章简单的C#程序设计习题:2-1选择题(1)下面关于Read()方法和ReadLine()方法的描述中,正确的是()。A.Read()方法一次只能从控制台中读取一个字符B.Read()方法读取的字符不包含回车键和换行符C.ReadLine()方法读取的字符不包含回车键和换行符D.只有当用户按下Enter键时,Read()方法和ReadLine()方法才会返回(2)下面关于Write()方法和WriteLine()方法的描述中,正确的是()。A.WriteLine()方法会在输出字符串的后面添加换行符B.在使用Write()方法输出字符串时,光标将会位于字符串的末尾C.在使用Write()方法和WriteLine()方法输出数值变量时,必须先将数值变量转换为字符串D.在使用不带参数的WriteLine()方法时,将不会产生任何输出(3)假设存在下面的代码:doublex=66666.66;Console.WriteLine("{0,10:C4}",x);请从下列选项中选择正确的运行结果()。A.¥66,666.6600 B.Y66.666.66 C.66,666.6600 D.66,666.662-2C#程序是从哪条语句开始执行的?2-3在C#程序中,usingSystem是必需的吗?2-4如何为C#程序添加注释?答案:2-1选择题(1)ACD解析:Read()方法一次只能从控制台读取一个字符,A正确;Read()方法读取的字符不包含回车键和换行符,B错误;ReadLine()方法读取的字符不包含回车键和换行符,C正确;只有当用户按下Enter键时,Read()方法和ReadLine()方法才会返回,D正确。(2)AB解析:WriteLine()方法会在输出字符串后添加换行符,A正确;使用Write()方法输出字符串时,光标位于字符串末尾,B正确;使用Write()方法和WriteLine()方法输出数值变量时,无需先将数值变量转换为字符串,C错误;使用不带参数的WriteLine()方法时,会输出一个空行,D错误。(3)A解析:格式字符C或c将数据转换为货币格式,中文操作系统中货币符号为¥,4表示小数位数为4位,所以运行结果为¥66,666.6600,A正确。2-2C#程序是从哪条语句开始执行的?C#程序从类中的Main()方法开始执行。Main()方法是程序的入口点,C#规定,名字为Main()的静态方法是程序的入口,当程序执行时,会直接调用该方法,方法内的可执行语句就是程序要执行的功能。一个C#程序不允许出现两个或两个以上的Main()方法,且Main()方法必须包含在一个类中。2-3在C#程序中,usingSystem是必需的吗?usingSystem不是绝对必需的。usingSystem语句的作用是导入System命名空间,使得在程序中可以直接使用System命名空间中的类或对象,而无需使用“System.类名”的完整写法。如果不使用usingSystem语句,在需要使用System命名空间中的类(如Console类)时,必须写出完整的命名空间路径,例如System.Console.WriteLine("HelloWorld")。但在实际编程中,由于System命名空间包含了大量常用的基础类(如Console、String、Int32等),使用usingSystem可以简化代码编写,提高开发效率,因此在大多数C#程序中都会包含usingSystem语句。2-4如何为C#程序添加注释?C#提供了两种注释方法:单行注释:使用“//”,“//”后面的内容作为注释内容,仅对所处行生效。例如:csharp//这是一条单行注释inta=10;//这也是一条单行注释,用于说明变量a的赋值多行注释:使用“/”和“/”,被“/”和“/”包含的内容都作为注释内容,可跨多行。例如:csharp/*这是一条多行注释可以跨越多行用于对一段代码或复杂逻辑进行详细说明*/intb=20;

第3章数据类型、运算符与表达式习题:3-1选择题(1)以下标识符中,正确的是()。A._nName B.typeof C.6b D.x5#(2)以下标识符中,错误的是()。A._b39 B.x345 C.6_321 D.nAverage(3)以下类型中,不属于值类型的是()。A.整数类型 B.布尔类型 C.字符类型 D.类类型3-2求以下表达式的值,同时写出值的类型。(1)sizeof(int)*10/3.2。(2)8>6+3。(3)5-2<=3。(4)6>2&&8>9。(5)"Computer"=="Games"。(6)"hello"+"world"。(7)@"Thisis""abook"!="Thisis\"abook"。3-3假设x=true、y=true、c=false、a=6,求下列表达式的值。(1)!x||y&&y||c。(2)x&&6<=9||a>=7&&c。3-4在C#中如何定义常量?常量的定义是否一定包含初始化?为什么?3-5简述C#中常用的运算符及其功能。答案:3-1选择题(1)A解析:合法的C#标识符以字母或下画线开头,其后可跟字母、数字或下画线。_nName以下画线开头,符合规则,A正确;typeof是C#关键字,不能作为标识符,B错误;6b以数字开头,C错误;x5#包含非法字符“#”,D错误。(2)C解析:6_321以数字开头,不符合C#标识符命名规则,C错误;_b39、x345、nAverage均符合标识符命名规则,A、B、D正确。(3)D解析:整数类型、布尔类型、字符类型都属于值类型,类类型属于引用类型,D正确。3-2求以下表达式的值,同时写出值的类型(1)sizeof(int)*10/3.2值:12(sizeof(int)通常为4,410=40,40/3.2=12.5,由于sizeof(int)是整型,10是整型,3.2是双精度浮点型,运算过程中先将整型转换为双精度浮点型计算,结果为12.5,但根据运算规则,最终结果取12?此处可能存在疑问,需进一步确认:sizeof(int)返回int类型,值为4,410=40(int类型),40/3.2(double类型),运算时40转换为double类型40.0,40.0/3.2=12.5,所以值应为12.5,类型为double。类型:double(2)8>6+3计算过程:6+3=9,8>9为false。值:false类型:bool(3)5-2<=3计算过程:5-2=3,3<=3为true。值:true类型:bool(4)6>2&&8>9计算过程:6>2为true,8>9为false,true&&false为false。值:false类型:bool(5)"Computer"=="Games"比较过程:按字符顺序比较,'C'的Unicode编码小于'G',所以"Computer"<"Games",相等比较结果为false。值:false类型:bool(6)"hello"+"world"计算过程:字符串连接,"hello"与"world"连接为"helloworld"。值:"helloworld"类型:string(7)@"Thisis""abook""!="Thisis\"abook"分析:@"Thisis""abook"表示的字符串是"Thisis"abook","Thisis\"abook"表示的字符串也是"Thisis"abook",所以两者不相等的比较结果为false。值:false类型:bool3-3假设x=true、y=true、c=false、a=6,求下列表达式的值(1)!x||y&&y||c计算过程:!x为false;y&&y为true;false||true||false为true。值:true(2)x&&6<=9||a>=7&&c计算过程:x为true,6<=9为true,true&&true为true;a>=7为false,c为false,false&&false为false;true||false为true。值:true3-4在C#中如何定义常量?常量的定义是否一定包含初始化?为什么?C#中定义常量的方法:使用const关键字,语法格式为“const类型标识符常量名=表达式;”。例如:constdoublePI=3.14159265;常量的定义一定包含初始化。原因:常量是在程序运行过程中值不可改变的量,在定义时必须赋予初始值,且一旦赋予初始值,在程序运行过程中就无法再修改。如果定义常量时不初始化,编译器无法确定常量的值,会导致编译错误,因此常量的定义必须包含初始化。3-5简述C#中常用的运算符及其功能算术运算符:用于算术运算,包括+(取正或加法)、-(取负或减法)、*(乘法)、/(除法)、%(模运算,求整数除法余数)、++(自增)、--(自减)。例如,3+5=8,10%3=1,x++使x值加1。赋值运算符:用于给变量赋值,包括=(简单赋值)、+=(加赋值)、-=(减赋值)、*=(乘赋值)、/=(除赋值)、%=(模赋值)等。例如,x=5,x+=3等价于x=x+3。关系运算符:用于比较两个值的大小,结果为bool类型,包括>(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、==(等于)、!=(不等于)。例如,5>3为true,6==8为false。逻辑运算符:用于表示布尔值之间的逻辑关系,结果为bool类型,包括!(逻辑非)、&&(逻辑与)、||(逻辑或)。例如,!true为false,true&&false为false,true||false为true。位运算符:用于二进制位运算,包括~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)。例如,~12(二进制00001100)结果为11110011,6(00000110)&10(00001010)结果为00000010(2)。条件运算符:三元运算符,格式为“操作数1?操作数2:操作数3”,操作数1为bool值,若为true,结果为操作数2的值,否则为操作数3的值。例如,6>8?15:39结果为39。其他运算符:包括字符串连接符+(连接两个字符串)、is运算符(检查表达式是否为指定类型)、sizeof运算符(获取值类型在内存中占用的字节数)、new运算符(创建对象和调用构造函数)、typeof运算符(获取对象的类型)等。

第4章结构化程序设计习题:4-1选择题(1)结构化程序设计的三大结构是()。A.顺序结构、if结构、for结构B.if结构、if…else结构、elseif结构C.while结构、do…while结构、foreach结构D.顺序结构、选择结构、循环结构(2)已知a、b、c的值分别为4、5、6,执行下面的程序段后,变量n的值为()。if(c<b)n=a+b+c;elseif(a+b<c)n=c-a-b;elsen=a+b;A.3 B.–3 C.9 D.15(3)while语句和do…while语句的区别在于()。A.while语句的执行效率较高B.使用do…while语句编写的程序较复杂C.无论条件是否成立,while语句都要执行一次循环体D.do…while语句是先执行循环体,再判断条件表达式是否成立,而while语句是先判断条件表达式是否成立,再决定是否执行循环体(4)下面关于for循环的描述有误的是()。A.在使用for循环时,可以省略其中的某个或多个表达式,但不能同时省略全部3个表达式B.在省略for循环的某个表达式时,如果该表达式后面原来带有分号,则一定要保留该分号C.在for循环的表达式中,可以直接定义循环变量,以简化代码D.for循环的表达式可以全部省略(5)下面关于break、continue和goto语句描述正确的是()。A.break语句和continue语句都用于中止当前整个循环B.使用break语句可以一次跳出多重循环C.使用goto语句可以方便地跳出多重循环,因而在编程过程中应尽可能多地使用goto语句D.goto语句必须和标识符配合使用,break和continue语句则不然(6)假设给出下面的代码:try{thrownewOverflowException();}catch(FileNotFoundExceptione){}catch(OverflowExceptione){}catch(SystemExcetione){}catch{}finally{}则下面哪些语句会被执行()?A.catch(FileNotFoundExceptione){} B.catch(OverflowExceptione){}C.catch(SystemExcetione){} D.catch{}E.finally{}4-2程序阅读题(1)指出下列程序代码中的错误。do{j=i*3+1;Console.WriteLine("{0}",n);i+=3;}while(i<100)(2)指出下列程序代码中的错误。usingSystem;classTest{staticvoidmain{intk;Console.Write("请输入整数k的值:");k=int.Parse(Console.ReadLine());if(k<=10)k=k+1;elseif(10<k<=20)k-=10;elseif(k>30)k=k*2-20;Console.WriteLine("k={0}",k)}}(3)写出下列程序代码的运行结果。usingSystem;classDemo{staticvoidMain(){inti,j,k;for(i=1;i<=8;i++){for(j=1;j<i+5;j++)Console.Write("");for(k=1;k<=18-i;k++)Console.Write("*");Console.WriteLine();}}}4-3编程题(1)编写一个程序,输出1到100之间能被3整除但不能被5整除的数,并统计有多少个这样的数。(2)编写一个程序,输出1000以内的所有素数。(3)编写一个程序,求输入的4个整数的最大值和最小值。(4)编写一个程序,分别用for、while、do…while语句求前n个自然数的和。(5)编写一个程序,输出如下所示的九九乘法表。1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81答案:4-1选择题(1)D解析:结构化程序设计的三大结构是顺序结构、选择结构、循环结构,D正确。(2)C解析:a=4、b=5、c=6,c<b(6<5)为false;a+b=9,c=6,a+b<c(9<6)为false;所以执行else语句,n=a+b=9,C正确。(3)D解析:do…while语句先执行循环体,再判断条件表达式是否成立;while语句先判断条件表达式是否成立,再决定是否执行循环体,D正确;A、B说法错误,两者执行效率和程序复杂度无绝对差异;C错误,while语句只有条件成立才执行循环体。(4)A解析:for循环的3个表达式可以全部省略,A错误;省略某个表达式时,若该表达式后有分号需保留,B正确;可在for循环表达式中直接定义循环变量,C正确;for循环表达式可以全部省略,D正确。(5)D解析:break语句中止当前整个循环,continue语句只中止本次循环,A错误;break语句只能跳出当前循环,无法一次跳出多重循环,B错误;goto语句破坏程序可读性,不提倡多用,C错误;goto语句必须和标识符配合使用,break和continue语句不需要,D正确。(6)BE解析:throw抛出OverflowException异常,会被catch(OverflowExceptione)捕获,B正确;无论是否捕获到异常,finally语句都会执行,E正确;A、C、D不会执行。4-2程序阅读题(1)指出下列程序代码中的错误错误1:变量i未定义,在do…while循环中使用了i,但未声明i的类型和初始值。错误2:变量n未定义,在Console.WriteLine("{0}",n)中使用了n,但未声明n的类型和赋值。错误3:do…while语句的while后面缺少分号,正确写法应为while(i<100);(2)指出下列程序代码中的错误错误1:Main方法的正确写法是“staticvoidMain”,代码中“staticvoidmain”的“m”小写,不符合C#语法规范。错误2:在elseif(10<k<=20)中,C#不支持这种连续比较的写法,应改为elseif(k>10&&k<=20)。错误3:Console.WriteLine("k={0}",k)后面缺少分号。错误4:SetX方法是MyClass类的私有方法(private),在Test类的Main方法中无法直接调用SetX(68),应将SetX方法的访问修饰符改为public,或者通过MyClass类的对象调用。(3)写出下列程序代码的运行结果程序会输出一个由“”组成的倒三角形,具体如下(每行前面的空格数量和“”数量根据循环计算):plaintext****************************************************************************************(注:每行前面的空格数为2*(i+4),“”数量为2(18-i)-1,i从1到8)4-3编程题(1)编写一个程序,输出1到100之间能被3整除但不能被5整除的数,并统计有多少个这样的数csharpusingSystem;classProgram{staticvoidMain(){intcount=0;Console.WriteLine("1到100之间能被3整除但不能被5整除的数:");for(inti=1;i<=100;i++){if(i%3==0&&i%5!=0){Console.Write(i+"");count++;}}Console.WriteLine("\n这样的数共有:"+count+"个");}}(2)编写一个程序,输出1000以内的所有素数csharpusingSystem;classProgram{staticvoidMain(){Console.WriteLine("1000以内的所有素数:");for(inti=2;i<=1000;i++){boolisPrime=true;for(intj=2;j*j<=i;j++){if(i%j==0){isPrime=false;break;}}if(isPrime){Console.Write(i+"");}}}}(3)编写一个程序,求输入的4个整数的最大值和最小值csharpusingSystem;classProgram{staticvoidMain(){Console.WriteLine("请输入4个整数:");intnum1=int.Parse(Console.ReadLine());intnum2=int.Parse(Console.ReadLine());intnum3=int.Parse(Console.ReadLine());intnum4=int.Parse(Console.ReadLine());intmax=num1;if(num2>max)max=num2;if(num3>max)max=num3;if(num4>max)max=num4;intmin=num1;if(num2<min)min=num2;if(num3<min)min=num3;if(num4<min)min=num4;Console.WriteLine("最大值:"+max);Console.WriteLine("最小值:"+min);}}(4)编写一个程序,分别用for、while、do…while语句求前n个自然数的和csharpusingSystem;classProgram{staticvoidMain(){Console.WriteLine("请输入n的值:");intn=int.Parse(Console.ReadLine());intsum1=0,sum2=0,sum3=0;inti=1;//for语句for(i=1;i<=n;i++){sum1+=i;}Console.WriteLine("for语句求前n个自然数的和:"+sum1);//while语句i=1;while(i<=n){sum2+=i;i++;}Console.WriteLine("while语句求前n个自然数的和:"+sum2);//do…while语句i=1;do{sum3+=i;i++;}while(i<=n);Console.WriteLine("do…while语句求前n个自然数的和:"+sum3);}}(5)编写一个程序,输出九九乘法表csharpusingSystem;classProgram{staticvoidMain(){for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){Console.Write(i+"*"+j+"="+(i*j)+"");}Console.WriteLine();}}}

第5章数组、结构和枚举习题:5-1选择题(1)下面是几条定义并初始化一维数组的语句,其中正确的是()。A.intarr1[]={6,5,1,2,3}; B.int[]arr1=newint[];C.int[]arr1=newint[]{6,5,1,2,3}; D.int[]arr1;arr1={6,5,1,2,3};(2)下面是几条动态初始化一维数组的语句,其中正确的是()。A.int[]arr2=newint[]; B.int[]arr2=newint[4];C.int[]arr2=newint[i]{6,5,1,2,3}; D.int[]arr2=newint[4]{6,5,1,2,3};(3)下面是几条定义并初始化二维数组的语句,其中正确的是()。A.intarr3[][]=newint[4,5]; B.int[][]arr3=newint[4,5];C.intarr3[,]=newint[4,5]; D.int[,]arr3=newint[4,5];(4)下面关于枚举成员赋值的说法正确的是()。A.在定义枚举类型时,至少要为其中的一个枚举成员赋常量值B.在定义枚举类型时,直接为某个枚举成员赋常量值,其他枚举成员可依次取值C.在将一个枚举成员的值赋给另一个枚举成员时,可以不考虑它们在代码中出现的顺序D.在定义的一个枚举类型中,任何两个枚举成员都不能具有相同的常量值5-2程序阅读题(1)写出下面程序的运行结果。usingSystem;classARRAY{publicstaticvoidMain(){intoddsum=0;intevensum=0;int[]arr={0,1,2,5,7,8,12,13};foreach(intkinarr){if(k%2==0)evensum+=k;elseoddsum+=k;}Console.WriteLine("evensum={0}",evensum);Console.WriteLine("oddsum={0}",oddsum);}}(2)分析下面程序的功能,并写出运行结果。usingSystem;publicclassarray1{publicstaticvoidMain(){int[]a={34,91,83,56,29,93,56,12,88,72};inti,t=0,temp=100;for(i=0;i<a.Length;i++){if(a[i]<=temp){temp=a[i];t=i;}}Console.WriteLine("该数组中最小的数为:{0}",temp);Console.WriteLine("最小的数的数组下标为:{0}",t); }}(3)写出下面程序的运行结果。usingSystem;classTest{staticvoidMain(){int[,]a=newint[6,6];a[0,0]=1;for(inti=1;i<=5;i++){a[i,0]=1;a[i,i]=1;for(intj=1;j<i;j++){a[i,j]=a[i-1,j-1]+a[i-1,j];}}for(inti=0;i<=5;i++){for(intj=0;j<=i;j++){Console.Write("{0}",a[i,j]);}Console.WriteLine();}}}(4)写出下面程序的运行结果。usingSystem;classEnumTest{enumseason{spring,summer=4,autumn,winter=5};staticvoidMain(){Console.WriteLine("spring={0}",season.spring);Console.WriteLine("spring={0}",(int)season.spring);Console.WriteLine("summer={0}",(int)season.summer);Console.WriteLine("autumn={0}",(int)season.autumn);Console.WriteLine("winter={0}",(int)season.winter);}}5-3编程题(1)定义一个行数和列数相等的二维数组并进行初始化,之后计算该数组两条对角线上的元素值之和。(2)建立一个一维数组,使用该数组列出所学习的课程名称。(3)编写一个包含学生基本资料的结构类型数据(要求包括姓名、性别、年龄、身高、体重等)。(4)编写程序,对一年中的12个月建立一个枚举类型数据并进行调用。答案:5-1选择题(1)C解析:A选项中数组定义格式错误,应改为int[]arr1={6,5,1,2,3};;B选项动态初始化未指定数组长度,错误;C选项动态初始化一维数组,格式正确;D选项静态初始化不能与数组定义分开,错误。(2)B解析:A选项动态初始化未指定数组长度,错误;B选项动态初始化指定数组长度为4,格式正确;C选项动态初始化中数组长度不能为变量i,需为常量,错误;D选项动态初始化指定数组长度为4,却初始化了5个元素,错误。(3)D解析:二维数组定义格式为int[,]arr3=newint[4,5];,D正确;A、B、C选项中数组定义格式错误,多维数组方括号内用逗号分隔,不是中括号嵌套或其他形式。(4)B解析:A选项定义枚举类型时,可不为任何枚举成员赋常量值,默认第1个为0,后续依次加1,错误;B选项在定义枚举类型时,直接为某个枚举成员赋常量值,其他枚举成员可依次取值,正确;C选项将一个枚举成员的值赋给另一个枚举成员时,需考虑它们在代码中出现的顺序,错误;D选项在一个枚举类型中,多个枚举成员可具有相同的常量值,错误。5-2程序阅读题(1)写出下面程序的运行结果程序统计数组中偶数和与奇数和,数组arr={0,1,2,5,7,8,12,13},偶数有0、2、8、12,和为0+2+8+12=22;奇数有1、5、7、13,和为1+5+7+13=26。运行结果:evensum=22oddsum=26(2)分析下面程序的功能,并写出运行结果程序功能:找出数组a={34,91,83,56,29,93,56,12,88,72}中的最小值及其对应的数组下标。运行结果:该数组中最小的数为:12最小的数的数组下标为:7(3)写出下面程序的运行结果程序生成一个6行6列的二维数组,模拟杨辉三角,运行结果如下:11112113311464115101051(4)写出下面程序的运行结果枚举类型season中,spring默认值为0,summer=4,autumn=5,winter=5,运行结果如下:spring=springspring=0summer=4autumn=5winter=55-3编程题(1)定义一个行数和列数相等的二维数组并进行初始化,之后计算该数组两条对角线上的元素值之和csharpusingSystem;classProgram{staticvoidMain(){//定义一个3行3列的二维数组并初始化int[,]arr={{1,2,3},{4,5,6},{7,8,9}};intsum1=0,sum2=0;intn=arr.GetLength(0);//获取数组行数(行数和列数相等)//计算主对角线(从左上到右下)元素和for(inti=0;i<n;i++){sum1+=arr[i,i];}//计算副对角线(从右上到左下)元素和for(inti=0;i<n;i++){sum2+=arr[i,n-1-i];}Console.WriteLine("主对角线元素和:"+sum1);Console.WriteLine("副对角线元素和:"+sum2);Console.WriteLine("两条对角线元素总和:"+(sum1+sum2));}}(2)建立一个一维数组,使用该数组列出所学习的课程名称csharpusingSystem;classProgram{staticvoidMain(){//建立一维数组存储课程名称string[]courses={"C#程序设计","数据结构","计算机网络","操作系统","数据库原理"};Console.WriteLine("所学习的课程名称:");for(inti=0;i<courses.Length;i++){Console.WriteLine((i+1)+"."+courses[i]);}}}(3)编写一个包含学生基本资料的结构类型数据(要求包括姓名、性别、年龄、身高、体重等)csharpusingSystem;//定义学生结构类型structStudent{publicstringname;//姓名publicstringgender;//性别publicintage;//年龄publicdoubleheight;//身高(单位:米)publicdoubleweight;//体重(单位:千克)//定义方法显示学生信息publicvoidShowInfo(){Console.WriteLine("学生基本资料:");Console.WriteLine("姓名:"+name);Console.WriteLine("性别:"+gender);Console.WriteLine("年龄:"+age);Console.WriteLine("身高:"+height+"米");Console.WriteLine("体重:"+weight+"千克");}}classProgram{staticvoidMain(){//创建学生结构变量并赋值Studentstu;="张三";stu.gender="男";stu.age=20;stu.height=1.75;stu.weight=65;//显示学生信息stu.ShowInfo();}}(4)编写程序,对一年中的12个月建立一个枚举类型数据并进行调用csharpusingSystem;//定义表示12个月的枚举类型enumMonth{January,//1月February,//2月March,//3月April,//4月May,//5月June,//6月July,//7月August,//8月September,//9月October,//10月November,//11月December//12月}classProgram{staticvoidMain(){//调用枚举类型Console.WriteLine("一年中的12个月:");foreach(MonthminEnum.GetValues(typeof(Month))){Console.WriteLine(m+"("+(int)m+1+"月)");}//示例:输出指定月份MonthcurrentMonth=Month.October;Console.WriteLine("\n当前月份:"+currentMonth+"("+(int)currentMonth+1+"月)");}}

第6章面向对象程序设计习题:6-1选择题(1)下面关于静态方法的描述中,错误的是()。A.静态方法属于类,不属于实例B.静态方法可以直接用类名调用C.在静态方法中,可以定义非静态的局部变量D.在静态方法中,可以访问实例方法(2)在类的外部可以被访问的成员是()。A.public成员 B.private成员C.protected成员 D.protecedinternal成员(3)下面关于运算符重载的描述中,错误的是()。A.重载的运算符仍然保持原来的操作数个数、优先级和结合性B.可以重载双目运算符,但不可以重载单目运算符C.运算符重载函数必须是public的D.运算符重载函数必须是static的(4)下面关于类和对象的说法中,不正确的是()。A.类包含了数据和对数据的操作 B.对象一定属于某个类C.密封类不能被继承 D.可由抽象类生成对象(5)下面关于委托的说法,不正确的描述是()。A.委托属于引用类型 B.委托用于封装方法的引用C.委托可以封装多个方法 D.委托不必实例化即可被调用(6)下面关于析构函数的说法中,不正确的是()。A.析构函数中不可以包含return语句 B.一个类中只能有一个析构函数C.用户可以定义有参析构函数 D.析构函数在对象被撤销时将被自动调用6-2程序阅读题(1)指出下列程序代码中的错误。classTest{staticvoidMain(){M();}}intM(){Console.WriteLine("Welcome")}(2)指出下列程序中的错误。usingSystem;classMyClass{privateintx;publicMyClass(intx){x=x;}privatevoidSetX(inta){x=a;}}classTest{staticvoidMain(){MyClassm=newMyClass(18);SetX(68);}}(3)写出下列程序的运行结果。usingSystem;classDemo{staticvoidFunc(inta,outintx,outinty){x=a/10;y=a%10;}staticvoidMain(){intk=16;inta,b;Func(k,outa,outb);Console.WriteLine("{0},{1}",a,b);}}6-3设计一个成绩类,要求该类能够记录学生的姓名、班级、科目和成绩,并能够修改和输出成绩。6-4定义一个类并完成对该类构造函数和析构函数的创建,体会这两个函数对类的影响。6-5编写一个包含5个重载的Method()方法的例子,要求其中一个是无参方法,另外4个方法所带参数分别为值类型、引用型、输出型和数组型,并且这些方法用于执行不同的输出功能。6-6编写一个类,其中包含两个属性,且一个是只读的,并在类实例中对它们进行调用。6-7事件与委托的关系是什么?如何预订或撤销事件?请举例说明。6-8由程序随机产生10个数,并把这10个数按从小到大的顺序输出。6-9什么是对象初始化器?答案:6-1选择题(1)D解析:静态方法属于类,不属于实例,A正确;静态方法可直接用类名调用,B正确;在静态方法中可定义非静态局部变量,C正确;在静态方法中不能访问实例方法,D错误。(2)A解析:public成员在类的外部可被访问,A正确;private成员只能在类内部访问,B错误;protected成员只能在类内部和派生类中访问,C错误;protectedinternal成员只能在当前程序集和派生类中访问,D错误。(3)B解析:重载的运算符保持原来的操作数个数、优先级和结合性,A正确;可重载单目运算符和双目运算符,B错误;运算符重载函数必须是public和static的,C、D正确。(4)D解析:类包含数据和对数据的操作,A正确;对象一定属于某个类,B正确;密封类不能被继承,C正确;抽象类不能生成对象,D错误。(5)D解析:委托属于引用类型,A正确;委托用于封装方法的引用,B正确;委托可以封装多个方法,C正确;委托必须实例化才能被调用,D错误。(6)C解析:析构函数中不包含return语句,A正确;一个类中只能有一个析构函数,B正确;用户不能定义有参析构函数,析构函数无参数,C错误;析构函数在对象被撤销时自动调用,D正确。6-2程序阅读题(1)指出下列程序代码中的错误错误1:方法M()的定义在Test类外部,C#中方法必须定义在类或结构内部,应将M()方法定义在Test类中。错误2:方法M()的返回类型为int,但方法体内没有return语句返回int类型的值。错误3:Console.WriteLine("Welcome")后面缺少分号。(2)指出下列程序中的错误错误1:在MyClass类的构造函数MyClass(intx)中,“x=x;”是将参数x赋值给自身,没有给类的成员变量x赋值,应改为“this.x=x;”。错误2:SetX方法是MyClass类的私有方法(private),在Test类的Main方法中无法直接调用SetX(68),应将SetX方法的访问修饰符改为public,或者通过MyClass类的对象调用。(3)写出下列程序的运行结果程序中Func方法通过out参数返回a=16/10=1,b=16%10=6,运行结果:1,66-3设计一个成绩类,要求该类能够记录学生的姓名、班级、科目和成绩,并能够修改和输出成绩csharpusingSystem;classScore{//成员变量privatestringname;//姓名privatestringclassName;//班级privatestringsubject;//科目privatedoublescore;//成绩//构造函数publicScore(stringname,stringclassName,stringsubject,doublescore){=name;this.className=className;this.subject=subject;this.score=score;}//修改成绩的方法publicvoidModifyScore(doublenewScore){if(newScore>=0&&newScore<=100){score=newScore;Console.WriteLine("成绩修改成功!");}else{Console.WriteLine("输入成绩无效,成绩应在0-100之间!");}}//输出成绩的方法publicvo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论