C#复习题.docx
《C#复习题.docx》由会员分享,可在线阅读,更多相关《C#复习题.docx(13页珍藏版)》请在冰豆网上搜索。
![C#复习题.docx](https://file1.bdocx.com/fileroot1/2023-2/7/f5731d44-97af-4011-9a7e-65b0ac2aee29/f5731d44-97af-4011-9a7e-65b0ac2aee291.gif)
C#复习题
一选择题(每题2分,共15题,总计30分)
二判断题(每题1分,共10题,总计10分)
三填空题(每空2分,共10空,总计20分)
四简答题(每题5分,共4题,总计20分)
五编程题(每题10分,共2题,总计20分)
1、
结构和类区别
(1)结构是一个值类型,它存储在栈中
类是一个引用类型,它存储在堆中
(2)结构不允许继承,类可以继承
(3)结构的构造函数必须有参数
类的构造函数可以没有参数
(4)结构中,实例字段不允许设置初始值;而类是允许的
(5)结构有默认的构造函数,但没有析构函数
类既有默认的构造函数,又有析构函数
(6)结构可以不使用new进行初始化
类必须使用new进行初始化
//类型与存储、继承、构造函数的参数、实例字段设初值、
//构造及析构函数、new初始化
2、C#中构造函数有以下特点:
(1)必须以类的名字相同;
(2)没有返回类型,不能返回值;
(3)在类被实例化时会自动执行;
(4)在构造函数中允许调用其它构造函数;
(5)构造函数中允许进行虚函数调用
//名、返回类型与返回值、执行、调用其他构造函数、虚函数调用
3、托管模块、程序集和应用程序域各自的含义以及三者之间的关系分别是:
三者含义:
1)托管模块:
是由CLR支持的各种语言的源代码经过编译生成的,主件可生成一个或多个托管模块
2)程序集:
由清单元数据、一个或多个托管模块、资源文件组成。
3)应用程序域:
是一组程序集的逻辑容器
三者关系:
1)一个程序集包含一个或多个托管模块
2)一个应用程序域包含一个或多个程序集。
4、程序集由哪些元素组成?
根据程序集包含托管模块数量的不同,程序集又分成哪几种类型,他们分别包含哪些元素?
CLR操作的对象是程序集
程序集由清单元数据、一个或多个托管模块、资源文件组成
根据程序集包含托管模块数量的不同,程序集又分为:
多模块程序集和单模块程序集
多模块程序集的托管模块包括主托管模块和普通托管模块
单模块程序集的托管模块只包括主托管模块
程序集由主托管模块表示,程序集与主托管模块名称一致
主托管模块有两种:
.exe文件(前台)、.dll文件(后台)
即程序集有两种:
.exe文件、.dll文件
//组成、依托管模块数量分类及各所包含的元素、2种主托管模块(程序集)
5、什么是应用程序域?
一个应用程序域有几个Main函数?
其特点是什么
应用程序域:
一组程序集的逻辑容器;
(如:
一个.exe文件和若干.dll文件组成一个应用程序域)
一个应用程序域有一个Main函数
特点:
应用程序域之间是相互隔离的
应用程序域可以被卸载
应用程序域可以单独实施安全策略和配置策略
6、在将CLR加载到程序集之后,在应用程序开始运行之前,.NET框架文件MSCorEE都执行了哪些操作?
(1)MSCorEE检查CLR表头获得Main方法的元数据标记
(2)MSCorEE检查Main方法的元数据以获得其IL在托管EXE中的位置
(3)MSCorEE将Main方法的IL编译成本地CPU指令
(4)MSCorEE跳转到Main方法编译后的本地CPU指令上,此时应用程序开始运行
7、在托管代码的执行过程中,如果WriteLine方法是第一次被调用,则其相应的JITCompiler函数执行的操作是什么?
(1)在Console类型所属程序集的元数据中,查找被调用的WriteLine方法
(2)从元数据中获得该方法的IL代码。
(3)分配一块内存空间
(4)将第二步所得的IL代码编译为本地CPU指令,将它们保存在第三步分配的内存块中
(5)在Console类型表中修改方法对应的条目,使其指向第三步中分配的内存块
(6)跳转到包含在第三步中分配的内存块里的本地代码上
8、什么是代龄机制?
“代”指的是什么?
关于代龄的三点假设是什么?
代龄机制是旨在提高垃圾收集器性能的一种机制。
代:
指堆中对象产生的先后
关于代龄的三点假设
对象越新,其生存期越短
对象越老,其生存期越长
对托管堆的一部分执行垃圾收集要比对整个托管堆执行垃圾收集速度更快
9、ADO.NET主要提供的两种.NETDataProvider分别是什么?
它们分别访问哪些数据库?
SQLServer.NETDataProvider
访问SQLServer7.0及更高版本数据库
OLEDB.NETDataProvider
访问SQLServer6.5或更早版本的数据库、Oracle数据库和MicrosoftAccess数据库
10、在ADO.NET对象模型中,.NETDataProvider的四个核心类分别是什么?
它们的功能又各是什么?
11、Command类的ExecuteNonQuery方法、ExecuteReader方法和ExecuteScalar方法执行的数据库操作分别是什么?
12、
在DataAdapter类中,决定数据库操作的四种属性分别是什么?
请对每个属性决定的操作进行简要说明。
13、DataAdapter类的Fill方法和Update方法完成的操作分别是什么?
这两种方法分别使用哪个DataAdapter属性中指定的SQL语句?
14、请简要说明Cookie、Application、Session、Request/Response这几种对象保存的数据的生命期分别是什么?
Cookie——数据在Cookie生命期到达后或者在客户端Cookie文件删除后消失
Application——数据在服务器关闭后消失
Session——数据在浏览器关闭后消失
Request/Response——数据在页面自身或页面之间传递
编程题:
1、书面作业:
P9015
(题目:
编写一个程序,首先从控制台读取10个数字,然后将这10个数字按大小排序,最后从控制台中读取一个数字,根据这个数字的大小将这个数字插入相应位置;最后将其输出到控制台。
--分别用数组和ArrayList实现)
说明:
(1)用整型数组实现,排序算法用选择排序(已提供)分别实现
(2)用ArrayList实现,排序算法用ArrayList的Sort()方法(已提供)实现
答案:
“编程题答案”文件夹下的“书面作业代码.doc”
2、利用折半查找方法查找有序表中的元素
说明:
(1)用整型数组实现有序表
(2)用ArrayList实现有序表
答案:
“编程题答案”文件夹下的“折半查找实现代码(数组和ArrayList).doc”
作业1、方法一、用数组实现
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespacepaixu//命名空间
{
classProgram//类的声明
{
privateint[]data;//声明一个数组
staticvoidMain(string[]args)//主函数--new对象,调用对象方法
{//提示输入、输入转型且使用于方法
Programp=newProgram();
p.SelectionSort();
Console.WriteLine("请输入一个数字:
\n");
p.Insert(Convert.ToInt32(Console.ReadLine()));
}
publicProgram()//构造器初始化数组,得到前面10个数
{
data=newint[11];
for(inti=0;i<10;i++)
data[i]=Convert.ToInt32(Console.ReadLine());
}
publicvoidSelectionSort()//选择排序方法
{
inttmp;//中间变量,做交换使用
for(inti=0;i<9;i++)//0-9,循环10次(现在只有10个数)
{
for(intj=i+1;j<10;j++)//初始值为外层循环加1,小于数组长度-1
{
if(data[j]{
tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
}
}
for(inti=0;i<10;i++)//排序完之后输出;用\t排格式
Console.Write("{0}\t",data[i]);
}
publicvoidInsert(intelem)//插入一个数
{
for(inti=0;i<10;i++)//0-10循环11次
if(data[i]>elem)//若当前数大于输入数时,则执行语句
{
for(intj=10;j>i;j--)//10开始,判断语句是内层大于外层,做自减
data[j]=data[j-1];
data[i]=elem;
break;
}
for(inti=0;i<11;i++)
Console.Write("{0}\t",data[i]);
}
}
}
作业1、方法二、用ArrayList实现(用ArrayList的Sort()方法排序)
usingSystem.Collections;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespacepaixu_ArrayList_
{
classProgram
{
privateArrayListdata;
staticvoidMain(string[]args)
{
Programp=newProgram();
p.SelectionSort();
Console.WriteLine("请输入一个数字:
\n");
p.Insert(Convert.ToInt32(Console.ReadLine()));
}
publicProgram()
{
data=newArrayList();
for(inti=0;i<10;i++)
data.Add(Convert.ToInt32(Console.ReadLine()));
}
publicvoidSelectionSort()
{
data.Sort();
for(inti=0;i<10;i++)
Console.Write("{0}\t",data[i]);
}
publicvoidInsert(intelem)
{
data.Add(elem);
data.Sort();
for(inti=0;i<11;i++)
Console.Write("{0}\t",data[i]);
}
}
}
作业2、一、用整型数组实现
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceTest2_zhebanchazhao
{
classProgram
{
staticvoidMain(string[]args)
{
int[]d=newint[20];
intr,keyElem;
for(inti=0;i<20;i++)
d[i]=Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入要查找的元素:
\n");
keyElem=Convert.ToInt32(Console.ReadLine());
r=BinTraverse(d,keyElem);
if(r>=0)
Console.WriteLine("在有序表中,找到元素{0},它的位置为{1}",keyElem,r+1);
elseConsole.WriteLine("有序表中不存在元素{0}",keyElem);
}
staticintBinTraverse(int[]data,intkey)
{
intlow=0;
inthigh=data.Length-1;
intmid;
while(low<=high)
{
mid=(low+high)/2;
if(data[mid]==key)returnmid;
elseif(data[mid]elsehigh=mid-1;
}
return-1;
}
}
}
作业2、二、用ArrayList实现
usingSystem;
usingSystem.Collections;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceTest2_zhebanchazhao_2_
{
classProgram
{
staticvoidMain(string[]args)
{
ArrayListd=newArrayList();
intr,keyElem;
for(inti=0;i<20;i++)d.Add(Console.ReadLine());
Console.WriteLine("请输入要查找的元素:
");
keyElem=Convert.ToInt32(Console.ReadLine());
r=BinTraverse(d,keyElem);
if(r>=0)Console.WriteLine("在有序表中,找到元素{0},它的位置为{1}",keyElem,r+1);
elseConsole.WriteLine("有序表中不存在元素{0}",keyElem);
}
staticintBinTraverse(ArrayListdata,intkey)
{
intlow=0;
inthigh=data.Count-1;
intmid;
while(low<=high)
{
mid=(low+high)/2;
if(Convert.ToInt32(data[mid])==key)returnmid;
elseif(Convert.ToInt32(data[mid])elsehigh=mid-1;
}
return-1;
}
}
}