C试题.docx
- 文档编号:5626413
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:16
- 大小:21.80KB
C试题.docx
《C试题.docx》由会员分享,可在线阅读,更多相关《C试题.docx(16页珍藏版)》请在冰豆网上搜索。
C试题
1、C#与其它语言相比有哪些突出特点
简洁的语法
精心地面向对象设计
与Web的紧密结合
完整的安全性与错误处理
版本处理技术
灵活性与兼容性
等
2、NET的结构由哪四部分组成
VOS类型系统
元数据
公用语言规范
虚拟执行系统
3、说说在C#代码中添加注释要注意那些问题
1、避免在“//”之后的单行注解中使用反斜杠符号“\”因为反斜杠符号“\”在C#中是一个续行符。
2、其次分割符“/*”和“*/”之间的注释不能有嵌套注释,这是因为C#编译器从遇到第一个分割符“/*“开始,将忽略下一个“/*”,直到遇上下一个与之匹配的分割符“*/”,才认为注释结束这样编译器就会对多余“*/”的报告错误。
认为没有“*/”与之相匹配。
4、写出下面程序运行的结果
usingSystem
classTest{
publicstaticvoidMain()
{
inti=10;
objectobj=i;if(objisint){
Console.Write("Thevalueofiisboxing!
");
}
i=20;
Console.WriteLine("int:
i={0}",i);
Console.WriteLine("object:
obj={0}",obj);
}
}
输出结果为
Thevalueofiisboxing!
int:
i=20;
object:
obj=10;
5、说明下面给出了一些变量名的例子是合法的还是非法的
inti;//合法
intNo.1;//不合法含有非法字符
stringtotal;//合法
charuse;//不合法与关键字名称相同
char@use;//合法
floatMain;//不合法与函数名称相同
6、写出下面程序运行的结果
usingSystem;
enumWeekday
{
Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
};
classTest
{
publicstaticvoidMain()
{
Weekdayday;
day=(Weekday)3;
Console.WriteLine(day);
}
}
程序的输出是
3
7、写出计算函数值
程序,尽量简短
floatx,y,z;
try{
z=Math.Sqrt(x*x-y*y);
}
catch{
z=Math.Sqrt(y*y-x*x);
finally{
z=z+x;
}
8、简述Coad与Yourdon方法的五个层次和四个组成部分(8、9、10任选一题目)
Coad与Yourdon在设计阶段继续采用面向对象分析阶段中提到的五个层次(对象、和类、结构、属性、服务和主题)这有助于从分析到设计的过渡。
按照Coad与Yourdon面向对象设计方法,在设计阶段中利用这五个层次,建立系统的四个组成成分:
问题论域,用户界面,任务管理和数据管理。
9、类的成员有哪几种类型
成员常量代表与类相关联的常量值
域即类中的变量
成员方法复杂执行类中的计算和其它操作
属性用于定义类中的值并对它们进行读写
事件用于说明发生了什么事情
索引指示器允许像使用数组那样为类添加路径列表
操作符定义类中特有的操作
构造函数和析构函数分别用于对类的实例进行初始化和销毁
10、同set访问器和get访问器写一个程序片段表示:
旅馆对住宿人员进行登记,要记录的信息有:
客人姓名、性别、所住的房间号、已住宿的天数。
这里,客人的姓名和性别一经确定就不能再更改了,用户可以要求改变房间,住宿的天数当然也是不断变化的。
程序清单
我们在类的构造函数中对客人的姓名和性别进行初始化,在四个属性中,客人的姓名和性别是只读的故只具有get访问器;房间号和住宿天数允许改变同时具有set访问器和get访问器
usingSystem;
publicclassCustomer
{
publicenumsex
{
man,
woman,
};
privatestrings_name;
publicstringName
{
get{
returns_name;
}
}
privatesexm_sex;
publicsexSex
{
get{
returnm_sex;
}
}
privatestrings_no;
publicstringNo
{
get{
returns_no;
}
set{
if(s_no!
=value){
s_no=value;
}
}
}
privateinti_day;
publicintDay{
get{
returni_day;
}
set{
if(i_day!
=value){
i_day=value;
}
}
}
publicvoidCustomer(stringname,sexsex,stringno,intday)
{
s_name=name;
m_sex=sex;
s_no=no;
i_day=day;
}
}
11、事件的预订是通过OkButton.Click+=newEventHandler(OkButtonClick);来实现的那么事件的撤消是采用
OkButton.Click-=newEventHandler(OkButtonClick);
12、看下面的例子
abstractclassA
{
publicabstractvoidF();
}
sealedclassB:
A
{
publicoverridevoidF(){
//F的具体实现代码
}
}
如果我们尝试写下面的代码
classC:
B{}
请问是否会报错,如果报错请说明原因。
会报错
C#会指出这个错误告诉你B是一个密封类不能试图从B中派生任何类
13、读下列代码看是否有错误,如果有请指出,并写出正确的代码:
namespaceN1.N2
{
classA{}
}
namespaceN3
{
usingN1;
classB:
N2.A{}
}
错误内容:
namespaceN1.N2
{
classA{}
}
namespaceN3
{
usingN1;
classB:
N2.A{}//错误,N2未知
}
正确代码:
namespaceN1.N2
{
classA{}
classB{}
}
namespaceN3
{
usingN1.N2;
classA{}
}
14、文件的同步操作和异步操作的区别在那里
同步和异步操作之间的主要区别:
在同步I/O操作中,方法将一直处于等待状态,直到I/O操作完成。
而在异步I/O操作中,在开始了I/O操作后,程序的方法可以转移去执行其它的操作,这样大大提高了程序执行的效率。
15、说说文件和流之间的区别和联系
文件(file)和流(stream)即有区别又有联系。
文件是在各种媒质上(可移动磁盘、硬盘、CD等)永久存储的数据的有序集合。
它是一种进行数据读写操作的基本对象。
通常情况下文件按照树状目录进行组织,每个文件都有文件名,文件所在路径,创建时间访问、权限等属性。
流非常类似于单独的磁盘文件,它也是进行数据读取操作的基本对象。
流为我们提供了连续的字节流存储空间,虽然数据实际存储的位置可以不连续,甚至可以分布在多个磁盘上,但我们看到的是封装以后的数据结构,是连续的字节流抽象结构。
这和一个文件也可以分布在磁盘上的多个扇区一样。
除了和磁盘文件直接相关的文件流以外,流有多种类型,流可以分布在网络中、内存中或者是磁带中。
16、程序清单
usingSystem;
classVehicle//定义汽车类
{
publicintwheels;//公有成员轮子个数
protectedfloatweight;//保护成员重量
publicvoidF(){
wheels=4;//允许访问自身成员
weight=10;//允许访问自身成员
}
};
classtrain//定义火车类
{
publicintnum;//公有成员车厢数目
privateintpassengers;//私有成员乘客数
privatefloatweight;//私有成员重量
publicvoidF(){
num=5;//允许访问自身成员
weight=100;//允许访问自身成员
Vehiclev1=newVehicle();
v1.wheels=4;//允许访问v1的公有成员
weight=6;
}
}
classCar:
Vehicle//定义轿车类
{
intpassengers;//私有成员乘客数
publicvoidF(){
Vehiclev1=newVehicle();
V1.wheels=4;//允许访问v1的公有成员
V1.weight=6;//允许访问v1的保护成员
}
}
根据上述代码中关于车辆的类的代码示例,请添加上构造函数,验证一下构造函数中参数的传递
程序清单
usingSystem;
classVehicle//定义汽车类
{
publicintwheels;//公有成员轮子个数
protectedfloatweight;//保护成员重量
publicVehicle(){;}
publicVehicle(intw,floatg){
wheels=w;
weight=g;
}
publicvoidShow(){
Console.WriteLine(“thewheelofvehicleis:
{0}”,wheels);
Console.WriteLine(“theweightofvehicleis:
{0}”,weight);
}
};
classtrain//定义火车类
{
publicintnum;//公有成员车厢数目
privateintpassengers;//私有成员乘客数
privatefloatweight;//私有成员重量
publicTrain(){;}
publicTrain(intn,intp,floatw){
num=n;
passengers=p;
weight=w;
}
publicvoidShow(){
Console.WriteLine(“thenumoftrainis:
{0}”,num);
Console.WriteLine(“theweightoftrainis:
{0}”,weight);
Console.WriteLine(“thePassengerstraincaris:
{0}”,Passengers);
}
}
classCar:
Vehicle//定义轿车类
{
intpassengers;//私有成员乘客数
publicCar(intw,floatg,intp):
base(w,g)
{
wheels=w;
weight=g;
passengers=p;
}
newpublicvoidShow(){
Console.WriteLine(“thewheelofcaris:
{0}”,wheels);
Console.WriteLine(“theweightofcaris:
{0}”,weight);
Console.WriteLine(“thePassengersofcaris:
{0}”,Passengers);
}
}
classTest
{
publicstaticvoidMain(){
Vehiclev1=newVehicle(4,5);
Traint1=newTrain();
Traint2=newTrain(10,100,100);
Carc1=newCar(4,2,4);
v1.show();
t1.show();
t2.show();
c1.show();
}
}
程序的运行结果为:
thewheelofvehicleis:
0
theweightofvehicleis:
0
thenumoftrainis:
0
theweightoftrainis:
0
thePassengersoftrainis:
0
thenumoftrainis:
10
theweightoftrainis:
100
thePassengersoftrainis:
100
thewheelofcaris:
4
theweightofcaris:
2
thePassengersofcaris4
17、请解释一下析构函数及其作用,在C#语言中可否省略析构函数?
析构函数的名字与类名相同,只是在前面加了一个符号“~”。
析构函数不接受任
何参数,也不返回任何值。
如果你试图声明其它任何一个以符号“~”开头而不与类名相同的方法。
和试图让析构函数返回一个值一样,编译器都会产生一个错误。
在类的实例超出范围时,我们希望确保它所占的存储能被收回。
C#中提供了析构
函数,用于专门释放被占用的系统资源。
可以省略,而在C#中垃圾收集器会帮助我们完成析构函数做的工作。
18、已知一棵具有n个结点的完全二叉树被顺序存储于一维数组的A[1]-A[n]元素中,试编写一个算法打印出编号为i的结点的双亲和所有孩子。
主要程序清单如下:
voidRequest(intA[],intn,inti)
{
if(i>n)
{
System.Windows.Forms.MessageBox.Show(“编号为”+i.ToString()+“的结点不存在!
”);
}
else
{
intj=i/2;//下标为J的结点是下标为I的结点的双亲
if(j>0)
{
System.Windows.Forms.MessageBox.Show(i.ToString()+“双亲编号为:
”+A[j].ToString());
}
else
{
System.Windows.Forms.MessageBox.Show(i.ToString()+“没有双亲结点”);
}
if(2*i { System.Windows.Forms.MessageBox.Show(i.ToString()+“左子女是”+A[2*i].ToString()); System.Windows.Forms.MessageBox.Show(i.ToString()+“右子女是”+A[2*i+1].ToString()); } elseif(2*i==n) { System.Windows.Forms.MessageBox.Show(i.ToString()+“左子女是”+A[2*i].ToString()); System.Windows.Forms.MessageBox.Show(i.ToString()+“没有右子女”); } else { System.Windows.Forms.MessageBox.Show(i.ToString()+“没有子女”); } } } 19、下面的例子则用于删除当前目录下的所有文件 程序清单 usingSystem; usingSystem.IO; classFileTest { publicstaticvoidMain() { Console.WriteLine("Areyousuretodeleteallthefilesincurrentdirectory? "); Console.WriteLine("Press'Y'thenentertocontinue,anyotherkeytoabort"); inta=Console.Read(); if(a=='Y'||a=='y'){ Console.WriteLine("Deletingthefiles..."); } else{ Console.WriteLine("canceledbyuser"); return; } Directorydir=newDirectory("."); foreach(Filefindir.GetFiles()) { f.Delete(); } } } 把程序稍做改动,删除当前目录下的所有扩展名为.exe的文件 把最后一段代码改写为 foreach(Filefindir.GetFiles(“*.exe”)) { f.Delete(); } 20、下面的代码中利用Directory的CreateDirectory和CreateDirectories方法创建一级和二级子目录 程序清单 usingSystem; usingSystem.IO; classDirectoryTest { publicstaticvoidMain() { Directoryd=newDirectory("c: \\c#"); Directoryd1; Directoryd2; Try { d1=d.CreateSubdirectory("file1"); } catch(IOExceptione) { Console.WriteLine("directoryfile1failedbecause: {0}",e); return; } try { d2=d.CreateSubdirectories("file1\\file2"); //等于d2=d1.CreateSubDirectory("file2"); } catch(IOExceptione) { Console.WriteLine("directoryfile2failedbecause: {0}",e); return; } Console.WriteLine("Createdirectorysuccessfully! "); } } 同样我们可以进行目录删除操作请写出程序清单: usingSystem; usingSystem.IO; classDirectoryTest { publicstaticvoidMain() { Directoryd=newDirectory("c: \\c#\\file1"); Directory[]subdir; Try { subdir=d.GetDirectories(); } catch(DirectoryNotFoundExceptione) { Console.WriteLine("Cannotfindsuchadirectorybecause: {0}",e); return; } foreach(Directorydirinsubdir){ dir.Delete(); } d.Delete(); Console.WriteLine("Deletesuccessfully! "); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试题
![提示](https://static.bdocx.com/images/bang_tan.gif)