c#试题及答案.docx
《c#试题及答案.docx》由会员分享,可在线阅读,更多相关《c#试题及答案.docx(19页珍藏版)》请在冰豆网上搜索。
c#试题及答案
一、单项选择题
1、下列哪个类型的对象是ADO.NET在非连接模式下处理数据内容的主要对象?
(D)
A.CommandB.ConnectionC.DataAdapterD.DataSet
2、枚举类型是一组命名的常量集合,所有整形都可以作为枚举类型的基本类型,
如果类型省略,则定义为(A)。
A.intB.sbyteC.uintD.ulong
3、创建数据库连接使用的对象是(A)。
A.ConnectionB.CommandC.DataReaderD.DataSet
4、C#中导入某一命名空间的关键字是(A)。
A.usingB.useC.importD.include
5、一般情况下,异常类存放在什么命名空间中?
(B)。
A.生成异常类所在的命名空间B.System.Exception命名空间
C.System.Diagnostics命名空间D.System命名空间
6、若将数据库中的数据填充到数据集,应调用SqlDataAdapter的(C)方法。
A.OpenB.CloseC.FillD.Update
7、若将数据集中所作更改更新回数据库,应调用SqlAdapter的(A)方法。
A.UpdateB.CloseC.FillD.Open
8、在使用FileStream打开一个文件时,通过使用FileMode枚举类型的(A)成员,来指定操作系统打开一个现有文件并把文件读写指针定位在文件尾部。
A.AppendB.CreateC.CreateNewD.Truncate
9、在菜单项File中,为将F设为助记符,应将该菜单项的Text属性设置为(B)。
A.@FileB.&FileC.%FileD._File
10、指定操作系统读取文件方式中的FileMode.Create的含义是(D)。
A.打开现有文件
B.指定操作系统应创建文件,如果文件存在,将出现异常
C.打开现有文件,若文件不存在,出现异常
D.指定操作系统应创建文件,如果文件存在,将被改写
11、枚举类型是一组命名的常量集合,所有整形都可以作为枚举类型的基本类型,如果类型省略,则定义为(D)。
A.uintB.sbyteC.ulongD.int
12、当运行程序时,系统自动执行启动窗体的(C)事件。
A.ClickB.DoubleClickC.LoadD.Activated
13、若要使命令按钮不可操作,要对(B)属性进行设置。
A.VisibleB.EnabledC.BackColorD.Text
14、在设计窗口,可以通过(A)属性向列表框控件如ListBox的列表添加项。
A.ItemsB.Items.CountC.TextD.SelectedIndex
15、引用ListBox(列表框)最后一个数据项应使用(C)语句
B.ListBox1.Items[ListBox1.SelectedIndex]
D.ListBox1.Items[ListBox1.SelectedIndex-1]
16、引用ListBox(列表框)当前被选中的数据项应使用(B)语句
B.ListBox1.Items[ListBox1.SelectedIndex]
D.ListBox1.Items[ListBox1.SelectedIndex-1]
17、窗体中有一个年龄文本框txtAge,下面(D)代码可以获得文本框中的年龄值。
A.intage=txtAge;
B.intage=txtAge.Text;
C.intage=Convert.ToInt32(txtAge);
D.intage=int.Parse(txtAge.Text);
18、下面(B)代码可以显示一个消息框。
A.Dialog.Show();
B.MessageBox.Show();
C.Form.Show();
D.Form.ShowDialog();
19、当需要使用一种数据类型表达同一类事物的不同状态,比如:
男人、女人、小孩、老人或者春夏秋冬时,C#中最可靠和直观的解决方案是什么?
(B)
A.使用struct结构
B.使用enum枚举
C.使用int类型,用不同的数值{0,1,2……}表示
D.C#中无法通过一种数据类型实现同一事务的不同状态。
20、在C#中创造一个对象是,系统最先执行的是(B)中的语句。
A.main方法B.构造函数C.初始化函数D.字符串函数
21、异常捕获发生在(B)块中?
A.tryB.catchC.finallyD.throw
22、在C#中,程序使用(B )语句抛出系统异常或自定义异常。
A.runB.throwC.catchD.finally
23、创建菜单后,为了实现菜单项的命令功能,应为菜单项添加(C)。
事件处理方法。
A.DrawItemB.PopupC.ClickD.Select
24、C#中TestClass为一自定义类,其中有以下属性定义publicvoidProperty{…}使用以下语句创建了该类的对象,并使变量obj引用该对象:
TestClassobj=newstClass();那么,可通过什么方式访问类TestClass的Property属性?
(A)。
A.Obj.Property;B.MyClass.Property;C.obj:
:
Property;D.obj.Property();
25、StreamReader类的(A)方法用于从流中读取一行字符。
如果到达流的末尾,则返回null。
A.ReadLineB.ReadC.WriteLineD.Write
26、NET框架中的SqlCommand对象的ExecuteReader方法返回一个:
(A)。
A.SqlDataReaderB.DataSetC.SqlDataAdapterD.XmlReader
二、判断题
1当有多个异常要捕获时,应先捕获特殊(具体)异常再捕获普通(一般)异常。
√
2、在控制台应用程序中,若想从键盘上输入数据,可以使用Console.Read()和Console.ReadLine()方法。
√
3、填充数据集应使用SqlDataAdapter的Update()方法×
4、命令对象的ExecuteScalar()方法是在获取单值的时候使用。
√
5、被sealed关键字修饰的方法不能被继承。
√
6、委托是将方法作为参数传递给另一方法的一种数据类型。
事件与委托没有关系。
×
7、try、catch、finally三个字句必须同时出现,才能正确处理异常×
8、try字句中所抛出的异常一定能被catch字句捕获×
9、无论异常是否抛出,finally子句中的内容都会被执行。
√
10、如果使用的整数索引小于0,或者大于数组的大小,编译器将抛出一个IndexOutOfRangeException异常;√
三、填空题
1、System.Array有一个(length)属性,通过它可以获取数组的长度。
2、SQL语句中删除一个表中记录,使用的关键字是(delete)。
3、封装的对象之间进行通信的一种机制叫做( 消息传递)。
4、(Stack)类表示对象的先进后出集合。
5、在异常处理结构中,抛出的异常要用(catch)语句捕捉。
6、Timer控件的(interval)属性,用来指定时钟空间触发时间的时间间隔,单位毫秒。
7、在windows程序中,若想选中复选框,则应将该控件的(Checked)属性设置为true。
8、数据库表中的每一行称为一条(记录)
9、要关闭已打开的数据库连接,应使用连接对象的(close )方法。
10、SQL语句中的选择语句,使用的关键字是(SELECT)。
11、SQL语句中删除一个表中记录,使用的关键字是(delete)。
12、在windows程序中,若想选中复选框,则应将该控件的(checked)属性设置为true。
13、委托声明的关键字是(delegate)。
14、String类的(Compare)方法实现的功能是比较两个字符串的值。
15、使用Message.Show()方法可以显示消息框,消息框的返回值是一个(DialogResult)类型。
四、简答题
1什么是异常?
异常有什么作用?
异常是错误的一种,它的结果是导致程序不能正确运行,如系统崩溃、程序非正常退出、死循环等。
当抛出异常后,程序将不正常终止。
但是,如果能很好的在程序中俘获异常并处理异常,可以增强程序的健壮性。
2.C#中处理异常采用的结构化异常处理语句有哪些?
并简要说明。
C#中共包含3种结构化异常处理语句:
try…catch语句,try…finally语句和try…catch…finally语句。
其中:
try块语句中用来指明有可能出现异常的代码;catch块内指明对所出现的异常的处理,若没有异常,则catch块不执行;finally块是无论是否发生异常均要执行的代码,主要用来清理资源或执行要在try块末尾执行的其它操作,或不需要清理代码,则可以不使用该块。
3什么是委托?
委托与函数指针有何不同?
函数指针用指针获取一个函数的入口地址,实现对函数的操作。
委托与函数指针不同,委托是引用类型,是面向对象的,在使用时要先定义后实例化,然后再调用。
委托可以在运行时间接调用一个或多个方法。
4什么是事件?
事件作为C#的一种类型,主要为类和类的实例定义发出通知的能力,从而将事件和可执行代码捆绑在一起。
事件最常见于窗体编程,如点击按钮事件、鼠标移动事件等等。
5如何在程序中定义和使用自定义事件?
(1)首先,必须在类中声明事件并确定将要使用的委托和参数。
(2)其次,必须定义在触发事件时要调用的委托。
(3)最后,必须设计事件参数类,该参数类的实例会将信息传递给被调用的方法。
如果使用内置的EventArgs对象和EventHandler委托,则可以不执行该步骤。
6对象的方法与对象的事件方法有何异同?
两者都是用一段代码完成特定的功能。
事件方法代码是由用户添加的,事件方法由事件的发生而被自动调用;对象的方法代码是系统预定义的,对用户是隐藏的,不可见的,而且对象的方法必须在代码中调用。
7简述按钮、标签和文本框控件的作用。
按钮控件通常用来接收用户的操作信息,激发相应的事件,按钮是用户与程序交互的最简便的方法。
标签控件的主要功能是输出信息,可以用来标识其他无法显示标题的控件。
文本框控件用于数据的输入与输出,文本框中的文本在程序运行时,可以被用户编辑。
8单选按钮与复选框控件各有什么作用?
RadioButton控件即单选按钮,提供由两个或两个以上互斥选项组成的选项集。
它支持勾选和不勾选两种状态,在文字前用一个可以勾选的圆点来表示,用户只能在一组选项中选择一项。
CheckBox控件即复选框控件,通常用来设置选项,用户可以一次选择任意数量的复选框。
9实际应用中,菜单分为哪两种形式?
C#中设计主菜单使用哪种控件?
实际应用中,菜单分为主菜单和弹出式菜单(上下文菜单)。
通常使用MenuStrip控件实现主菜单设计。
10简述已连接环境与非连接环境的区别与优缺点。
已连接环境是指应用程序和数据库之间保持连续的通信,优点是能及时刷新数据库,安全性较高,缺点是需要固定的数据库连接,不宜多个用户共同使用同一个数据库,扩展性差。
非连接环境是指应用程序能够在与数据库断开的情况下进行操作,优点是应用程序可以随时连接到数据库获取相应的信息,缺点是获得的数据可能不是最新的,并且对数据更改时可能引发冲突,因为在某一时刻可能有多个用户同时对统一数据操作。
11何谓数据绑定技术?
所谓数据绑定技术就是把已经打开的数据集中某个或者字段绑定到组件的某些属性上的一种技术,就是把已经打开的数据的某个或者某些字段绑定到TextBox、ListBox、ComboBox等组件能够显示数据的属性上,当对组件完场数据绑定后,其显示字段的内容将随着数据记录指针的变化而变化。
12事件是一种委托吗?
为什么?
事件不是委托,不过由于事件的性质决定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托。
13列举ADO.NET中的五个主要对象,并简单描述
Connection连接对象,Command执行命令和存储过程,DataReader向前只读的数据流,DataAdapter适配器,支持增删查询,DataSet数据级对象,相当于内存里的一张或多张表。
14NET中读写数据库需要用到那些类?
他们的作用?
DataSet:
数据存储器;DataCommand:
执行语句命令;DataAdapter:
数据的集合,用于填充。
15DataReader和DataSet的异同
DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作.
16解释virtual、sealed、override和abstract的区别
virtual声明虚方法的关键字,说明该方法可以被重写;sealed说明该类不可被继承;override重写基类的方法;abstract声明抽象类和抽象方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
17什么叫泛型(generics)?
使用泛型,可以定义使用类型参数定义的和/或方法。
当客户端代码实例化类型时,会指定一个特定的类型作为参数。
五、计算题
1、定义方法floatave(float[]a)实现求数组的平均值,在主函数中使用委托调用该方法,求数组(23,45,12,67.8,12.3)的平均值。
publicstaticfloatave(float[]a)
{
floatsum=0;
foreach(floatnina)
sum=sum+n;
returnsum/a.Length;
}
publicdelegatefloatF(float[]a);
staticvoidMain(string[]args)
{
float[]a1=newfloat[]{23,45,12,67.8F,12.3F};
Ff=newF(ave);
Console.WriteLine("数组平均值:
{0}",f(a1));
Console.ReadKey();
}
2、List集合的使用
ListlistEmail=newList();
staticstringqueryDomain;
privatevoidForm1_Load(objectsender,EventArgse){
foreach(stringstrinlistEmail)
}
3、使用Dictionary泛型集合实现学生管理系统
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
publicclassStuInfo
{
privatestringid;
privatestringname;
privatestringclasses;
privatestringtelephone;
publicstringId
{
get{returnid;}
set{id=value;}
}
publicstringName
{
get{returnname;}
set{name=value;}
}
publicstringClasses
{
get{returnclasses;}
set{classes=value;}
}
publicstringTelephone
{
get{returntelephone;}
set{telephone=value;}
}
publicStuInfo(string_id,string_name,string_classes,string_telephone)
{
this.id=_id;
this.name=_name;
this.classes=_classes;
this.telephone=_telephone;
}
}
DictionarystuDic=newDictionary();
privatevoidForm1_Load(objectsender,EventArgse)
{
StuInfozhang=newStuInfo("1001","张三","软件
StuInfoli=newStuInfo("1002","李四","软件
StuInfoma=newStuInfo("1003","马玲","软件
StuInfowang=newStuInfo("1004","王强","软件
stuDic.Add(zhang.Id,zhang);
stuDic.Add(li.Id,li);
stuDic.Add(ma.Id,ma);
stuDic.Add(wang.Id,wang);
panel1.Visible=false;
this.Height=270;
fillGrid(stuDic);
}
publicvoidfillGrid(Dictionarydic)
{
if(dataGridViewInfo.ColumnCount==0)
{DataGridViewTextBoxColumncol1=newDataGridViewTextBoxColumn();
col1.HeaderText="学号";
col1.DataPropertyName="Id";
col1.Name="No";
DataGridViewTextBoxColumncol2=newDataGridViewTextBoxColumn();
col2.HeaderText="姓名";
col2.DataPropertyName="Name";
col2.Name="Name";
DataGridViewTextBoxColumncol3=newDataGridViewTextBoxColumn();
col3.HeaderText="班级";
col3.DataPropertyName="Classes";
col3.Name="Classes";
DataGridViewTextBoxColumncol4=newDataGridViewTextBoxColumn();
col4.HeaderText="电ì?
话?
?
";
col4.DataPropertyName="Telephone";
col4.Name="Telephone";
}
BindingSourcebs=newBindingSource();
bs.DataSource=dic.Values;
dataGridViewInfo.DataSource=bs;
}
privatevoidbtnQuery_Click(objectsender,EventArgse)
{
if(txtQueryInfo.Text=="")
{
fillGrid(stuDic);
return;
}
if(stuDic.ContainsKey(txtQueryInfo.Text))
{
StuInfostu=stuDic[txtQueryInfo.Text];
Dictionarysubdic=newDictionary();
subdic.Add(stu.Id,stu);
fillGrid(subdic);
}
else
{
MessageBox.Show("查无此人","出错!
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
privatevoidbtnAdd_Click(objectsender,EventArgse)
{
panel1.Visible=true;
this.Height=400;
txtID.Focus();
}
privatevoidbtnSubmit_Click(objectsender,EventArgse)
{
if(txtID.Enabled==true)
{
if(stuDic.ContainsKey(txtID.Text))
{
MessageBox.Show("学号已存在","出错!
",MessageBoxButtons.OK,MessageBoxIcon.Error);
return;
}
if(txtID.Text==""||txtName.Text==""||txtClass.Text==""||txtTelephone.Text=="")
{
MessageBox.Show("信息不能为空!
","出错",MessageBoxButtons.OK,MessageBoxIcon.Error);
return;
}
StuInfostu=newStuInfo(txtID.Text,txtName.Text,txtClass.Text,txtTelephone.Text);
stuDic.Add(stu.Id,stu);
fillGrid(stuDic);