您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 习题/试题 > C#习题参考答案 《c#面向对象程序设计》 郑宇军
习题参考答案Chapter11_1对象客观世界中的事物都是对象,包括有形的物理对象,可感知的逻辑实体,以及概念化的抽象实体。它有自己的属性,能够执行特定的操作。类具有相同属性和操作的一组对象的集合;它描述的不是单个对象,而是“一类”对象的共同特征。其重要性在于它是面向对象技术中最重要的结构,它支持信息隐藏和封装,进而支持对抽象数据类型(ADT)的实现。1_2略1_3参考图如下Scene+Name+Type+Price+IntroductionLine+Name+Days+Nights+ScenesPackage+Line+Type+Grade+Number+Price+AgentTour+Package+StartTime+EndTime+Guide+State+Customers0..*10..*1Customer+Name+IdCard+Gender+Age+Enroll()+Cancel()Staff+Name+IdCard+Gender+Age+Degree+Apply()Guide+CerId+CerDueAgent+Accept()+Reject()Manager+Hire()+Fire()Member+Username+Password+CreditProvinceCityTravelAgency+Name+Manager+Representative+Address+PhoneDirector+Approve()0..*10..*1图11_4UML与面向对象UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。Chapter22_1程序的功能一般通过方法代码来实现。每个方法都是从其第一行代码开始执行,直至最后一行代码结束,期间可以通过代码来调用其他的方法,从而完成各式各样的操作。C#程序的起点是由Main方法定义的,程序总是从Main方法的第一行代码开始执行,在Main方法结束时停止运行。2_2略(注:不同版本的VisualStudio的菜单项有所区别)2_3略(注:不同版本的VisualStudio引用的程序集有所区别)2_4C#源代码会被编译为一种通用的中间语言(IL)代码,该语言类似于低级语言,但其代码与具体的硬件平台无关;之后CLR再针对特定的平台将IL程序翻译为机器指令,加载所需要的资源并管理执行。2_5//动态链接库程序usingSystem;namespacep2_5{classAdder{publicstaticintAdd(inta,intb){returna+b;}}}//控制台应用程序usingSystem;usingp2_5;namespaceP2_6{classProgram{staticvoidMain(){Console.WriteLine(请输入两个数:);inta=int.Parse(Console.ReadLine());intb=int.Parse(Console.ReadLine());Console.WriteLine({0}+{1}={2},a,b,Adder.Add(a+b));}}}Chapter33_1略3_2第一:值类型的变量直接包含自身的所有数据,每创建一个变量,就在内存中开辟一块区域;只有通过变量才能修改它所包含的数据。而引用类型的变量只存储对目标数据的引用,每创建一个变量,就增加一个指向目标数据的指针;有可能出现多个引用类型的变量指向同一份数据的情况,这时修改一个变量就会影响到其它所有的变量。第二:作为方法参数时,值类型变量传递的是数值,引用类型变量传递的是地址,因此如果方法的执行代码修改了变量,对值类型的变量不会有影响,但会改变引用类型的变量。第三:装箱是将一个值类型转换为一个对象类型(object),而拆箱则是将一个对象类型显式转换为一个值类型。3_3略3_4对整数为真,对实数不一定,因为实数受到计算机精度的影响。3-5四次执行的结果分别是:3,6,-6,-33-6当两个操作数均为布尔类型时,与运算“&”和逻辑与运算“&&”的求值效果相同,或运算“|”和逻辑或运算“||”的求值效果相同。但异或运算“^”不存在对应的条件逻辑运算。3-7不是。if-else可进行任意分支,而“?:”操作符要求第二和第三个操作数的类型必须一致。3-8classProgram{staticvoidMain(string[]args){Console.WriteLine(按任意键退出,其它键继续…);while(Console.ReadKey().KeyChar!='Q'){Console.WriteLine(请输入本金:);doublex=double.Parse(Console.ReadLine());Console.WriteLine(请输入利率:);doubley=double.Parse(Console.ReadLine());Console.WriteLine(请输入存款年数:);doublez=double.Parse(Console.ReadLine());Console.WriteLine(本息合计为:);for(inti=0;iz;i++){x=x+x*y;}Console.WriteLine(x);Console.WriteLin(按任意键退出,其它键继续…);Console.ReadLine();}}}3-9(1)classProgram{staticvoidMain(string[]args){Console.WriteLine(Pleaseinputanumber:);intn=int.Parse(Console.ReadLine());inti=1,x=1;while(i=n){x=x*i;i++;}Console.WriteLine(x);Console.ReadLine();}}(2)classProgram{staticvoidMain(){Console.WriteLine(Pleaseinputanumber:);intn=int.Parse(Console.ReadLine());inti=1,x=1;do{x=x*i;i++;}while(i=n);Console.WriteLine(x);Console.ReadLine();}}(3)classProgram{staticvoidMain(){Console.WriteLine(Pleaseinputanumber:);intn=int.Parse(Console.ReadLine());intx=1;for(inti=1;i=n;i++){x=x*i;}Console.WriteLine(x);Console.ReadLine();}}3-10略3-11classProgram{staticvoidMain(){Console.WriteLine(请输入一个字符串:);Console.WriteLine(Simp(Console.ReadLine()));}publicstaticstringSimp(strings){StringBuildersb1=newStringBuilder();for(inti=0;is.Length;i++){while(is.Length-1&&s[i]==s[i+1])i++;sb1.Append(s[i]);}returnsb1.ToString();}}3-12(1)classProgram{staticvoidMain(){intsum=0;for(inti=1;i=50;i++){sum+=2*i;}Console.WriteLine(sum);Console.ReadLine();}}(2)classProgram{staticvoidMain(){intsum=0,m=1;for(inti=1;i=10;i++){m=m*2;sum=sum+m;}Console.WriteLine(sum);Console.ReadLine();}}3-13略Chapter44_1静态字段是指某个类型的所有对象所共享的字段,程序会在首次该类型时为字段分配存储空间,所有对象都可以通过静态成员来读取或修改静态字段。常量字段是特殊的静态字段,它使用关键字const来修饰,且只能在声明时赋值,之后不允许被修改。只读字段则是特殊的实例字段,它属于单个对象所有,在声明或构造函数中赋值,而在创建对象之后不允许被修改。只读属性是指在属性中只定义get访问函数而不定义set访问函数,那么使用者只能访问该属性,而不能对属性赋值。4_2提示:在析构函数中将静态字段object_count的值减14_3使用属性更为安全(可以在访问函数中增加控制代码),访问更加灵活(可以在访问函数中执行各种计算),可扩展性也更好(修改属性访问代码时不必修改字段名和属性名,这就不会影响到其它对象和方法的使用)。4_4publicclassComplexNumber{privatedoublex,y;publicdoubleX//实数部分{get{returnx;}set{x=value;}}publicdoubleY;//虚数部分{get{returny;}set{y=value;}}publicComplexNumber(doublex,doubley){this.x=x;this.y=y;}publicstaticComplexNumberoperator+(ComplexNumberc1,ComplexNumberc2){returnnewComplexNumber(c1.x+c2.x,c1.y+c2.y);}publicstaticComplexNumberoperator-(ComplexNumberc1,ComplexNumberc2){returnnewComplexNumber(c1.x-c2.x,c1.y-c2.y);}publicstaticbooloperator==(ComplexNumberc1,ComplexNumberc2){return(c1.x==c2.x)&&(c1.y==c2.y);}publicstaticbooloperator!=(ComplexNumberc1,ComplexNumberc2){return(c1.x!=c2.x)||(c1.y!=c2.y);}publicstaticbooloperator(ComplexNumberc1,ComplexNumberc2){doublea=c1.x*c1.x+c1.y*c1.y;doubleb=c2.x*c2.x+c2.y*c2.y;returnab;}publicstaticbooloperator=(ComplexNumberc1,ComplexNumberc2){returna==b||ab;}publicstaticbooloperator(ComplexNumberc1,ComplexNumberc2){return!(c1=c2);}publicstaticbooloperator=(ComplexNumberc1,ComplexNumberc2){return!(c1c2);}}}4_5不能,因为this表示当前对象,而静态成员是通过类型本身而非对象来访问的。4_6如果字符串格式错误的几率很小,使用Parse方法具有更高的效率;否则应选用TryParse方法来提高程序的可靠性。4_7略4_8publicintGetAge(DateTimebirthday){inty=DateTime.Year,m=DateTime.Month,d=DateTime.Day;if(d
本文标题:C#习题参考答案 《c#面向对象程序设计》 郑宇军
链接地址:https://www.777doc.com/doc-4232230 .html