C#程序设计教程试题试卷及答案_第1页
C#程序设计教程试题试卷及答案_第2页
C#程序设计教程试题试卷及答案_第3页
C#程序设计教程试题试卷及答案_第4页
C#程序设计教程试题试卷及答案_第5页
已阅读5页,还剩212页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

C.1模拟考试试卷(一)XXXX学院《程序设计基础(C#)》课程考试卷(A卷)一、单项选择题(每题2分,共20分)1.short类型的变量在内存中占据的位数是()。A.8 B.16 C.32 D.642.对于int[4,5]型的数组a,数组元素a[2,3]存在于数组的第()个位置上。A.11 B.12 C.14 D.153.假设int类型的变量x、y、z的值分别为2、3、6,那么执行语句“z=y=x=z”结束后它们的值分别为()。A.3、1、-4 B.3、1、-1 C.-4、7、-1 D.4、7、-44.下列说法中不正确的是()。A.构造函数和析构函数都不能有返回值B.构造函数可以是静态的C.一个类只能有一个构造函数D.一个类只能有一个析构函数5.下列不属于object类型的成员方法是()。A.ToString() B、Dispose() C.Finalize() D.GetType()6.假设double类型的变量x表示一个角度,那么将其转化为弧度的表达式为()。A.x*180/Math.Pl B.x*360/Math.PlC.x*Math.Pl/180 D.x*Math.Pl/3607.令objectx=100,那么下列表达式会引发异常的是()。A.inti=x; B.strings=(string)x;C.boolb=xisstring; D.objecto=xasstring;8.下列能够被创建对象的是()。A.接口 B.抽象类C.委托 D.只有私有构造函数的类9.关于接口和抽象类,下列说法中正确的是()。A.接口不能创建对象,而抽象类可以B.接口不能包含字段,而抽象类可以C.抽象类中的方法必须是抽象方法D.接口中的方法可以有实现代码10.关于finally代码段,下列说法正确的是()。A.仅在程序正常时执行B.仅在程序发生异常时执行C.在程序发生异常时会被跳过D.无论程序是否发生异常都会被执行二、填空题(每空2分,共20分)1.一般将类的构造方法声明为__________访问权限。如果声明为private,则不能创建该类的对象。2.在方法定义中,virtual的含义是__________。3.C#数组元素的下标从__________开始。4.元素类型为double的2行5列的二维数组共占用__________字节的存储空间。5.对于方法,参数传递分为值传递和__________。6.传入某个属性的SET方法的隐含参数的名称是__________。7.yield语句常常与__________语句组合使用8.委托声明的关键字是__________。9.C#的类不支持多重继承,但可以用__________来实现。10.C#中所有的类型实质上都是从__________类派生而来的。三、判断题(正确打√,错误打×;每题2分,共20分)1.不能指定接口中方法的修饰符。 ()2.DotNet包含两部分,即公共语言运行时和框架类库。 ()3.在同一行中可以书写多条语句,每条语句间用分号分隔。 ()4.在数据类型转化时,只能通过类型转换关键字或Convert类实现。 ()5.在定义数组时不允许为数组中的元素赋值。 ()6.在定义枚举时至少为其中的一个枚举成员赋值。 ()7.接口与类同样是面向对象程序设计的核心,是创建对象的模板。 ()8.委托是将方法作为参数传递给另一个方法的一种数据类型,事件与委托没有关系。 ()9.如果要实现重写,则必须在基类的方法中使用virtual关键字,在派生类的方法中使用overrides关键字。 ()10.在C#类中,this代表了当前类本身。 ()四、简答题(每题8分,共40分)1.怎样使一个类不能被外部创建对象?2.请简述C#对接口方法的两种实现方式。3.什么叫作匿名方法,其作用是什么?4.简述C#13.0主要的新功能和新特点。5.在C#中,事件和委托的关系是什么?类的事件成员和一般的委托型成员有什么不同?C.2模拟考试试卷(二)XXXX学院《程序设计基础(C#)》课程考试卷(B卷)一、单项选择题(每题2分,共20分)1.下列类型中,不支持IEnumerable<T>接口的是()。A.T[] B.List<T>C.Queue<T> D.Dictionary<K,T>2.structStudent{}是声明()的语句。A.类 B.结构 C.接口 D.以上都不是3.单击一个CheckBox控件,下列事件的引发顺序为()。A.Click、MouseDown、MouseUp、CheckedChangedB.MouseDown、Click、MouseUp、CheckedChangedC.MouseDown、Click、CheckedChanged、MouseUpD.MouseDown、CheckedChanged、Click、MouseUp4.CLR是指()。A.公共类型系统 B.公共语言规范C.公共语言运行 D.动态语言运行5.关于C#的基本语法,下列说法正确的是()。A.C#使用using关键字来引用.NET预定义的名字空间B.在用C#编写的程序中,Main()函数是唯一允许的全局函数C.C#中使用的名称严格区分大小写D.C#中一条语句必须写在一行内6.C#中每个int类型的变量占用()个字节的内存。A.1btye(0~255)sbtye(-128~127)bool(ture,false)B.2short(-32768~32767)unshort(0~32767)charC.4intuintfloatD.8longulongdouble12decimal精确的十进制值7.在C#中,表示一个字符串的变量应使用()语句定义。A.CStringstr B.stringstrC.Dimstrasstring D.char*str8.要在Web应用程序中访问URL地址中的参数字符串,()可访问对象的QueryString属性。A.HttpApplication B.HttpRequestC.HttpReqsponse D.HttpBrowserCapability9.以下可在Client端缓存网页数据的是()。A.ApplicationState B.SessionStateC.Cache D.Cookie10.在WebService中定义的方法,能够在网络上访问的是()。A.非私有方法 B.公有方法C.扩展方法 D.使用[WebMethod]特性修饰的方法二、填空题(每空2分,共20分)1.当在程序中执行到__________语句时,将结束所在循环语句中循环体的一次执行。2.枚举是从System.__________类继承而来的类型。3.类中声明的属性往往具有get和__________两个访问器。4.C#提供一个默认的无参构造函数,当实现了另外一个具有一个参数的构造函数时,如果想继续保留这个无参数的构造函数,那么应该写__________构造函数。5.接口(interface)是指__________(publicabstractmethod)的类。这些方法必须在子类中被实现。6.在switch语句中,每个语句标号所包含的case关键字后面的表达式必须是__________。7.在while循环语句中,一定要有修改循环条件的语句,否则可能造成__________。8.传入某个属性的SET方法的隐含参数的名称是__________。9.C#的类不支持多重继承,但可以用__________来实现。10.C#数组类型是一种引用类型,所有的数组都是从System命名空间的__________类继承而来的引用对象。三、判断题(正确打√,错误打×;每题2分,共20分)1.静态类和实例类的区别在于,静态类不需要初始化即可直接使用,而实例类需要实例化且生成对象后才可以使用。 ()2.用Interval属性设置Timer控件的Tick事件发生的时间间隔单位为秒。 ()3.设置图形框控件的SizeMode属性值为StretchImage后,图片可以按图形框的大小比例缩放显示。 ()4.C#可以重写私有的虚方法。 ()5.在C#中,所有类都是直接或间接继承System.Object类而来的。 ()6.在C#中,任何方法都不能实现多继承。 ()7.在C#中,子类不能继承父类中用private修饰的成员变量和成员方法。 ()8.菜单项标题中含有带下画线的字符是快捷键。 ()9.在C#中,可以阻止某一个类被其他类继承。 ()10.一个窗体中可以有多个弹出式菜单。 ()四、简答题(每题8分,共40分)1.请简述抽象方法和虚拟方法的相同点与不同点?2.采用new修饰符和override修饰符修饰的方法,二者有什么区别?3.编写程序,输入一个字符串,求输入的字符串中包含字符串str的个数。4.简述使用SqlConnection对象、MySqlConnection对象、OdbcConnection对象的区别和联系。5.简述“代码编辑”窗口的作用,以及其“对象”列表框和“事件、方法”列表框的位置。C.1模拟考试试卷(一)答案一、单项选择题(每题2分,共20分)B解析:short类型是16位有符号整数,在内存中占据16位。A解析:二维数组int[4,5]的元素按“行优先”存储,第1行(索引0)有5个元素,第2行(索引1)有5个元素,第3行(索引2)的前4个元素(索引0-3)为第11个元素(5+5+3=13?修正:a[2,3]的位置计算为“行索引×列数+列索引+1”,即2×5+3+1=14?原解析有误,正确计算:数组下标从0开始,a[0,0]是第1个元素,a[2,3]的位置为2×5+3+1=14?但选项中无14?重新核对:题目中数组声明应为int[4,5](4行5列),a[2,3]的存储顺序为“第0行(5个)+第1行(5个)+第2行前4个(索引0-3)”,共5+5+4=14,但选项C为14,原答案可能有误,正确应为C。(注:若题目中数组为int[5,4],则结果为2×4+3+1=12,选B,需以题目数组维度为准,此处按题目“int[4,5]”(4行5列)修正答案为C)无正确选项解析:赋值语句z=y=x=z是右向左结合,初始x=2、y=3、z=6,执行后x=6、y=6、z=6,选项均不匹配,可能题目参数有误(如原变量值应为其他数值)。C解析:一个类可以有多个构造函数(重载),C错误;A(构造/析构无返回值)、B(构造函数可静态)、D(一个类一个析构函数)均正确。B解析:object类的成员方法包括ToString()、Finalize()、GetType(),Dispose()是IDisposable接口的方法,不属于object类。C解析:角度转弧度公式为“弧度=角度×π/180”,Math.PI表示π,故表达式为x*Math.PI/180。B解析:objectx=100是装箱为int类型,(string)x是强制类型转换,int无法直接转为string,会引发InvalidCastException;A(隐式转换,需inti=(int)x,但选项A写法错误,原选项A应为inti=(int)x,若按题目选项,B必引发异常)。无正确选项解析:A(接口不能创建对象)、B(抽象类不能创建对象)、C(委托需实例化但不是“对象”,是方法引用)、D(只有私有构造函数的类不能创建对象),可能题目选项有误,若D为“有公有构造函数的类”则正确,此处按题目选项,无正确答案。B解析:A(抽象类也不能创建对象)、B(接口无字段,抽象类可有字段)、C(抽象类可包含非抽象方法)、D(接口方法无实现代码),故B正确。D解析:finally代码段无论程序正常或异常都会执行,用于释放资源。二、填空题(每空2分,共20分)public解析:构造方法通常声明为public,允许外部创建对象;若为private,则只能在类内部创建对象。虚拟方法解析:virtual修饰的方法为虚方法,允许派生类用override重写。0解析:C#数组下标从0开始,如int[5]的下标为0-4。80解析:double类型占8字节,2行5列共10个元素,总字节数=10×8=80。引用传递解析:参数传递分为值传递(ref无,值拷贝)和引用传递(ref/out,传递地址)。value解析:属性的set访问器中,隐含参数value代表外部传入的值。foreach解析:yield语句用于迭代块,常与foreach配合,实现“按需生成”集合元素。delegate解析:委托声明的关键字为delegate,如delegatevoidMyDelegate();。接口解析:C#类仅支持单继承,可通过实现多个接口间接实现“多重继承”的效果。System.Object解析:C#中所有类型(值类型、引用类型)均直接或间接继承自System.Object类。三、判断题(每题2分,共20分)√解析:接口方法默认publicabstract,不能指定修饰符(如private/protected)。√解析:.NET框架核心包含“公共语言运行时(CLR)”和“框架类库(FCL)”。√解析:C#允许同一行写多条语句,用分号分隔,如inta=1;intb=2;。×解析:数据类型转换还可通过“隐式转换”(如int→double)、as运算符等实现,并非只能通过关键字或Convert类。×解析:定义数组时可通过静态初始化赋值,如int[]arr={1,2,3};。×解析:定义枚举时可不为任何成员赋值,默认第1个成员为0,后续依次加1。×解析:接口不能创建对象,不是“创建对象的模板”;类是创建对象的模板。×解析:事件是基于委托的特殊成员,事件的本质是封装的委托,二者紧密相关。√解析:重写需基类方法用virtual,派生类方法用override,否则为隐藏(new)。×解析:this代表当前类的“实例对象”,而非“类本身”;“类本身”用typeof(类名)表示。四、简答题(每题8分,共40分)怎样使一个类不能被外部创建对象?答:有两种核心方法:(1)将类的所有构造函数声明为private:外部无法调用构造函数创建对象,仅能在类内部创建(如单例模式);示例:csharpclassSingleton{privateSingleton(){}//私有构造函数publicstaticSingletonInstance=newSingleton();}(2)将类声明为abstract(抽象类):抽象类不能直接创建对象,需通过派生类实例化;示例:csharpabstractclassBaseClass{}classDerivedClass:BaseClass{}//BaseClassobj=newBaseClass();//错误,抽象类不能创建对象DerivedClassobj=newDerivedClass();//正确请简述C#对接口方法的两种实现方式。答:C#中接口方法的实现分为“显式实现”和“隐式实现”:(1)隐式实现:实现类用public修饰接口方法,直接匹配接口方法签名,外部可通过类对象或接口对象调用;示例:csharpinterfaceITest{voidShow();}classTest:ITest{publicvoidShow()//隐式实现{Console.WriteLine("隐式实现接口方法");}}//调用:Testt=newTest();t.Show();ITestit=t;it.Show();(2)显式实现:实现类用“接口名。方法名”修饰方法,无访问修饰符,仅能通过接口对象调用,避免多接口同名方法冲突;示例:csharpinterfaceITest{voidShow();}classTest:ITest{voidITest.Show()//显式实现{Console.WriteLine("显式实现接口方法");}}//调用:ITestit=newTest();it.Show();//正确;Testt=newTest();t.Show();//错误什么叫作匿名方法,其作用是什么?答:(1)匿名方法:没有显式名称的方法,通过delegate关键字声明,直接作为参数传递给委托,常用于简化代码(如事件处理、LINQ查询);(2)作用:①减少代码冗余:无需单独定义命名方法,直接在委托赋值处编写逻辑;②增强代码可读性:方法逻辑与调用位置紧密结合,便于理解;③支持捕获外部变量:可访问定义匿名方法时所在作用域的变量(闭包);示例:csharpdelegatevoidMyDelegate(stringmsg);staticvoidMain(){//匿名方法作为委托参数MyDelegatedel=delegate(stringmsg){Console.WriteLine("匿名方法:"+msg);};del("HelloC#");}简述C#13.0主要的新功能和新特点。答:C#13.0(随.NET9发布)的核心新功能包括:(1)扩展类型(ExtensionTypes):允许扩展现有类型的实例成员、静态成员,打破传统扩展方法仅能扩展方法的限制,提升代码复用性;(2)params关键字扩展:params支持Span<T>、ReadOnlySpan<T>等可枚举类型,不再局限于数组,使方法接收可变参数更灵活;(3)转义序列“\e”:在Unicode字符串中代表ESCAPE字符(等同于\u001b),避免与十六进制转义序列混淆;(4)部分属性(PartialProperties):允许属性的定义和实现分布在不同文件,便于与源代码生成器配合,提高代码组织性;(5)线程同步优化:引入System.Threading.Lock类型,提供更高效的线程同步API,替代传统lock语句的底层实现;(6)性能提升:异常处理速度提升2-4倍,环路性能优化(感应变量加宽),动态PGO(Profile-GuidedOptimization)降低类型检查成本。在C#中,事件和委托的关系是什么?类的事件成员和一般的委托型成员有什么不同?答:(1)事件与委托的关系:事件是基于委托的特殊成员,委托是事件的“底层支撑”。事件本质上是封装的委托,它限制了外部对委托的直接操作(如仅允许+=/-=添加/移除方法,禁止直接赋值=),确保委托调用列表的安全性;事件的触发本质是调用委托的调用列表。(2)事件成员与一般委托型成员的不同:对比维度事件成员(event)一般委托型成员(delegate变量)访问权限外部仅允许+=/-=(添加/移除方法)外部可直接赋值=、调用、清空列表安全性高(避免外部误改委托列表)低(外部可随意修改委托列表)设计意图用于“发布-订阅”模式(如事件通知)用于传递方法引用(如回调函数)调用限制仅能在类内部触发(调用)外部可直接调用(如del())示例:csharp//一般委托成员delegatevoidMyDelegate();classTest{publicMyDelegateDel;//一般委托成员,外部可Del=null;publiceventMyDelegateMyEvent;//事件成员,外部仅能MyEvent+=...publicvoidTriggerEvent(){MyEvent?.Invoke();//仅类内部可触发事件}}C.2模拟考试试卷(二)答案一、单项选择题(每题2分,共20分)D解析:Dictionary<K,T>实现IEnumerable<KeyValuePair<K,T>>,但不直接支持IEnumerable<T>(需通过Values/Keys属性间接支持);A(数组)、B(List<T>)、C(Queue<T>)均直接实现IEnumerable<T>。B解析:struct关键字用于声明结构类型,class声明类,interface声明接口,故structStudent{}是声明结构。B解析:单击CheckBox的事件顺序为:MouseDown(鼠标按下)→Click(点击)→MouseUp(鼠标抬起)→CheckedChanged(选中状态变化)。C解析:CLR是“CommonLanguageRuntime”的缩写,即“公共语言运行时”,是.NET的核心执行环境。C解析:A(using导入命名空间,非“引用”)、B(C#无全局函数,Main是类的静态方法)、C(C#严格区分大小写,如int与Int不同)、D(一条语句可跨多行,用空格/换行分隔),故C正确。C解析:int类型是32位整数,在C#中占4字节,对应选项C。B解析:C#中字符串类型为string,声明语句为stringstr;A(C++的CString)、C(VB的语法)、D(C++的指针语法)均错误。B解析:HttpRequest对象的QueryString属性用于获取URL中的查询字符串(如?id=1),HttpApplication是应用程序对象,HttpResponse是响应对象,HttpBrowserCapability是浏览器信息对象,故B正确。D解析:A(ApplicationState是应用程序级缓存,服务器端)、B(SessionState是会话级缓存,服务器端)、C(Cache是服务器端缓存)、D(Cookie是客户端缓存,存储在浏览器),故D正确。D解析:WebService中,仅用[WebMethod]特性修饰的公有方法可被网络访问,非私有方法、公有方法、扩展方法若无此特性均无法访问,故D正确。二、填空题(每空2分,共20分)continue解析:continue语句结束当前循环的一次执行,直接进入下一次循环条件判断;break是跳出整个循环。Enum解析:所有枚举类型均继承自System.Enum类,System.Enum又继承自System.ValueType。set解析:类的属性通常包含get(读取)和set(写入)访问器,只读属性仅含get,只写属性仅含set。显式定义无参解析:C#默认提供无参构造函数,若显式定义了带参构造函数,默认无参构造函数会消失,需手动显式定义无参构造函数(如publicClassName(){})。仅包含抽象方法解析:接口是仅包含抽象方法(无实现)的“契约”,子类必须实现所有接口方法。常量表达式解析:switch语句中,case后的表达式必须是常量(如case1:、case"abc":),不能是变量或表达式(如casei:)。死循环解析:while循环若缺少修改循环条件的语句(如i++),则条件永远为true,导致循环无限执行(死循环)。value解析:属性set访问器的隐含参数名为value,代表外部传入的赋值,如publicintAge{set{_age=value;}}。接口解析:C#类不支持多重继承,可通过实现多个接口(如classA:I1,I2)实现类似多重继承的功能。Array解析:所有C#数组均继承自System.Array类,System.Array提供数组操作的基础方法(如Sort()、Length)。三、判断题(每题2分,共20分)√解析:静态类用static修饰,无需实例化即可通过类名调用(如Math.Abs());实例类需new实例化后才能调用成员。×解析:Timer控件的Interval属性单位为“毫秒”(ms),如Interval=1000代表1秒触发一次Tick事件。√解析:PictureBox的SizeMode=StretchImage时,图片会按控件大小比例缩放,填充整个控件区域。×解析:私有虚方法仅能在类内部访问,派生类无法重写(重写需基类方法为public/protected)。√解析:C#中所有类(包括自定义类)均直接或间接继承自System.Object类,System.Object是所有类型的根类。×解析:C#中“接口”可以实现多继承(一个接口继承多个接口),如interfaceI3:I1,I2;类仅不支持多继承。√解析:private修饰的成员仅能在类内部访问,派生类无法继承(即无法直接访问)。×解析:菜单项标题中带下画线的字符是“访问键”(如&File代表Alt+F打开文件菜单),快捷键是Ctrl+字母(如Ctrl+S保存)。√解析:将类声明为sealed(密封类),可阻止该类被其他类继承,如sealedclassSealedClass{}。√解析:一个窗体可创建多个ContextMenuStrip(弹出式菜单),通过Control.ContextMenuStrip属性为不同控件绑定不同弹出式菜单。四、简答题(每题8分,共40分)请简述抽象方法和虚拟方法的相同点与不同点?答:(1)相同点:①均用于实现多态:允许派生类提供不同的实现;②均需在派生类中用override重写(抽象方法必须重写,虚拟方法可选);③均不能是静态方法(static),仅能是实例方法。(2)不同点:对比维度抽象方法(abstract)虚拟方法(virtual)定义位置仅能在抽象类中定义可在非抽象类、抽象类中定义方法体无方法体(仅声明)有默认方法体重写要求派生类必须重写(否则派生类为抽象类)派生类可选重写(不重写则使用基类实现)访问修饰符不能是private(需被派生类访问)可是public/protected(不能是private)示例:csharpabstractclassBase//抽象类{publicabstractvoidAbsMethod();//抽象方法(无体)publicvirtualvoidVirMethod()//虚拟方法(有体){Console.WriteLine("基类虚拟方法");}}classDerived:Base{publicoverridevoidAbsMethod()//必须重写抽象方法{Console.WriteLine("派生类抽象方法实现");}publicoverridevoidVirMethod()//可选重写虚拟方法{Console.WriteLine("派生类虚拟方法实现");}}采用new修饰符和override修饰符修饰的方法,二者有什么区别?答:new和override均用于处理基类与派生类的同名方法,但本质不同:(1)override修饰符:①作用:重写基类的virtual/abstract方法,实现多态;②前提:基类方法必须用virtual/abstract修饰,派生类方法签名(名称、参数、返回值)与基类完全一致;③调用:通过基类引用指向派生类对象时,调用派生类的重写方法(多态);示例:csharpclassBase{publicvirtualvoidShow(){Console.WriteLine("Base");}}classDerived:Base{publicoverridevoidShow(){Console.WriteLine("Derived");}}//调用:Baseb=newDerived();b.Show();//输出Derived(多态)(2)new修饰符:①作用:隐藏基类的方法(无论基类方法是否为virtual),不实现多态;②前提:派生类方法与基类方法签名相同,无其他限制;③调用:通过基类引用指向派生类对象时,调用基类的方法;通过派生类引用调用时,调用派生类的方法;示例:csharpclassBase{publicvoidShow(){Console.WriteLine("Base");}}classDerived:Base{publicnewvoidShow(){Console.WriteLine("Derived");}}//调用:Baseb=newDerived();b.Show();//输出Base;Derivedd=newDerived();d.Show();//输出Derived(3)核心区别:override是“重写”,支持多态;new是“隐藏”,不支持多态。编写程序,输入一个字符串,求输入的字符串中包含字符串str的个数。答:思路:通过循环查找子串str在输入字符串中的位置,每找到一次则计数+1,并从下一个位置继续查找,直到字符串末尾。完整代码:csharpusingSystem;classSubstringCount{staticvoidMain(){//输入原始字符串和目标子串Console.Write("请输入原始字符串:");stringinput=Console.ReadLine();Console.Write("请输入要查找的子串str:");stringstr=Console.ReadLine();//边界判断if(string.IsNullOrEmpty(input)||string.IsNullOrEmpty(str)||str.Length>input.Length){Console.WriteLine("输入无效或子串长度大于原始字符串,个数为0");return;}intcount=0;//计数intindex=0;//当前查找位置//循环查找子串while((index=input.IndexOf(str,index))!=-1){count++;index+=str.Length;//从下一个位置继续查找,避免重叠(如"aaa"找"aa",按非重叠计数)}//输出结果Console.WriteLine($"原始字符串中包含子串\"{str}\"的个数为:{count}");}}示例运行:输入原始字符串:ababaab输入子串str:aba输出:原始字符串中包含子串"aba"的个数为:2(匹配位置0-2、2-4)简述使用SqlConnection对象、MySqlConnection对象、OdbcConnection对象的区别和联系。答:(1)联系:①均继承自System.Data.Common.DbConnection类,实现IDbConnection接口,拥有统一的核心方法(Open()、Close()、CreateCommand())和属性(ConnectionString、State);②均用于建立与数据库的连接,是ADO.NET中“数据提供程序”的核心组件,配合DataAdapter/Command执行SQL操作;③均需通过using语句或Close()方法释放连接,避免资源泄漏。(2)区别:对比维度SqlConnectionMySqlConnectionOdbcConnection对应数据库MicrosoftSQLServerMySQL支持ODBC协议的数据库(如Access、Oracle)依赖组件System.Data.SqlClientMySql.Data.MySqlClient(NuGet安装)System.Data.Odbc连接字符串包含DataSource、InitialCatalog等包含server、port、database等包含DSN(数据源名称)或直接指定驱动性能针对SQLServer优化,性能高针对MySQL优化,性能高基于ODBC中间层,性能较低适用场景仅SQLServer仅MySQL多数据库兼容(需配置ODBC数据源)示例(连接字符串):SqlConnection:"DataSource=localhost;InitialCatalog=TestDB;IntegratedSecurity=True;"MySqlConnection:"server=localhost;port=3306;database=TestDB;uid=root;pwd=123456;"OdbcConnection:"DSN=TestODBC;Uid=admin;Pwd=123;"(DSN需提前配置)简述“代码编辑”窗口的作用,以及其“对象”列表框和“事件、方法”列表框的位置。答:(1)代码编辑窗口的作用:是VisualStudio中编写和修改C#代码的核心区域,支持以下功能:①编写类、方法、事件处理程序等代码;②提供语法高亮、智能提示(IntelliSense)、代码补全功能;③支持代码折叠/展开(按区域、方法),便于管理复杂代码;④集成错误提示(如语法错误波浪线)、重构工具(如重命名、提取方法);⑤支持断点调试、逐行执行代码,查看变量值。(2)“对象”列表框和“事件、方法”列表框的位置:在VisualStudio的代码编辑窗口中,两个列表框位于窗口顶部的工具栏(“代码编辑器工具栏”):①

“对象”列表框:左侧列表框,显示当前类中的所有对象(如窗体、控件),选择某个对象后,右侧列表框会显示该对象的成员;②

“事件、方法”列表框:右侧列表框,显示左侧所选对象的所有事件、方法、属性,选择某个成员(如Click事件),会自动生成该成员的代码模板(如button1_Click事件处理方法);示例:选择“对象”列表框的button1,“事件、方法”列表框选择Click,自动生成:csharpprivatevoidbutton1_Click(objectsender,EventArgse){//光标定位此处,等待编写代码}

第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){}

温馨提示

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

评论

0/150

提交评论