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_______________________