2024年1月18日发(作者:)
《可视化程序设计》期末复习资料(C#)
一、填空题
1.
2.
c#不但具有面向对象程序语言所应有的一切特性:继承性、封装性、多态性,而且c# 的一个重要创新就是使面向组件编程更加容易。
借助C#,可以创建多种应用程序,如:Windows应用程序、Web应用程序、控制台应 用程序、智能设备应用程序(Pocket PC袖珍PC)、移动Web应用程序(PDA个人数字 助理)等等。
3.
4.
每个C#程序均必须包含一个称为Main的方法,该过程为应用程序的起始点并为应用 程序提供总体控制。该方法在"类”的内部声明,它必须具有static关键字,表明是 静态方法。
MessageBox类用于显示可包含文本、按钮等的消息框,它是.NET框架类库中的类,要 在自己的程序中使用MessageBox类,必须在自己的程序中定位该类的位置: MessageBox类位于程序集。因此,在自己的程序中,必须添 加对这个程序集的一个引用。同时使用using 将其命名空间导入 自己的程序中。
5. C#支持多种数据类型,主要有整型、非整型和其它类型。其中decimal类型适合财务 和货币计算。浮点类型包括float和double类型,两者的主要差别不在数据范围,而 在于其各自所表示的数值精度。
6. 程序中常常需要临时存储一些值,在编程语言中使用变量来储存值。变量的声明就是为 指定的名称声名它的数据类型。C#语法规定,变量必须以英文字母或下划线开头,不 可以数字为开头来命名的,如果变量第一字符是下划线,则后面一定要有字符,字母或 数字皆可。变量对大小写是敏感的。
7.
8.
9.
常量用来存储在整个应用程序的执行过程中保持不变的值。常量用const来定义,它的 命名规则、类型、作用范围和变量的相同。
Unicode字符是16位字符,用于表示世界上多数已知的书面语言。数组可以通过同一 名称引用一组相关的数据,并使用一个称为“索引”或"下标”的数字进行区分。
方法是实现可以由对象或类执行的计算或操作的成员。一般说来,应用程序的每一行代 码都必须在某个方法的内部。方法对执行重复或共享的任务很有用。所有方法都必须在 —•个类中定义。
置,被调用的方法将接受参数的一个副本;后者并不创建新的存储位置,实参和形参 具有相同的位置。
11. 类的成员或者是静态成员,或者是实例成员,一般说来,将前者看作属于类和将后者看 作属于对象很有用。在''类”中,如果声明有多个同名的方法但它们的签名不同,则称 为方法的重载。
12. 在现有的类(基类)的基础上建立新类(派生类)的处理过程称为继承,这带来的好主 要有代码复用、继承性多态。可以用base关键字从派生类中访问基类的成员。在派生 类中定义与基类同名的方法,使用new修饰符显式隐藏从基类继承的方法成员。
13. virtual关键字用于指定属性或方法可以在派生类中重写,具有该关键字的方法或属性被 称作虚拟成员。当实例方法声明包含override修饰符时,称该方法为重写方法,重写方
10. 向方法传递参数有两个办法,一个是传值,另一个是传引用。前者形参将创建新的存储 位
法用相同的签名重写继承的虚拟方法。
14. 在类声明中使用abstract修饰符以指示类只能是其他类的基类,我们称它为抽象类。
15. 用GDI+绘制简单几何图形需要如下步骤:创建Graphics对象、创建笔或画笔、调用图 形方法。
16. 菜单可以分成两种基本类型:下拉式菜单和弹出式菜单。Timer控件是实现在用户定义 的时间间隔引发事件的计时器。
17. C#中引用类型有:类、委托、数组、接口。委托声明的关键字是delegatee
18. 用sealed修饰的类的特点是不能继承(密封)
19. c#中的三元运算符是?:
二、选择题
1. .NET平台开发的基础是
B、Web Service
D、Class Library
B、Web Service
D、Class Library
()
2,
A、CLR
C、Frame Work
A、CLR
C、Frame Work
在.NET平台中,提供很多服务来简化代码的开发和应用程序的部署是()
3. .NET Common Language Runtime 的作用是
A、是.NET托管程序的执行引擎 B、供.NET托管程序调用的API集合
C、.NET托管程序的编译程序 D、支持.NET托管程序的操作系统
4. .NET Framework不支持哪种类型的用户界面?
A、Web 窗体
C、控制台应用程序
5.
B、Windows 窗体
D、COM组件
()
()
设置文本框的哪种属性用于输入口令类的文本。
A、Readonly
C、PasswordChar
B、Text
D、DataSource
()
B、while
D> try 和 catch
6. 在C#中,使用 语句捕获异常
A> do
C> if
7. 在对用户单击鼠标动作进行处理时,需要对 事件进行编码。
A、Click
C^ KeyPress
B、DoubleClick
D、EnterPress
()
8. 在列表框中,修改 属性可使用户一次选择多项。
A、SelectionMode
C、Items
B、DataSource
D、Text
()
9. 修改窗体的下列哪个属性可改变窗体的标题
A> Name B、Text
C、Caption
10.
D、Items
在面向对象编程() 中,利用已有的类创建一个新类是利用对象的
A、继承性
C、重载性
11.
对象的属性和方法,这取决于对象的
A、封装性
C、多态性
B、继承性
D、接口
B、多态性
D、接口
能不能直接访问()
12. 声明成员只在类内部访问使用 ______ 关键字。
A、private
C、protected
friend
D^ public
()
13. 以下关于Main方法的叙述,正确的有 AC
A、 在类的内部声明,必须具备有static关键字
B、 在类的内部声明,必须具备有void关键字
C、 是静态方法
D、 Main方法是程序的入口点,不含参数
14. 类MessageBox的类库的程序集(动态链接库)在哪里?
A、
C.
A.
C. 32
B、System.
D.
B.
D. 64
15. C#中的类型float对应.NET类库中的 正确答案:A
16. 允许查看项目文件层次组织的IDE窗口名称是什么?
A、解决方案资源管理器
C,对象浏览器
abstract class shape
{
public abstract void Draw();
)
class Sqare : shape
B、服务器资源管理器
D.类视图
17. 抽象类shape和派生类Sqare定义如下:
应向类Sqare中添加下列哪种合法Draw方法,以实现shape中的抽象方法Draw?
A. protected overrides void Draw()
B. public override void Draw()
C. protected overloads void Draw()
D. public overloads void Draw()
正确答案:B
18. 为了将字符串str= "123456”转换成整数123456,可以使用以下哪条语句?答:A, C
A. int Num = (str)
C. int Num = (int)(str)
19. 分析下列语句:
namespace TestCS
(
public delegate void Hello(ref string target)
}
该语句的作用是: 正确答案:D
B. int Num = (integer)
D. int Num = ()
A. 在TestCS命名空间中定义了一个名为Hello的全局方法;
B. 在TestCS命名空间中声明了函数Hello的原型;
C. 在TestCS命名空间中定义了一个名为Hello的函数指针;
D. 在TestCS命名空间中定义了了一个名为Hello的委托类型;
20. 以下关于接口的叙述,正确的有哪些? abed
A. 接口成员必须是方法、属性、事件或索引器。
B. 接口不能包含常数、字段、运算符
C. 接口不能包含实例构造函数、析构函数或类型
D. 接口不能包含任何种类的静态成员。
21. 下列关于构造函数的描述正确的是()
A.构造函数可以声明返回类型。 B.构造函数不可以重载
C.构造函数的方法名和类名相同 D,构造函数不能带参数
22. C#的数据类型有()
A.值类型和调用类型;
C.引用类型和关系类型;
23. 下列描述错误的是()
A、类不可以多重继承而接口可以;B、抽象类自身可以定义成员而接口不可以;
C、抽象类和接口都不能被实例化;D、一个类可以有多个基类和多个基接口;
24. 接口是一种引用类型,在接口中可以声明(),但不可以声明公有的域或私有的成员变
量。
B.值类型和引用类型;
D.关系类型和调用类型;
A、方法、属性、索引器和事件;
C、索引器和字段;
25. 下列关于C#中索引器理解正确的是()
B、方法、常量、属性;
D、事件和字段;
A、索引器的参数必须是两个或两个以上B、索引器的参数类型必须是整数型
C、索引器没有名字 D、以上皆非
) 26. 下面是关于类及其修饰符的一些描述,不正确的是(
A、abstract类只能用来派生子类,不能用来创建abstract类的对象
B> sealed类不但可以用来派生子类,也可以用来创建sealed类的对象
C、 abstract不能与sealed同时修饰一个类
D、 abstract方法必须在abstract类中声明,但abstract类定义中可以没有abstract方法
27. 关于类的继承,下面叙述不正确的是()
A、 子类可以继承父类中的所有变量和方法
B、 一个子类只能有一个父类
C、 子类可以继承父类的父类中的变量和方法
D、所有类都是通过直接或间接地继承Object类而得到的
28. 下列关于构造函数的描述不正确的是()
A、构造函数不声明返回类型。
C、构造函数必须与类名相同
A、一个类中只能有一个析构函数
B、构造函数可以用private修饰
D、构造函数可以被显式调用
B、析构函数可以被继承和重载
29. 下列关于析构函数的描述不正确的是()
C、 析构函数的名字与类名相同,只是在前面加一个
D、 析构函数没有任何参数,也不返回任何值
30. 下面对抽象类的描述不正确的是()
A、 抽象类只能作为其它类的基类,它不能直接被实例化。
B、 对抽象类不能使用new操作符。
C、 抽象类允许包含抽象成员(当然可以包含非抽象成员),虽然这不是必须的。
D、 抽象类可以同时又是密封的。
三、判断题
1.
2.
3.
4.
5.
6.
7.
8.
C#代码行中,字符“//”会将这一行的其余内容转换为注释内容。
Main方法是程序的入口点,程序控制在该方法中开始和结束。
Main方法在类的内部声明,它必须具备有static关键字,是静态方法。
Show方法是MessageBox类的一个静态方法。
静态方法的调用一般通过在类名后加上点操作符(•)和方法名来调用它们。
“?:”运算符称为条件运算符,其一般格式为(表达式1)?(表达式2):(表达式3),如果表 达式1为真,则结果是表达式2,否则结果是表达式3。
循环语句while有条件执行嵌入语句零次或多次,do/while语句有条件地执行嵌入语句 一次或多次。
方法是实现可以有对象或类执行的计算或操作的成员。应用程序中每一行代码都必须在 某
个方法的内部。
9. 直接基类中,除实例构造函数、静态构造函数和析构函数外,所有其它成员都被派生类 继承。
10. 除了直接基类中的私有成员,所有其他继承成员都能在派生类中被存取。
11. 默认构造函数只是调用直接基类的无参数构造函数,如果直接基类没有可访问的无参数 构造实例函数,则会发生编译错误。
12. 基类或基类对象均不能存取派生类成员。
13. base访问可用于访问被当前类隐藏的基类成员,但只能在实例方法、实例访问器或实例 构造函数块中使用。
14. base访问只能在实例方法、实例访问器或实例构造函数的块中使用。
15. 从静态方法中使用base关键字是错误的。
16. 用户界面元素,如按钮、文本框、复选框等被称为控件。
17. 代码#region和#endregion关键字的作用是隐藏已通过测试的代码部分。
18. 派生类中定义与继承的虚拟方法同名的方法时,方法参数的个数、数据类型以及返回值 的类型必须相符。
19. 类是对象的符号表示形式,它是计算机用来创建对象的模版。
20. private修饰符是类成员的默认修饰符。如果移除了该修饰符,仍然会得到私有成员。
21. 类的成员或者是静态成员,或者是实例成员,一般说来,将前者看作属于类和将后者看
作属于对象很有用。
22. 引用类型变量间的简单赋值语句并不创建新的对象。
23. 在类中如果声明有多个同名的方法但它们的签名不同,则称为方法的重载。
24. 在现有的类(基类)的基础上建立新类(派生类)的处理过程称为继承,这带来的好主 要有代码复用,继承多态性。
25. 派生类不能继承直接基类构造函数,我们在声明派生类构造函数时,可以通过base调 用直接基类构造函数。
26. base访问只能在实例方法、实例访问器或实例构造函数的块中使用。
27. 在派生类中定义与基类同名的方法,使用new修饰符显式隐藏从基类继承的方法成员。
28. 在类声明中使用abstract修饰符以指示类只能是其他类的基类,我们称它为抽象类。含 有一个或多个抽象成员的类,必须定义为抽象类。但必须注意抽象类不一定包含抽象成 员。
29. 一个接口定义一个协定,实现接口的类或结构必须遵守其协定。
30. 滚动条常用属性:Minimum> Maximum> Value> LargeChange, SmallChange;常用事 件
Scroll
31. 用GDI+绘图需要如下步骤:创建Graphics对象、创建笔或画笔、调用图形方法。
32. 当重新绘制窗体时发生窗体的Paint事件,为该事件提供信息的类是PaintEventArgs, 其Graphics属性指定绘制窗体时所用的Graphics对象。
33. 有几种不同类型的画笔,如 SolidBrush、HatchBrush> LinearGradientBrush 等等,所有 画笔类均从Brush类继承的,该类是"抽象”类,不能实例化。
34. Timer控件是实现在用户定义的时间间隔引发事件的计时器。
四、简答题
1. 简述 private、protected, publicinternal 修饰符的访问权限。
参考答案:
private : 私有成员,在类的内部才可以访问。
protected :保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal:
2.
参考答案:
继承、封装、多态
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型 内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。有两种形式的多态 ----- 重载与重写。
3. 简述重载、重写和隐藏的区别?
参考答案:
重载、重写和隐藏是彳艮容易混淆的类似概念。虽然所有这三种技术都使我们得以创建同名的
成员,但它们之间有一些重要的差异。
重载的成员用于提供属性或方法的不同版本,这些版本具有相同名称但是接受不同数量的参 数或者接受不同数据类型的参数。
重写的属性和方法用于替换在派生类中不适合的继承的属性或方法。重写的成员必须接受同 一数据类型和参数数量。派生类继承重写的成员。
隐藏的成员用于局部替换具有更广范围的成员。任何类型都可隐藏任何其他类型。例如,可 声明隐藏同名继承方法的属性。无法继承隐藏的成员。
4. 值类型和引用类型的区别?
在同一命名空间内可以访问。
面向对象的思想主要包括什么?
参考答案:
值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引 用或叫句柄。
值类型变量存储在堆栈。每个程序在执行时都有自己的堆栈,其他程序不能访问。
引用类型存储在堆。引用类型存贮实际数据的引用值的地址。
C#中的引用类型有4种(类、委托、数组、接口)
5. C#的优点是什么?至少列出4点
参考答案:
•
•
•
•
6.
C#中指针已经消失.允许对原始指针的有限制的使用.
基于.NET平台的,继承了自动内存管理和垃圾回收的特点.
C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任 何应用程序都可以通过互联网来使用这个服务.
面向对象的
什么是CLR?
参考答案:
公共语言运行时(Common Language Runtime, CLR ),提供了一个可靠而完善的多语言运行环 境。CLR是一个软件引擎,用于加载应用程序、检查错误、进行安全许可认证、执行和清空 内存。它属于纯动态运行时的一种,它的主要组成部分是虚拟执行引擎VEE (Virtual Execution Enging ),它可以打破语言和平台的限制。
7. 如何理解.net中的垃圾回收机制。
参考答案:
如果发现内存不够,则垃圾回收器,将全部对象作为无效对象(被回收对象),然后先将全局变
量,static,处于活动中的局部变量,以及当前CG指针指向的对象放入一个表中.然后会搜索 新列表中的对象所引用的对象.加入列表中,其他没有被加入列表的对象都会被回收.非托管 对象要记得释放资源.
四、阅读程序
1. 使用Graphics对象的MeasureStringO方法可以计算出给定字体的字符串宽度。下例在获 取字符串的宽度和高度后绘制出一个黑色矩形,然后将字符串以蓝色绘制在矩形中。试 根据上下文及注释完善之。
protected override void OnPaint(PaintEventArgs e)
(
Graphics g = cs;
string str = "This is a string";
SizeF size = eString(str,Font);
ctangle(,0,0,size. Width,);
ring(str,Font,,new RectangleF(0,0, size. Width,size .Height));
}
2, 使用Graphics对象的DrawString ()方法可以绘制出文本字符串。下例在当前窗体左上角 处private void button l_Click(object sender, rgs e)
(
〃获取对将用于绘图的图像对象的引用
Graphics g=Graphics();
String drawString=”程序运行结果!
SolidBrush myBrush=new SolidBrush(gb(70,));
Font myFont=new Font("宋体”,14);
Rectangle drawRect=new Rectangle( 10,10,150,20);
g. DrawRectangle(Pens. B lack, drawRect);
ring(drawString,myFont,myBrush,drawRect);
绘制出一个黑色矩形,然后将字符串以自定义颜色制在矩形中。试根据上下文及注释 完善之。
五、编程设计题
1.类通常包括3种成员:构造函数、字段或属性以及方法。①请设计一个个人资料类 Person„包含下列数据:两个私有字符串类型字段:姓名(name),血型(blood); 2 个公有方法:显示姓名,显示血型;2个公有构造函数:Person()和Person(string name,string blood)o②设计一个程序使用上面的类,创建一个Person的对象p如下:Person p=new Person("李四”,"AB”);调
用相应的方法显示姓名和血型。
参考答案:
新建一个空白项目,添加对System. Windows. Forms, dl 1的引用,然后,添力口一个代码文件。
输入以下具体代码:
using System. Windows. Forms;
public class Person
(
private string name;
private string blood;
public Person () ( )
public Person (string name,string blood)
(
this. name=name;
=blood;
)
public string DispName ()
(
return name;
}
public string DispBlood()
return blood;
static void Main ()
Person p=new Person ("李四", "AB");
MessageBox. Show (p. DispName () +"的血型是:"+p. DispBlood ());
)
}
2. 设计一个 Person 类,包含下列数据:字段:name>blood> weight>height;方法:PrintName()>
PrintBlood、PrintWeight> PrintHeight; 构造函数:Person(), Person(string name,string
blood,int weight,int height)o 编程测试上面的类。
参考答案:
新建一个空白项目,添加对System. Windows. Forms, dll的引用,然后,添加一个代码文件。
输入以下具体代码:
using System. Windows. Forms;
public class Person
(
private string name;
private string blood;
private int weight;
private int height;
public Person () { }
public Person (string name, string blood, int weight, int height)
(
this. name=name;
this. blood=blood;
this. weight=weight;
this. height=height;
)
public string PrintName ()
return name;
}
public string PrintBlood()
return blood;
public int PrintWeight ()
return weight;
public int PrintHeight ()
return height;
static void Main()
string output=nul1;
Person p=new Person ("李四", "AB", 58,172);
output+=p. Pr intName () +"的血型是:"+p. Pr intBlood () +"n";
output+=p. Pr intName () +"的体重是:"+p. PrintWeight (). ToString () +"n";
output+=p. Pr intName () +"的身高是:"+p. Pr intHeight (). ToString ();
MessageBox. Show (output);
}
}
3. 根据历法知识,所谓闰年是指输入的年份能被4整除,但不能被100整除;或者,能被
400整除。试结合C#知识,采用面向对象方法,编程实现判断一个年份是不是闰年。
参考答案:
面向对象设计从全局考虑,这里定义一个日期类Tdate,这个类中拥有表达年、月、日的三 个数据成员(即属性)month、day、year,另外,类中有一个判断是不是闰年的一个方法 IsLeapYear
在定义完这个类之后,我们在主函数中的处理,就非常简单了,定义一个类对象,使用该对 象来表现自己就好了。
新建一个空白项目,添加对System. Windows. Forms, dll的引用,然后,添加一个代码文件。 输入以下具体代码:
〃定义日期类Tdate
using System. Windows. Forms ;
class Tdate
(
private int month;
private int day;
private int year;
//属性:置日期值
public int Month
{
set (month=value;}
get {return month;}
}
public int Day
(
set {day=value;}
get {return day;}
}
public int Year
(
set (year=value;}
get {return year;}
〃方法成员
public bool IsLeapYear ()
}
//判定是否闰年
return (year%4 == 0 && year%100!=0) I I (year%400==0);
public string Print () 〃输出日期值
(
return string. Format (" {0}年", Year);
}
}
public class Test
(
〃主函数部分
public static void Main()
(
string output="
Tdate MyDate=new Tdate ();
=1989;
if (MyDate. IsLeapYear ())
output=MyDate. Print () +”是闰年!"
else
output=MyDate. Print () +”不是闰年!
MessageBox. Show (output, 〃输出结果! 〃);
}
}
4. 设计一个类,类中包含一个方法Calculor()方法,设计该方法若含一个int型参数,则计 算该整数的阶乘,若含两个int型参数,则计算这两个整数的最小公倍数(或最大公约 数),若含三个int型参数,则输出三个数中的最大值。
参考答案:
public class MyCalculor
{
public MyCalculor()
(
//
// TODO:在此处添加构造函数逻辑
//
}
〃一个int型参数,则计算该整数的阶乘
public int Calculor(int i)
(
int sum=l;
for (int j=l;j<=i;j++)
(
sum*二j;
return sum;
//两个int型参数,则计算这两个整数的最大公约数
public int Calculorl(int a, int b)
(
int temp;
while ( a % b !=0)
{
temp二a % b ;
a=b;
b二temp;
}
return b;
}
//两个int型参数,则计算这两个整数的最小公倍数
public int Calculor2(int a, int b)
{
int temp;
temp二a;
while (temp % b!=0)
temp+=a;
return temp;
}
//三个int型参数,则输出三个数中的最大值
public int Calculor(int i, int j, int k)
{
int temp=0;
temp=(i>j?i: j);
return (temp>k?temp:k) ;
}
public static void Main()
(
int a=15;
int b=12;
int
c二7;
〃求出i, j中最大者
//求出
i, j, k中最大者
MyCalculor p=new MyCalculor();
//MessageBox. Show(p. Calculor (a, b, c). ToString ());
//MessageBox. Show(p. Calculor (a). ToString ());
MessageBox. Show(p. Calculor2 (a, b). ToString());
发布评论