C#习题参考答案《c#面向对象程序的设计》郑宇军Word格式.docx
- 文档编号:8109698
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:41
- 大小:49.41KB
C#习题参考答案《c#面向对象程序的设计》郑宇军Word格式.docx
《C#习题参考答案《c#面向对象程序的设计》郑宇军Word格式.docx》由会员分享,可在线阅读,更多相关《C#习题参考答案《c#面向对象程序的设计》郑宇军Word格式.docx(41页珍藏版)》请在冰点文库上搜索。
//控制台应用程序
usingp2_5;
namespaceP2_6
classProgram
staticvoidMain()
{
Console.WriteLine("
请输入两个数:
"
);
inta=int.Parse(Console.ReadLine());
intb=int.Parse(Console.ReadLine());
{0}+{1}={2}"
a,b,Adder.Add(a+b));
Chapter3
3_1略
3_2第一:
值类型的变量直接包含自身的所有数据,每创建一个变量,就在存中开辟一块区域;
只有通过变量才能修改它所包含的数据。
而引用类型的变量只存储对目标数据的引用,每创建一个变量,就增加一个指向目标数据的指针;
有可能出现多个引用类型的变量指向同一份数据的情况,这时修改一个变量就会影响到其它所有的变量。
第二:
作为方法参数时,值类型变量传递的是数值,引用类型变量传递的是地址,因此如果方法的执行代码修改了变量,对值类型的变量不会有影响,但会改变引用类型的变量。
第三:
装箱是将一个值类型转换为一个对象类型(object),而拆箱则是将一个对象类型显式转换为一个值类型。
3_3略
3_4对整数为真,对实数不一定,因为实数受到计算机精度的影响。
3-5四次执行的结果分别是:
3,6,-6,-3
3-6当两个操作数均为布尔类型时,与运算“&
”和逻辑与运算“&
&
”的求值效果相同,或运算“|”和逻辑或运算“||”的求值效果相同。
但异或运算“^”不存在对应的条件逻辑运算。
3-7不是。
if-else可进行任意分支,而“?
:
”操作符要求第二和第三个操作数的类型必须一致。
3-8
classProgram
staticvoidMain(string[]args)
按任意键退出,其它键继续…"
while(Console.ReadKey().KeyChar!
='
Q'
)
请输入本金:
doublex=double.Parse(Console.ReadLine());
请输入利率:
doubley=double.Parse(Console.ReadLine());
请输入存款年数:
doublez=double.Parse(Console.ReadLine());
本息合计为:
for(inti=0;
i<
z;
i++)
x=x+x*y;
Console.WriteLine(x);
Console.WriteLin("
Console.ReadLine();
3-9
(1)
Pleaseinputanumber:
intn=int.Parse(Console.ReadLine());
inti=1,x=1;
while(i<
=n)
x=x*i;
i++;
(2)
do
=n);
(3)
intx=1;
for(inti=1;
i<
=n;
3-10略
3-11
请输入一个字符串:
Console.WriteLine(Simp(Console.ReadLine()));
publicstaticstringSimp(strings)
StringBuildersb1=newStringBuilder();
for(inti=0;
s.Length;
while(i<
s.Length-1&
s[i]==s[i+1])
sb1.Append(s[i]);
returnsb1.ToString();
3-12
intsum=0;
=50;
sum+=2*i;
Console.WriteLine(sum);
(2)
intsum=0,m=1;
=10;
m=m*2;
sum=sum+m;
3-13略
Chapter4
4_1静态字段是指某个类型的所有对象所共享的字段,程序会在首次该类型时为字段分配存储空间,所有对象都可以通过静态成员来读取或修改静态字段。
常量字段是特殊的静态字段,它使用关键字const来修饰,且只能在声明时赋值,之后不允许被修改。
只读字段则是特殊的实例字段,它属于单个对象所有,在声明或构造函数中赋值,而在创建对象之后不允许被修改。
只读属性是指在属性中只定义get访问函数而不定义set访问函数,那么使用者只能访问该属性,而不能对属性赋值。
4_2提示:
在析构函数中将静态字段object_count的值减1
4_3使用属性更为安全(可以在访问函数中增加控制代码),访问更加灵活(可以在访问函数中执行各种计算),可扩展性也更好(修改属性访问代码时不必修改字段名和属性名,这就不会影响到其它对象和方法的使用)。
4_4
publicclassComplexNumber
privatedoublex,y
;
publicdoubleX//实数部分
get{
returnx;
set{
x=value;
publicdoubleY;
//虚数部分
returny;
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;
returna>
b;
returna==b||a>
publicstaticbooloperator<
return!
(c1>
=c2);
c2);
4_5不能,因为this表示当前对象,而静态成员是通过类型本身而非对象来访问的。
4_6如果字符串格式错误的几率很小,使用Parse方法具有更高的效率;
否则应选用TryParse方法来提高程序的可靠性。
4_7略
4_8
publicintGetAge(DateTimebirthday)
inty=DateTime.Year,m=DateTime.Month,d=DateTime.Day;
if(d<
birthday.Day)
m--;
if(m<
birthday.Month)
y--;
returny–birthday.Year;
4_9略
4_10一个省份中的城市、一个城市中的景点一般变化较少,适合用数组存储。
而旅游线路和方案要便于修改。
Chapter5
5_1派生类自动继承基类的公有成员和保护成员,但不能访问基类的私有成员;
外部对象只能访问其中的公有成员,而不能访问保护成员和私有成员。
5_2构造函数和析构函数不能重载和隐藏。
除非是默认构造函数,否则派生类的构造函数须指明要调用的基类构造函数形式。
重载或隐藏属性时要分别对get和set访问函数进行重载或隐藏
重载或隐藏索引函数时与属性类似
5_3略
5_4
(1)Animal中的抽象方法不能有执行代码
(2)派生类Bird不能只重载基类Animal中Life属性的get访问函数
(3)派生类Mammal的life字段不要new关键字来修饰,因为它不能访问基类中的私有字段。
5_5
publicabstractclassDisk
protecteddoubletotal,free;
publicfloatTotal//总容量
get{returntotal;
set{total=value;
publicfloatFree//剩余容量
get{returnfree;
publicvirtualvoidWrite(floatsize)
if(free>
=size)
free-=size;
else
剩余空间不足!
publicvirtualvoidDelete(floatsize)
if(free+size<
=total)
free+=size;
publicclassHardDisk
publicHardDisk(floatsize)
this.total=this.free=size;
publicclassFlashDisk
publicFlashDisk()
this.total=this.free=64000;
publicclassCDROM
publicoverridevoidDelete(floatsize)
光盘不可删除!
5_6
//抽象类:
图形Shape
publicabstractclassShape
publicabstractdoublePerimeter{get;
publicabstractdoubleArea{get;
//派生类:
圆形Circle
publicclassCircle:
Shape
privatedoubler;
publicdoubleR;
get{returnr;
set{r=value;
publicoverridedoublePerimeter
get{return6.28*r;
publicoverridedoubleArea
get{return3.14*r*r;
publicCircle(doubler)
this.r=r;
publicclassRectangle:
privatedoublea,b;
publicdoubleA;
get{returna;
set{a=value;
publicdoubleB;
get{returnb;
set{b=value;
get{return2*(a+b);
get{returna*b;
publicRectangle(doublea,doubleb)
this.a=a;
this.b=b;
5_7在新类型中定义原结构类型的字段成员,通过该字段来调用结构的成员功能。
5_8略
5_9略
Chapter6
6_1
(1)定义委托原型,其签名应与要封装的方法保持一致。
(2)定义委托类型的变量。
(3)使用new关键字创建委托对象,并将要封装的方法名作为参数传递给构造函数。
(4)通过委托变量来调用方法。
6_2
publicstaticvoidCompare(Students1,Students2)
CompareFunctioncompare=newCompareFunction(CompareGrade);
intx=compare(s1,s2);
if(x==0)
compare=CompareGrade;
x=compare(s1,s2);
returnx;
publicstaticvoidSortAndPrint(Student[]students)
for(inti=students.Length-1;
i>
0;
i--)
for(intj=0;
j<
i;
j++)
if(Compare(students[j],students[j+1])>
0){
Students=students[j];
students[j]=students[j+1];
students[j+1]=s;
foreach(Studentsinstudents)
Console.WriteLine(s);
6_3
publicstaticvoidWriteDelegateInfo(Delegatedg)
if(dg==null)
return;
MethodName:
{0}"
dg.Method.Name);
MethodBelongType:
dg.Method.DeclaringType);
Target:
dg.Target);
foreach(Delegatedgindg3.GetInvocationList())
Console.WriteLine(dg.Method);
Console.WriteLine(dg.Target);
6_4输出为:
2,3,4
6_5匿名方法可以把一段代码直接作为参数使用,而无需显式地定义方法的原型。
通过捕获外部变量,匿名方法还能够实现与外部程序的状态共享。
这不仅能够简化程序,提高了代码的可维护性,还大大方便了程序中的各种计算。
6_6事件是委托类型的对象,事件的触发方法是该对象的客户,而事件的处理方法是该对象提供的服务。
6_7旅行团所关联的导游和负责业务员是明确的,可以在改变状态的方法代码中访问这些导游和业务员对象。
而旅行团所关联的游客可能不断变化,采用发布/订阅方式能够方便地通知所有绑定的游客。
6_8略
Chapter7
7_1可从以下几方面考虑:
(1)合理布局:
在左上方或正上方提供车次和站名的输入控件,在中央显示查询结果。
(2)方便导航:
在查询结果中,通过单击车次和站名可直接显示相关信息。
(3)简化输入:
允许用户通过简拼或双拼等方式来输入中文站名。
(4)撤销和恢复:
允许用户回退到上次查询。
(5)等待响应:
查询时间较长时,显示等待光标,还可先显示部分查询结果。
7_2对于不常用的字体族,创建其Font对象时要先检查用户计算机上是否安装了该字体。
必要时可随程序安装字体。
7_3在窗体尺寸改变事件中,通过Form对象的Height属性来进行控制。
7_4通过文本框的KeyPress事件来进行控制:
voidtextBox1_KeyPress(objectsender,KeyPressEventArgse)
intch=e.KeyChar;
if(ch<
48||ch>
57&
ch!
=8)
e.Handled=false;
7_5略
7_6如果增加之后的数值超过控件的Maximum,第二行代码执行后会发生异常,而第一行代码会使控件中的数值等于Maximum。
7_7略
7_8提示:
可参考MSDN帮助中的Control控件文档。
7_9主要方面有:
(1)业务对象与窗体界面绑定,通常是在窗体类中定义一个业务对象类型的字段成员,通过窗体初始化事件的处理代码来将对象信息显示在窗体控件中。
(2)在保存对象信息时,通常要检查窗体控件中对应的输入信息是否完整和合法,否则应要求用户重新输入。
(3)如果要在不同的窗体间传递对象,那么可将对象变量作为目标窗体的构造函数参数,通过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c#面向对象程序的设计 C# 习题 参考答案 面向 对象 程序 设计 郑宇军