C#练习题及答案

C#练习题

《C#程序设计》王晨阳

94、在C#中,(C )访问修饰符修饰的类成员只能由当前程序集访问。

a) public

b) protected

c) internal

d) private

95、在https://www.360docs.net/doc/d25138964.html,中,SqlConnection 类所在的命名空间是(D )。

a) System

b) System.Data

c) System.Data.OleDb

d) System.Data.SqlClient

96、在C#程序中,下列用来处理异常的结构,错误的是(A )。

a)catch{}finally{}

b)try{}finally{}

c)try{}catch{}finally{}

d)try{}catch{}

97、在https://www.360docs.net/doc/d25138964.html,中,执行数据库的某个存储过程,则至少需要创建(D )并设置它们的属性,调用合适的方法.

a) 一个Command对象和一个DataAdapter对象

b) 一个Command对象和一个DataSet对象

c) 一个Connection对象和一个DataSet对象

d) 一个Connetction对象和一个Command对象

98、在C#中,如果要将数组作为一个方法的参数,则传递的是(C )。

a) 数组中的所有元素

b) 数组的第一个元素

c) 对象的引用

d) 以上皆非

99、下列关于C#中索引器理解正确的是(C )。

a) 索引器的参数必须是两个或两个以上

b) 索引器的参数类型必须是整数型

c) 索引器不能声明为static

d) 以上皆非

100、在C#中,装箱、拆箱操作发生在(C )。

a) 类与对象之间

b) 对象与对象之间

c) 引用类型与值类型之间

d) 引用类型与引用类型之间

二、填空题

1、面向对象的语言具有___封装性、_____继承_____性、____多态______性。

2、C#中,所有类型(包括所有的值类型和所有的引用类型)的基类是___object类_______。

3、当整数b赋值给一个object对象时,这个过程称为____装箱______。

4、在C#中,关键字____base______用于从派生类中访问基类的成员。

5、在C#中,通过_____interface_____关键字定义一个接口。

6、在C#程序中,程序的执行总是从____Main______方法开始的。

7、在C#中,表达式Math.Pow(2,-2)的值是___0.25__。

8、在C#中,在实例化类对象时,系统自动调用该类的__构造函数____进行初始化。

9、在C#中,当一个对象离开它的作用域或不再被使用时,系统将会自动调用类的___析构

函数___。

10、在C#中,数据类型说明符用来说明方法返回值的类型,如果没有返回值,则其类型说明符应为___void___。

11、在C#中,定义方法时使用的参数是__形参___,调用方法时使用的参数是__实参____。

12、在C#中,在类的成员声明时,若使用了_protected_问修饰符,则该成员只能在该类或其派生类中使用。

13、在C#中,类的静态成员属于___类______所有,非静态成员属于类的实例所有。

14、在C#中,已知某类的类名为MyClass,则该类的析构函数名为___~MyClass_.

15、在C#中,在声明类时,在类名前加__abstract_声明类只能作为其他类的基类,不能被实例化。

16、在C#中,Exception类中____Message______属性用于获取描述当前异常的消息。

17、在C#中,在循环执行过程中,希望当某个条件满足时退出循环,使用__break__语句。

18、GDI是___ Graphics Device Interface _______的英文缩写。

19、在C#中的图形编程中,最常用的命名空间是____ System.Drawing ______。

20、在C#窗体编程中,如果想在文本框中输入密码,常指定____ PasswordChar ______属性。

21、Timer控件的____ Interval ______属性用来设置定时器Tick事件发生的时间间隔。

22、在C#的switch语句中,在分支的最后应有一条_____ break _____语句。

23、在try-catch-finally结构中,_____ try _____块封装了可能引发异常的代码。

24、在try-catch-finally结构中,_____ finally _____块将一定被执行。

25、在C#中,异常对象是从_____ Exception _____类派生而来的。

26、在C#中,要给属性对应的数据成员赋值,通常要使用set访问器,set访问器始终使用隐式参数_____ value _____来设置属性的值。

27、C#方法的参数有四种,分别是:值参数、引用参数、输出参数和数组型参数,在形参中声明数组型参数时应使用_____ params _____关键字。

28、在C#中,要声明一个委托类型MyFun1,该委托类型MyFun1可以引用一个采用int作为参数并且返回类型为int的方法,使用的语句是____ delegate int MyFun1(int n)______。29、设x为int型变量,请写出描述“x是奇数”的C#语言表达式____ x%2 != 0______。

30、设x为int型变量,请写出描述“-10<=x<=10”的C#语言表达式_-10<=x && x<=10__。

31、在C#中,要定义一个3行4列的单精度型二维数组f,使用的定义语句为_ float[,] f = new float[3, 4];__。

32、在C#中,要定义一个为int型的参数数组a,数组有两行,第一行一个元素,第二行两个元素并赋初值3和4,使用的语句如下:

int[][] a=___ new int[2][]_______;a[0]= ____ new int[1]______;a[1]= __ new int[] { 3, 4 }____;

33、在C#中,值类型的数据存储在内存的_____栈_____中,引用类型的数据存储在内存的______堆____中。

34、在C#中,bool类型只有两种值,分别是___true_______和___false_______。

35、在C#中,要声明一个密封类(即禁止被继承),只需要在声明类时加上__sealed_关键字。

36、在C#中,分部类可以将类的声明拆分到两个或多个源文件中,若要声明一个分部类,则类的每一部分的声明前都要用____partial____关键字修饰。

37、在C#类中,要声明一个虚拟方法,则在该方法定义前要加上____virtual______关键字修饰。

38、在C#中,子类要隐藏基类的同名方法应使用关键字___new_______;子类要重写基类的同名方法应使用关键字_____override_____。

39、在.Net托管代码中我们不用担心内存漏洞,这是因为有了___垃圾回收器_______。

40、在.NET Framework下,所有的程序语言在编译时会先转为与平台机器无关的__中间语言__代码,再与元数据一同编译成可执行代码,就可以在任何安装有CLR的机器上运行;当程序被运行时,CLR会启动___实时编译器_______进行实时编译,它会侦测硬件设备而将程序进一步转换成该机器的本机代码。

41、https://www.360docs.net/doc/d25138964.html,对象模型中有5个主要的组件,分别是___Connection_______、___command_______、DateSet、___DateAdapter_______、DataAdapter。

42、在C#中,引用命名空间使用____using______关键字。

43、在C#中,有多种注释方法,其中____//______适用于单行注释,____/**/______适用于多行注释。

44、在C#中,使用____const______关键字声明符号常量。

45、在C#中,当类T只声明了私有实例构造函数时,则在T的程序文本外部,__不可以____(可以or 不可以)从T派生出新的类,____不可以______(可以or 不可以)直接创建T 的任何实例。

46、在.NET中所有可序列化的类都被标记为___[Serializable]_______。

47、在面向对象中,多态分为编译时多态(静态多态)和____运行时______多态(动态多态),其中编译时多态主要是通过___方法重载_______实现的。

48、C#程序设计中的错误主要分为两类:___语法错误_______和运行错误。

49、在VS 2005中,单步跟踪是指用跟踪来一次一条语句地执行代码,那么在调试过程中,单步跟踪的键盘快捷键是____F11______。

50、CLR全称是__Common Language Runtime___。

三、判断题

1、在C#中,抽象类里面的方法一定不能含有实现。(×)

2、运行.NET程序,不需要安装.NET Framework。(×)

3、C#中委托只包含单点委托。(×)

4、C#中已经不包含指针。(√)

5、在C#中,类的静态成员方法不能对非静态的数据成员进行操作。(√)

6、在C#中,不允许使用未初始化的变量。(√)

7、C#中标识符严格区分大小写。(√)

8、在C#中,类和结构体都属于引用类型。(×)

9、在C#中,static const int i = 1;该行代码能编译通过。(×)

10、在C#中,Array类是所有数组类型的抽象基类型。(√)

11、在C#中,类的构造函数可以重载,析构函数也可以重载。(×)

12、在C#中,类的构造函数和析构函数都不能被继承。(√)

13、在C#中,定义一个类时,声明了一个构造函数,则编译器不会再提供默认的构造函数。(√)

14、在C#中,可以为类的字段指定默认值。(√)

15、在C#中,在类的属性声明中,只有get访问器表明属性只能读出而不能写入。(√)

16、在C#中,允许同一个类中存在两个或多个方法签名一样的成员方法。(×)

17、在C#中,类的索引器必须作为实例成员。(√)

18、C#不支持运算符重载。(×)

19、C#不支持私有继承和保护继承。(√)

20、在C#中,类的成员默认访问修饰符是private,而接口的成员默认访问修饰符是public。(√)

21、在C#中,接口的成员声明中包含任何修饰符都是错误的。(√)

22、在C#中,抽象类可以包含构造函数,接口不能包含构造函数。(√)

23、在C#中,抽象类和接口都不能直接实例化。(√)

24、在C#中,定义一个类时,用户不可以声明一个析构函数,因为析构函数是由编译器自动生成的。(×)

25、C#中抽象方法是隐式的虚方法,实现抽象方法用关键字override。(√)

四、程序阅读

1、阅读下面代码,写出输出结果:

using System;

public class A

{

public static void Method1(out int x, params object[] objs)

{

x = 0;

foreach (object obj in objs)

x += int.Parse(obj.ToString());

}

};

public class Test

{

static void Main()

{

int x;

A.Method1(out x, 1, 2, 3, 4, 5);

Console.WriteLine(x);

}

}

输出结果:

___________1+2+3+4+5=15___________________

2、阅读下面代码,写出输出结果:

using System;

public class A

{

public static void Method1(ref int x, int y) {

int temp = x;

x = y;

y = temp;

}

};

public class Test

{

static void Main()

{

int x = 1, y = 2;

A.Method1(ref x, y);

Console.WriteLine("x={0},y={1}", x, y);

}

}

输出结果:

_________x=2,y=2_____________________

3、阅读下面代码,写出输出结果:

using System;

public class A

{

public A() { Console.WriteLine("构造函数A"); } ~A() { Console.WriteLine("析构函数A"); }

};

public class B:A

{

public B() { Console.WriteLine("构造函数B"); } ~B() { Console.WriteLine("析构函数B"); }

};

public class Test

{

static void Main()

{

A a = new B();

}

}

输出结果:

____构造函数A__________________________

____构造函数B__________________________

____析造函数B__________________________

____析构函数A__________________________

4、阅读下面代码,写出输出结果:

using System;

public class A

{

public static int i = 1;

public A() { Console.WriteLine("构造函数A"); }

static A() { Console.WriteLine("静态构造函数A"); } ~A() { Console.WriteLine("析构函数A"); }

};

public class Test

{

static void Main()

{

A a = new A();

}

}

输出结果:

______静态构造函数A________________________

_______构造函数A_______________________

_______析构函数A_______________________

5、阅读下面代码,写出输出结果:

using System;

public class A

{

public static int i = 1;

public A() { Console.WriteLine("构造函数A"); }

static A() { Console.WriteLine("静态构造函数A"); } ~A() { Console.WriteLine("析构函数A"); }

};

public class B : A

{

public B() { Console.WriteLine("构造函数B"); } ~B() { Console.WriteLine("析构函数B"); }

};

public class Test

{

static void Main()

{

A a = new B();

}

}

输出结果:

________静态构造函数A ______________________

________构造函数A ______________________

________构造函数B _____________________

________析构函数B______________________

________析构函数A______________________

6、阅读下面代码,写出输出结果:

using System;

public class A

{

private int length = 5;

private string[] names = new string[5];

public int Length

{

get { return this.length; }

}

public string this[int index]

{

get { return names[index]; }

set { names[index] = value; }

}

};

public class Test

{

static void Main()

{

A a = new A();

for (int i = 0; i < a.Length; i++)

a[i] = i.ToString();

Console.WriteLine(a[3]);

}

}

输出结果:

________3______________________

7、阅读下面代码,写出输出结果:

using System;

public class A

{

public void fun1(int n)

{

Console.WriteLine("{0}的2倍={1}", n, 2 * n); }

public void fun2(int n)

{

Console.WriteLine("{0}的3倍={1}", n, 3 * n); }

};

public delegate void mydelegate(int n);

public class Test

{

static void Main()

{

A a = new A();

mydelegate p = new mydelegate(a.fun1);

p += a.fun2;

p(1);

}

}

输出结果:

_____1的2倍=2_________________________

_____1的3倍=3_________________________

8、阅读下面代码,写出输出结果:

using System;

public class A

{

public void fun1(int n)

{

Console.WriteLine("{0}的2倍={1}", n, 2 * n); }

public void fun2(int n)

{

Console.WriteLine("{0}的3倍={1}", n, 3 * n); }

};

public delegate void mydelegate(int n);

public class Test

{

public static event mydelegate p;

static void Main()

{

A a = new A();

p += new mydelegate(a.fun1);

p(1);

}

}

输出结果:

_______1的2倍=2_______________________

9、阅读下面代码,写出输出结果:

using System;

class A

{

public static int X;

static A()

{

X = B.Y + 1;

}

}

class B

{

public static int Y = A.X + 1;

static B() { }

static void Main()

{

Console.WriteLine("X={0},Y={1}", A.X, B.Y); }

}

输出结果:

_______x=1,y=2_______________________

10、阅读下面代码,写出输出结果:

using System;

namespace param

{

class Class1

{

static int i = getNum();

int j = getNum();

static int num = 1;

static int getNum()

{

return num;

}

[STAThread]

static void Main(string[] args)

{

Console.WriteLine(string.Format("i={0}",i));

Console.WriteLine(string.Format("j={0}",new Class1().j));

Console.Read();

}

}

}

输出结果:

_______i=0_______________________

_______j=1_______________________

11、阅读下面代码,写出输出结果:

using System;

public abstract class A

{

public A()

{

Console.WriteLine('A');

}

public virtual void Fun()

{

Console.WriteLine("A.Fun()");

}

}

public class B : A

{

public B()

{

Console.WriteLine('B');

}

public new void Fun()

{

Console.WriteLine("B.Fun()");

}

public static void Main()

{

A a = new B();

a.Fun();

}

}

输出结果:

_________A_____________________

_________B_____________________

_________A.Fun()_____________________

12、阅读下面代码,写出输出结果:

using System;

public class A

{

public virtual void Fun1(int i) {

Console.WriteLine(i);

}

public void Fun2(A a)

{

a.Fun1(1);

Fun1(5);

}

}

public class B : A

{

public override void Fun1(int i) {

base.Fun1(i + 1);

}

public static void Main()

{

B b = new B();

A a = new A();

a.Fun2(b);

b.Fun2(a);

}

}

输出结果:

_______2_______________________

_______5_______________________ _______1_______________________ _______6_______________________

相关文档
最新文档