C程序设计语言期末考试题A有答案 .doc
期末试题C#程序设计语言(A卷)题号一二三四总分评卷教师分数说明:本试卷共四大题,试卷满分100分,考试时间120分钟。一判断题(每题1分,共10分,正确的打,错误的打×)题号12345678910答案××××( ) 1“+、-、*、/、%、+、-均属于二元运算符。( ) 2字符串类型属性引用类型。( ) 3Visual Studio控件的属性窗口中,按钮“A->Z”点击后,属性列表会先按照功能分类排列属性后在每个单元中以名称排序。 ( ) 4派生类可以继承基类的成员,以及方法的实现;派生的接口继承了父接口的成员方法,并且也继承父接口方法的实现。( ) 5当创建派生类对象时,先执行基类的构造函数,后执行派生类的构造函数。( ) 6隐式类型转换就是不需要声明目标类型就可以进行的转换?( ) 7如果基类没有默认的构造函数,那么其派生类构造函数必须通过base关键字来调用基类的构造函数。( ) 8在C#中在派生类中重新定义基类类的虚函数必须在前面加override。( ) 9C中方法的参数中输出型参数(out)的实参在传递给形参前,不需要明确赋值,但需在方法返回前对该参数明确赋值。( ) 10在类中可以重载构造函数,C会根据参数匹配原则来选择执行合适的构造函数。二单项选择题(每题2分,共40分)一、 (说明:每题有且仅有一个正确答案,请将正确答案填入下表)题号12345678910答案ABBBCDDABC题号11121314151617181920答案CDACCBAAAD1. C#程序设计语言属于什么类型的编程语言:a A高级语言 B自然语言 C机器语言 D汇编语言2. 如有int a=11;则表达式(a+*1/3)的值是:b A0 B3 C4 D123. 类的字段和方法的默认访问修饰符是:bA public B private C protected D internal4. 对于在代码中经常要用到的且不会改变的值,可以将其声明为常量。如圆周率PI始终为3.14。现在要声明一个名为PI的圆周率常量,下面哪段代码是正确的?bA.const float PI;PI = 3.14f; B.const float PI = 3.14f;C.float const PI;PI = 3.14f; D.float const PI = 3.14f;5. 请问经过表达式a=3+3>5?0:1的运算,变量a的最终值是什么?。cA6 B1 C0 Dtrue6. 下列语句是MyClass的一部分,obj是MyClass的一个对象。 private class subclass public int data;void change(ref int x) x=1;public void test()subClass s=new subClass();s.data=100;change(ref s.data);Line(s.data);则调用()后。控制台输出( d)。A. 100 B. 101 C. 0 D. 17. 用户自定义的异常类应该从哪个类中继承(d)A. entException B. .IOExceptionC. mException D. cationException8. 下面有关虚方法的描述正确的是( a)。A. 虚方法能在程序运行时,动态确定要调用的方法,因而比非虚方法更灵活,更方便B. 在定义虚方法时,基类和派生类的方法定义语句中都要带上virtual修饰符C. 重写基类的虚方法时,为消除隐藏基类成员的警告,需要带上new修饰符D. 在重写虚方法时,需要同时带上override和virtual修饰符9. 下列语句声明了一个委托:public delegate int myCallBack(int x);则用该委托产生的回调方法的原型应该是:bA.void receive (int x) B.int receive(int num)C.int receive( ) D.不确定的10. C#中TestClass为一自定义类,其中有以下属性定义public void Property使用以下语句创建了该类的对象,并使变量obj引用该对象:TestClass obj=new TestClass();那么,可通过什么方式访问类TestClass的Property属性(c)A. rty; B. TestClass. Property(); C. obj. Property; D. obj. Property();11. 已知类Base、MyClass 的定义如下class Base public void Hello()le.WriteLine("Hello in Base!");/先基后派class Derived : Base public void Hello()le.WriteLine("Hello in Derived!");则下列语句在控制台中的输出结果为_c_。Derived x = new Derived();x.Hello();A. Hello in Base! B. Hello in Derived!C. Hello in Base! D. Hello in Derived!Hello in Derived! Hello in Base!12. 下列关于接口的说法中,哪个选项是正确的?(d)A. 一个类可以有多个基类和多个基接口B. 抽象类和接口都不能被实例化C. 抽象类和接口都可以对成员方法进行实现D.派生类可以不实现抽象基类的抽象方法,但必须实现继承的接口的方法13. 下列关于构造函数的描述中,哪个选项是正确的?(a)A. 构造函数必须与类名相同 B. 构造函数不可以用private修饰C. 构造函数不能带参数 D. 构造函数可以声明返回类型14. 引用数组元素时,数组下标的数据类型可以允许哪项类型?(c)A. 整型常量 B. 整型表达式C. 整型常量或整型表达式 D. 任何类型的表达式15. 以下类MyClass 的属性count 属于_c_属性。class MyClassint i;int countget return i; A. 只读 B. 只写 C. 可读写 D. 不可读不可写 16. 要让用户选择和浏览要打开的文件,应使用什么对话框?(b)A. FileDialog B. OpenFileDialo C. SaveFileDialo D. FolderBrowserDialog17. 在Visual Studio 2005中,假设你正在单步调试某个应用程序。程序从入口开始,调用某个私有方法将产生异常。现在代码运行到如图所示位置,应该使用下面哪种方式进一步调试? aA.使用逐语句调试 B.使用逐过程调试C.跳出调试 D.停止调试18. .NET Framework 2.0中,处理异常是很有用的功能。一个try代码块可以有多个catch块于之对应。在多个catch块中,下面哪个异常应该最后捕获?aA. tion类 B. mException类C. cationException类 D. OverflowException类19. 在二维坐标系中,通常需要保存一组点的坐标。使用二维数组是一个解决方案。下面哪段代码正确初始化了2行2列的整数二维数组?aA. int, array = new int2,2; B. int array = new int22;C. int, array = new int22; D. int array = new int2,2;20. 已经定义了一个Season枚举,它有4个成员Spring,Summer,Autumn,Winter。现在需要定义一个名为currentSeason的Season枚举,并将其赋值为Spring,应使用下面哪段代码?dA. Season currentSeason = Spring; B. currentSeason = Spring;C. currentSeason = g; D. Season currentSeason = g;三简答题(每题5分,共10分)1. 类与对象有什么区别?答:类是用来描述某种具有相同属性和行为的事物,对象是类的一种具体表现。2. 什么叫多态性,在C#语言中如何实现多态?答:多态性是指一段程序能够处理多种类型对象的能力。四综合题(共40分)1. 下面这段程序要完成的功能是:从输入的字符串中找出小写字母并输出到终端。请检查下列代码,找出所有错误的代码,并写出该行完整的正确代码。(4分)1 using System;2 public class Program3 4 static void Main(string args)5 6 string inputString=ine();7 string lowerCase=;8 foreach (char ch in inputString)9 if (ch>='a'|ch<='z')10 lowerCase+=ch.ToString;11 Line("小写字母有:"+lowerCase);12 13 更正以下两句:9. if (ch>='a'&&ch<='z')10. lowerCase+=ch.ToString();2. 下述代码用于重写Message方法。请分析下述代码,并更正错误代码行。(4分)1 interface IMsg2 3 void Message();4 5 public class MyClass : IMsg6 7 public virtual void Message()8 9 Line("MyClass");10 11 12 public class MyDerivedClass : MyClass13 14 public void Message()15 16 Line("MyDerivedClass");17 18 第14行:更正为:public override void Message()3. 下面代码功能是对数组进行遍历,请分析下列代码段并在空白行补全C代码。(4分)static void Main(string argz) string myString="windows","form","dialog" foreach( (1) ) Line(str); (1):string str in myString4. 下面程序中两个方法需要实现的功能是:int数组相加,即数组中的每项相加,以及string类型的相加,即把一串字符串接到另一串字符串后面。请分析下列代码段,并在空白行补全visual C#代码。(6分) (1) int result=new inth ; for (int i=0;i<h ;i+) resulti =array1i +array2i; return result; (2) string spaceStr = " ", result = null; result = str1 + spaceStr + str2; return result;static void Main(string arges) int a = 1, 2, 3, , b = 4, 5, 6 ; int sumArray = new int3; string str1 = "visual", str2 = "studio" string sumString = null; sumArray = Add(a, b); sumString = Add(str1, str2);1, static int Add(int array1, int array2)2. static string Add(string str1, string str2)5. 下列程序段的作用是对字符串数组myArray进行排序后输出“Ruby Mark Norman Kinger”,请补全代码完成该功能。(6分)static void Main(string args)string myArray = new string "Kinger", "Norman", "Ruby", "Mark" ;Sort(myArray);foreach (string str in myArray) (str + " ");public static void Sort(string array)string str;for (int j = 0; j < h - 2; j+) for (int i = 0; i < h - j - 1; i+) str = arrayi; arrayi = arrayi + 1; arrayi + 1 = str; 6. 比尔在教他的女儿面向对象的知识。他写了一个类Bill和一个接口IPrintname。现在他希望女儿能够写一个类Jennifer,继承自Bill,重写基类函数WhoAmI(),将输出改为“Jennifer”;并且实现接口IPrintname,该接口只有一个方法Print,这个方法的实现会在控制台打印调用WhoAmI函数的结果(即:“Jennifer”)。(6分)public class Bill public virtual string WhoAmI() return "Bill" public interface IPrintname void Print();public class Jennifer : Bill, IPrintname public override string WhoAmI() return "Jennifer" public void Print() Line(WhoAmI(); 7. 下列Shape类是一个表示形状的抽象类,Area( )为求图形面积的函数,Total( )则是一个通用的用求不同形状的图形面积总和的函数。请从Shape类派生矩形类(Rectangle)、圆形类(Circle),给出具体的求面积函数。并在主函数中写出计算如图所示图形面积的语句。(共10分) namespace test class Program static void Main(string args) rectangle rec1 = new rectangle(30,5); rectangle rec2 = new rectangle(30,5); circle cir1 = new circle(6); circle cir2 = new circle(6); circle cir3 = new circle(6); shape s = new shape5; s0 = rec1; s1 = rec2; s2 = cir1; s3 = cir2; s4 = cir3; Line(total(s); static double total(shape s) double sum = 0.0; int n = s.Length; /for (int i = 0; i < n; i+) / sum += si.area(); foreach (shape sh in s) sum += sh.area(); return sum; abstract class shape public abstract double area(); class rectangle : shape double a, b; public rectangle(double x, double y) a = x; b = y; public override double area() return a * b; class circle : shape double r; public circle(double r) this.r = r; public override double area() return 3.14 * r * r;