C#程序设计语言期末考试题A有答案.docx
《C#程序设计语言期末考试题A有答案.docx》由会员分享,可在线阅读,更多相关《C#程序设计语言期末考试题A有答案.docx(15页珍藏版)》请在冰豆网上搜索。
C#程序设计语言期末考试题A有答案
期末试题——C#程序设计语言(A卷)
题号
-一-
-二二
三
四
总分
评卷教师
分数
说明:
本试卷共四大题,试卷满分100分,考试时间120分钟。
一•判断题(每题1分,共10分,正确的打V,错误的打X)
题号
1
2
3
4
5
6
7
8
9
10
答案
X
V
X
X
V
X
V
V
V
V
()4•派生类可以继承基类的成员,以及方法的实现;派生的接口继承了父接口的成
员方法,并且也继承父接口方法的实现。
()5.当创建派生类对象时,先执行基类的构造函数,后执行派生类的构造函数。
()6•隐式类型转换就是不需要声明目标类型就可以进行的转换?
()7.如果基类没有默认的构造函数,那么其派生类构造函数必须通过base关键字来调
用基类的构造函数。
()8.在C#中在派生类中重新定义基类类的虚函数必须在前面加override。
()9.C#中方法的参数中输出型参数(out)的实参在传递给形参前,不需要明确赋值,
但需在方法返回前对该参数明确赋值。
()10.在类中可以重载构造函数,C#会根据参数匹配原则来选择执行合适的构造函数。
()1+、-、*、/、%++、--均属于二兀运算符。
()2.字符串类型属性引用类型。
()3.VisualStudio控件的属性窗口中,按钮“A->Z”点击后,属性列表会先按照功
能分类排列属性后在每个单元中以名称排序。
.单项选择题(每题2分,共40分)
(说明:
每题有且仅有一个正确答案,请将正确答案填入下表)
题号
1
2
3
4
5
6
7
8
9
10
答案
A
B
B
B
C
D
D
A
B
C
题号
11
12
13
14
15
16
17
18
19
20
答案
C
D
A
C
C
B
A
A
A
D
1.C#程序设计语言属于什么类型的编程语言:
a
A.高级语言B.自然语言C.机器语言D.汇编语言
2.如有inta=11;则表达式(a++*1/3)的值是:
b
A.0B.3C.4D.12
3.类的字段和方法的默认访问修饰符是:
b
A.publicB.privateC.protectedD.internal
4.对于在代码中经常要用到的且不会改变的值,可以将其声明为常量。
如圆周率PI始终为3.14。
现在要声明一个名为PI的圆周率常量,下面哪段代码是正确的?
b
A.constfloatPI;PI=3.14f;B.constfloatPI=3.14f;
C.floatconstPI;PI=3.14f;D.floatconstPI=3.14f;
5.
D.trueobj是MyClass的一个对象。
请问经过表达式a=3+3>5?
0:
1的运算,变量a的最终值是什么?
。
cA.6B.1C.0
6.下列语句是MyClass的一部分,
privateclasssubclass
{
publicintdata;
}
x=1;}
voidchange(refintx){
publicvoidtest()
{
subClasss=newsubClass();s.data=100;change(refs.data);Console.WriteLine(s.data);
}
则调用obj.test()后。
控制台输出(d)。
A.100B.101C.0D.1
7.用户自定义的异常类应该从哪个类中继承(d)
A.System.ArgumentExceptionB.System.IO.IOException
C.System.SystemExceptionD.System.ApplicationException
8.下面有关虚方法的描述正确的是(a)。
A.虚方法能在程序运行时,动态确定要调用的方法,因而比非虚方法更灵活,更方便
B.在定义虚方法时,基类和派生类的方法定义语句中都要带上virtual修饰符
C.重写基类的虚方法时,为消除隐藏基类成员的警告,需要带上new修饰符
D.在重写虚方法时,需要同时带上override和virtual修饰符
9.下列语句声明了一个委托:
publicdelegateintmyCallBack(intx);则用该委托产生的回调
方法的原型应该是:
b
A.voidreceive(intx)B.intreceive(intnum)
C.intreceive()D.不确定的
10.C#中Testciass为一自定义类,其中有以下属性定义
publicvoidProperty{…}使用以下语句创建了该类的对象,并使变量obj引用该对象:
TestClassobj=newTestClass();那么,可通过什么方式访问类TestClass的Property属性(c)
A.TestClass.Progerty;B.TestClass.Property();
C.obj.Property;D.obj.Property();
11.已知类Base、MyClass的定义如下
classBase
publicvoidHello(){
System.Console.WriteLine("HelloinBase
!
");//先基后派
}classDerived:
Base
{
publicvoidHello()
{
System.Console.WriteLine("HelloinDerived!
");
}
}
则下列语句在控制台中的输出结果为__c
Derivedx=newDerived();
x.Hello();
A.HelloinBase!
B.HelloinDerived
C.HelloinBase!
D.HelloinDerived
HelloinDerived!
HelloinBase
12.下列关于接口的说法中,哪个选项是正确的?
(d)
A.一个类可以有多个基类和多个基接口
B.抽象类和接口都不能被实例化
C.抽象类和接口都可以对成员方法进行实现
D.派生类可以不实现抽象基类的抽象方法,但必须实现继承的接口的方法
13.下列关于构造函数的描述中,哪个选项是正确的?
(a)
A.构造函数必须与类名相同B.构造函数不可以用private修饰
C.构造函数不能带参数D.构造函数可以声明返回类型
14.引用数组元素时,数组下标的数据类型可以允许哪项类型?
(c)
A.整型常量B.整型表达式
C.整型常量或整型表达式D.任何类型的表达式
15.以下类MyClass的属性count属于__c___属性。
classMyClass
{
inti;
intcount
{
get{returni;}
}
}
A.只读B.只写C.可读写D.不可读不可写
16.要让用户选择和浏览要打开的文件,应使用什么对话框?
(b)
A.FileDialogB.OpenFileDialo
C.SaveFileDialoD.FolderBrowserDialog
17.在VisualStudio2005中,假设你正在单步调试某个应用程序。
程序从入口开始,调用某个私有方法将产生异常。
现在代码运行到如图所示位置,应该使用下面哪种方式进一步调试?
a
ProgT«i・cs
或yConsoleAppliea.ticm2.Frogram
V
Cstring[]args)
BusingSystem:
usingSystem.Ccllsctions.Generic:
1
2
3:
LusingSystem.Text;
rsvzpscwCorioleApplicAtigtlZBN{
el^ssFrogran
1.类与对象有什么区别?
答:
类是用来描述某种具有相同属性和行为的事物,对象是类的一种具体表现。
2.什么叫多态性,在C#语言中如何实现多态?
答:
多态性是指一段程序能够处理多种类型对象的能力。
四•综合题(共40分)
1.下面这段程序要完成的功能是:
从输入的字符串中找出小写字母并输出到终端。
请检查下列代码,找出所有错误的代码,并写出该行完整的正确代码。
(4分)
1.usingSystem;
2.publicclassProgram
3.{
4.staticvoidMain(string[]args)
5.{
6.stringinputString=Console.ReadLine();
7.stringlowerCase=string.Empty;
8.foreach(charchininputString)
9.if(ch>='a'||ch<='z')
10.lowerCase+=ch.ToString;
11.Console.WriteLine(”小写字母有:
"+lowerCase);
12.}
13.}
更正以下两句:
9.if(ch>='a'&&ch<='z')
10.lowerCase+=ch.ToString();
2.下述代码用于重写Message方法。
请分析下述代码,并更正错误代码行。
(4分)
1.interfaceIMsg
2.{
3.voidMessage();
4.}
5.publicclassMyClass:
IMsg
6.{
7.publicvirtualvoidMessage()
8.{
9.Console.WriteLine("MyClass");
10.}
11.}
12.publicclassMyDerivedClass:
MyClass
13.{
14.publicvoidMessage()
15.{
16.Console.WriteLine("MyDerivedClass");
17.}
18.}
第14行:
更正为:
publicoverridevoidMessage。
3.
(4分)
下面代码功能是对数组进行遍历,请分析下列代码段并在空白行补全C#代码。
staticvoidMain(string[]argz)
{
string[]myString={"windows","form","dialog"};
foreach(
(1))
{
Console.WriteLine(str);
}
}
(1):
stringstrinmyString
4.下面程序中两个方法需要实现的功能是:
int数组相加,即数组中的每项相加,
以及string类型的相加,即把一串字符串接到另一串字符串后面。
请分析下列代码段,并在空白行补全visualC#代码。
(6分)
(1
{
int[]result=newint[array1.Length];
for(inti=0;iresult[i]=array1[i]+array2[i];
returnresult;
}
(2){
stringspaceStr="",result=null;
result=str1+spaceStr+str2;
returnresult;
}
staticvoidMain(string[]arges)
{
int[]a={1,2,3,},b={4,5,6};
int[]sumArray=newint[3];
stringstr1="visual",str2="studio";
stringsumString=null;
sumArray=Add(a,b);
sumString=Add(str1,str2);
}
1,staticint[]Add(int[]arrayl,int[]array2)
2.staticstringAdd(stringstri,stringstr2)
5.下列程序段的作用是对字符串数组myArray进行排序后输出“RubyMarkNormanKinger
请补全代码完成该功能。
(6分)
staticvoidMain(string[]args)
{
string[]myArray=newstring[]{"Kinger","Norman","Ruby","Mark"};Sort(myArray);
foreach(stringstrinmyArray)
Console.Write(str+"");
}
publicstaticvoidSort(string[]array)
{
stringstr;
for(intj=0;j{
for(inti=0;i{
str=array[i];array[i]=array[i+1];
array[i+1]=str;
}
}
}
6.比尔在教他的女儿面向对象的知识。
他写了一个类Bill和一个接口IPrintname。
现在他希望
女儿能够写一个类Jennifer,继承自Bill,重写基类函数WhoAml(),将输出改为"Jennifer”;
并且实现接口IPrintname,该接口只有一个方法Print,这个方法的实现会在控制台打印调用
WhoAmI函数的结果(即:
“Jennifer")。
(6分)
publicclassBill
{
publicvirtualstringWhoAmI()
{
return"Bill";
}
}
publicinterfaceIPrintname
{
voidPrint();
}
publicclassJennifer:
Bill,IPrintname
{
publicoverridestringWhoAmI()
{
return"Jennifer";
}
publicvoidPrint()
{
Console.WriteLine(WhoAmI());
}
}
7.下列Shape类是一个表示形状的抽象类,Area()为求图形面积的函数,Total()则是一个通用
的用求不同形状的图形面积总和的函数。
请从Shape类派生矩形类(Rectangle)、圆形类
(Circle),给出具体的求面积函数。
并在主函数中写出计算如图所示图形面积的语句。
(共
10分)
namespacetest
{
classProgram
{staticvoidMain(string[]args)
{
}
staticdoubleTotal(shape[]s)
{
doublesum=0.0;
intn=s.Length;
for(inti=0;ireturnsum;
}
}
abstractclassShape
{
publicabstractdoubleArea();
}
}
namespacetest
{
classProgram
{
staticvoidMain(string[]args)
{
rectanglerec1=newrectangle(30,5);
rectanglerec2=newrectangle(30,5);
circle
cir1=
newcircle
(6);
circle
cir2=
newcircle
(6);
circle
cir3=
newcircle
(6);
shape[]s=
newshape[5];
s[0]=rec1;s[1]=rec2;
s[2]=cir1;s[3]=cir2;s[4]=cir3;
Console.WriteLine(total(s));
}
staticdoubletotal(shape[]s)
{
doublesum=0.0;
intn=s.Length;
//for(inti=0;i//sum+=s[i].area();
foreach(shapeshins)
{
sum+=sh.area();
}
returnsum;
}abstractclassshape
{
publicabstractdoublearea();
}
classrectangle:
shape
{
doublea,b;
publicrectangle(doublex,doubley){
a=x;
b=y;
}
publicoverridedoublearea()
{
returna*b;
}
}
classcircle:
shape
{
doubler;
publiccircle(doubler)
{
this.r=r;
}
publicoverridedoublearea()
{
return3.14*r*r;
}